【N25第六周作业】VIM、crontab、简单脚本

请详细总结vim编辑器的使用并完成以下练习题
第二周有写过vim的用法,请查看连接:

周期性任务计划:cron
	服务程序:
		cronie:主程序包,提供了crond守护进程及相关辅助工具;
			
	确保crond守护进程(daemon)处于运行状态:
		CentOS 7:
			systemctl  status  crond.service
				Active: active (running) ... ...
					
		CentOS 6:
			service  crond  status
				... is running.
					
	向crond提交作业的方式不同于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件;要使用crontab命令;
		cron任务分为两类:
			系统cron任务:主要用于实现系统自身的维护;
				手动编辑:/etc/crontab文件
			用户cron任务:
				命令:crontab命令
			
		系统cron的配置格式:/etc/crontab
			SHELL=/bin/bash
			PATH=/sbin:/bin:/usr/sbin:/usr/bin
			MAILTO=root

		第1列   第2列    3      4       5    6    7
                第1列表示分钟1~59 每分钟用*或者 */1表示
                第2列表示小时1~23(0表示0点)
                第3列表示日期1~31
                第4列表示月份1~12
                第5列标识号星期0~6(0表示星期天)
                第6列要运行的命令的用户
		第7列要运行的命令		
		注意:
		(1) 每一行定义一个周期性任务,共7个字段;
			*  *  *  *  * : 定义周期性时间
			user-name : 运行任务的用户身份
			command to be executed:任务
		(2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
		(3) 执行结果邮件发送给MAILTO指定的用户
					
	用户cron的配置格式:/var/spool/cron/USERNAME
		SHELL=/bin/bash
		PATH=/sbin:/bin:/usr/sbin:/usr/bin
		MAILTO=root	
			
	时间表示法:
		(1) 特定值;
			给定时间点有效取值范围内的值;
			注意:day of week和day of month一般不同时使用;
		(2) *
			给定时间点上有效取值范围内的所有值;表“每..”
		(3) 离散取值:,
			在时间点上使用逗号分隔的多个值; 
				#,#,#
		(4) 连续取值:-
			在时间点上使用-连接开头和结束
				#-#
		(5) 在指定时间点上,定义步长: 
			/#:#即步长;
					
		注意:
		(1) 指定的时间点不能被步长整除时,其意义将不复存在;
		(2) 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;
		    定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次;
					
		示例:
			(1) 3 * * * *:每小时执行一次;每小时的第3分钟;
			(2) 3 4 * * 5:每周执行一次;每周5的4点3分;
			(3) 5 6 7 * *:每月执行一次;每月的7号的6点5分;
			(4) 7 8 9 10 *:每年执行一次;每年的10月9号8点7分;
			(5) 9 8 * * 3,7:每周三和周日,8点9分;
			(6) 0 8,20 * * 3,7:
			(7) 0 9-18 * * 1-5:
			(8) */5 * * * *:每5分钟执行一次某任务;
			(9) */7
		       (10)0 0 * * *  /usr/sbin/ntpdate -u pool.ntp.org >/dev/null 2>&1			
crontab命令:
	crontab [-u user] [-l | -r | -e] [-i] 
		-e:编辑任务;
		-l:列出所有任务;
		-r:移除所有任务;即删除/var/spool/cron/USERNAME文件;
		-i:在使用-r选项移除所有任务时提示用户确认;
		-u user:root用户可为指定用户管理cron任务;					
									
		注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件:
			(1) COMMAND > /dev/null
			(2) COMMAND &> /dev/null
				
		注意:定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可;

    
at命令:
	at  [OPTION]... TIME
		
		TIME:
			HH:MM [YYYY-mm-dd]
			noon,midnight, teatime
			tomorrow
			now+#
				UNIT:minutes, hours, days, OR weeks
					
		at的作业有队列,用单个字母表示,默认都使用a队列;
		
	常用选项:
	-l:查看作业队列,相当于atq
	-f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入;
	-d:删除指定的作业,相当于atrm;
	-c:查看指定作业的具体内容;
	-q QUEUE:指明队列;
				
	注意:作业执行结果是以邮件发送给提交作业的用户;
--------------------------------------------------------------------------
1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;
:%s/^[[:space:]]\{1,\}.*/#&/g

2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;
:%s/^[[:space:]]\{1,\}//g

3、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符
:%s/^#[[:space:]]\{1,\}//g

4、为/tmp/grub.conf文件中前三行的行首加#号;
:1,3s/^/#&/

5、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;
:%s@\(enabled\|gpgcheck\)=0@\1=1@g

6、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202
0 */4 * * * /usr/bin/cp -r /etc/   /backup/etc-`date +%Y%m%d%H%M%S`/  >dev/null 2>&1

7、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20150402
0 0 * * 2,4,6 /usr/bin/cp -r /var/log/messages  /backup/messages_logs/messages-`date +%Y%m%d`  >/dev/null  2>&1

8、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中
0 */2 * * * /usr/bin/grep '^S' /proc/meminfo  >> /stats/memory.txt  >/dev/null  2>&1

9、工作日的工作时间内,每两小时执行一次echo "howdy"
0 9-18/2 * * echo "howdy" 2>&1

脚本编程练习
10、创建目录/tmp/testdir-当前日期时间; 
#!/bin/bash
#
DATE=`date +%Y%m%d%H%M%S`
if [ -d /tmp/testdir-$DATE ];then
	echo "testdir-$DATE is exist!"
	exit 2
else
	mkdir /tmp/testdir-$DATE
	if [ -d /tmp/testdir-$DATE ];then
		echo "create testdir-$DATE success!"
	else
		echo "create failure testdir-$DATE!"
	fi
fi

11、在此目录创建100个空文件:file1-file100
#!/bin/bash
#
for i in {1..100};do
	if [ -e /tmp/file$i ];then
		echo "/tmp/file$i exist"
	else
		touch /tmp/file$i
	fi
done

12、显示/etc/passwd文件中位于第偶数行的用户的用户名;
#!/bin/bash
#
FILE=/etc/passwd
SUM=`wc -l $FILE|cut -d' ' -f1`、
for i in $(seq 2 2 $SUM);do
	NAME=`head -n$i $FILE|tail -1|cut -d: -f1`
	echo "$NAME   "
done

13、创建10用户user10-user19;密码同用户名;
#!/bin/bash
#

for i in {10..19};do
	if id user$i &>/dev/null;then
		echo "user$i exist,adduser failure"
	else
		useradd user$i
		echo "user$i"|passwd --stdin user$i >/dev/null
		echo "user$i add success"
	fi
done

14、在/tmp/创建10个空文件file10-file19; 
#!/bin/bash
#
for ((i=10;i<=19;i++));do
	if [ -e /tmp/file$i ];then
		echo "/tmp/file$i exist"
	else
		touch /tmp/file$i
	fi
done
15、把file10的属主和属组改为user10,依次类推。
#!/bin/bash
#

for ((i=10;i<=19;i++));do
	chown user$i:user$i /tmp/file$i
done


原创文章,作者:sheng,如若转载,请注明出处:http://www.178linux.com/65075

(0)
shengsheng
上一篇 2016-12-27
下一篇 2016-12-27

相关推荐

  • 8-8 处理文本工具sed及vim文本编辑工具

    处理文本工具sed及vim文本编辑工具 Sed:   sed是一种在线编辑器、行编辑器,一次处理一行内容。在处理时,把当前处理的行存储在临时缓冲区中,该缓冲区称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出;然后紧接着处理下一行,重复完成相同的操作,直到文件末尾;sed处理的整个过程中,对象文件…

    Linux干货 2016-08-11
  • 企业实时同步方案—-Rsync+Sersync

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1433623     在博文企业实时同步方案—-Sersync介绍中我们详细介绍了Sersync的原理,设计架构以及…

    Linux干货 2015-03-30
  • DNS实验

      建立DNS服务器(正向解析) linux没有缓存 windows有dns缓存 权威结果,非权威结果 无论是正向解析数据库还是反向解析数据中  写管理员邮件地址或完整域名(FQDN)都要再后面加上点。否则系统会自动不上区域名称。 实验环境先清理防火墙规则,关闭防火墙. centos7 systemctl disabl…

    Linux干货 2016-11-01
  • 文本处理工具练习及作业

    练习1: 1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址 ifconfig |head -n 2 |tail -n 1|tr -s ” ” : |cut -d: -f4 2、查出分区空间使用率的最大百分比值 df|tr -s ‘ ‘ %|sort -t% -k5 -n|tail -n 1|c…

    2017-07-29
  • Week9’s homework

    Week9's homework 1、写一个脚本(1)判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin)(2)分别统计两类用户的个数;通过字符串比较来实现。 #!/bin/bash # for i in $(cat /etc/passwd |…

    Linux干货 2016-12-24
  • 文件的查找工具find

    有的时候我们需要快速查找一些文件,但是我们却不知道这个文件在哪的时候,就急切的需要一个工具来帮助我们,这时候find就诞生了。Find能实现精确查找,虽然速度略慢,但是并不妨碍我们使用,下面就介绍一下find的使用方法。(一) 基于时间戳的查找          假如需要查看七天前的文件,但是总不能一一的去看…

    2017-08-13