請詳細總結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.www58058.com/65075