【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

相关推荐

  • ArchSummit 2017全球架构师峰会100余位国内外技术专家北京等你!

    ArchSummit全球架构师峰会是InfoQ中国团队推出的面向高端技术管理者、架构师的技术大会,参会者中超过50%拥有8年以上的工作经验。

    2017-11-13
  • Linux基础之软件包管理

    一.概述 在redhat系列的发行版中,采用rpm软件包管理器,rpm原名是Red Hat Package Manager,后来当其他发行版也采用这种软件包管理机制以后,重新命名,改为RPM Package Manager,它所能提供的功能是将编译好的应用程序文件打包成一个或几个程序文件,从而使得用户能够方便的安装,升级,卸载软件,而yum则是rpm包管理器…

    Linux干货 2016-11-16
  • 3、常用命令介绍

    http://note.youdao.com/yws/public/redirect/share?id=4840e26ee1d2b2c928b6c26e2ba14661&type=false

    Linux干货 2016-08-08
  • Linux grep与正则表达式浅析

    #Linux grep与正则表达式浅析 ##grep   grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 ###grep语法    &n…

    Linux干货 2017-04-06
  • LVM逻辑卷管理练习

         小编今天要讲的内容是如何创建逻辑卷,然后扩展它、缩减它。LVM 的重点就在于可以弹性的调整文件系统的容量!所以,下面练习开始。 1、创建一个至少有两个PV组成的大小为20G的名为testvg的 VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻 辑卷testlv;挂载至/users目录。 ①准备两个10G的…

    2017-08-26
  • http2

    练习:     (1)基于主机名实现三个虚拟主机     (2) 每虚拟主机使用独立的访问日志和错误日志     (3) 第三个虚拟主机的/admin要进行用户访问认证     (4) 在第二个虚拟主…

    Linux干货 2016-10-09