请详细总结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