【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 22:42
下一篇 2016-12-27 23:35

相关推荐

  • 在vsftp中实现基于pam_mysql的虚拟用户机制

    FTP简介 在介绍vsftp相关内容前,简单描述下FTP。FTP全称File Transfer Protocol,文件传输协议。它是一个C/S架构的协议,在Linux中其服务端实现主要有vsftpd,pureftpd,proftpd,Filezilla,本文主要介绍的是vsftp。客户端实现主要是ftp和lftp两种工具。其工作方式:主要分为两个层面的连接:…

    Linux干货 2017-01-07
  • 数组和变量之间的关系及如何灵活运用数组

    什么是数组?数组:存储多个元素的连续的内存空间,相当于多个变量的集合什么是变量? 变量即是存储单个元素的内存空间 如果整个数组只有一个名字;数组名是数组的标识;也是数组所指向的存储多个元素的连续的内存空间开始地址的标识;数组索引定义从 0 开始(第一个数组元素);到 N 结束引用某个数组元素时,数组名+【索引】格式:${ARRAY_NAM…

    Linux干货 2017-05-22
  • 马哥教育网络班第19期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:一种网路装置,负责网路桥接,将网络的多个网段在数据链路层连接起来。 集线器:将多条以太网线或光纤集合连接在同一段物理介质下的装置。工作在物理层。 二层交换机:工作在数据链路层,交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通…

    Linux干货 2016-08-22
  • MariaDB基础

    MariaDB基础 关系型数据库的基础概念: 1)数据类型:作用:存储格式、数据范围、所能参与的运算、排序方式         字符型:         定长字符型:CHAR(#),BIARNY(#)…

    Linux干货 2016-11-07
  • linux用户与组的基本概念–20160730

    用户组和权限管理—概念       用户组和权限管理—概念 3A:认证,授权,审计。 每个使用者:用户标识,密码:  Authentication    :  认证 Authorization     :授权 Accout/Audition…

    Linux干货 2016-08-04