【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

相关推荐

  • 从案例出发——命令总结之find篇

    在这篇文章中你将看到以下内容:1、find命令的格式、语法、及实际应用 2、3个时间戳的意义  3、各种文件类型的解释  4、软硬链接的区别 5、exec和xargs的区别 6、几个逻辑判断符的意义  7、通配符的意义  8、find 命令下时间查找的特殊定义 首先,来看看以下题目:   &nbsp…

    Linux干货 2016-03-25
  • 8-5作业

    1、取本机ip地址 ifconfig |grep -E -o  '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])' 2、取各分区利…

    Linux干货 2016-08-08
  • SED基本用法和在文本中的使用

    sed命令行格式为: sed [-nefri] ‘command’ 输入文本/文件 常用选项: -n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来 -e∶进行多项编辑,…

    Linux干货 2017-05-05
  • OSI和TCP/IP

            我们生活中各方面都离不开网络,那网络究竟是什么东西呢?它是怎么做到让在不同地点的人无视空间距离完成通信的呢?首先我们来了解一下网络的基本概念。网络是由节点和连线构成,表示诸多对象及其相互联系。在数学上,网络是一种图,一般认为专指加权图。网络除了数学定义外,还有具体…

    2017-09-02
  • linux三剑客之grep

    linux三剑客之grep        所谓三剑客的工具有“grep”、“sed” 、“awk”,他们都是不谋而合的文本搜索查找处理的强大工具。grep 是 Ken Thompson 写的,他也是 Unix 的创造者。 gerp及正则表达式    grep全称(GLobal search Regu…

    Linux干货 2016-08-08
  • LINUX系统文件类型分类

    使用LINUX过程中,时常会对文件进行操作。但是linux中文件究竟有哪些分类呢?今天让我们大家来总结一下吧! 概述:         linux文件可以分为五种类型,分别为:普通文件、目录、字符设备或块设备、套接口文件、符号链接文件。下面详细介绍这几种文件。 1 普通文件[root@lo…

    Linux干货 2017-07-22