【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.www58058.com/65075

(0)
shengsheng
上一篇 2016-12-27 22:42
下一篇 2016-12-27 23:35

相關推薦

  • N22-第六周作業

    1、復制/etc/rc.d/init.d/functions文件至/tmp目錄,將/tmp/functions文件中 的以至少一個空白字符開頭的行的行首加# ~]# cp /etc/rc.d/init.d/functions /tmp~]# vim /tmp/functions %s@^[[:space:]]\+@#@g 2、復制/boot/grub/gru…

    Linux干貨 2016-10-17
  • 用戶和組相關配置文件

    用戶和組的配置文件都在/etc目錄下          /etc/passwd;        內容格式:用戶名;加密后密碼影子(1#);UID;GID;注釋;家目錄,默認shell    …

    Linux干貨 2016-10-23
  • 二維碼的生成細節和原理

    二維碼又稱QR Code,QR全稱Quick Response,是一個近幾年來移動設備上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的信息,也能表示更多的數據類型:比如:字符,數字,日文,中文等等。這兩天學習了一下二維碼圖片生成的相關細節,覺得這個玩意就是一個密碼算法,在此寫一這篇文章 ,揭露一下。供好學的人一同學習之。 關于QR Code…

    Linux干貨 2016-08-15
  • Linux系統修復

    在boot里面我們可以根據自己的需求去設置一些啟動選項,我們今天來了解一下Linux啟動流程,以及boot下的選項。       加載BIOS的硬件信息,獲取第一個啟動設備。 讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息 加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備。 核型執行init程序…

    Linux干貨 2016-09-13
  • 計算機基礎

    計算機組成 計算機發展史 采用電子管的第一代計算機(1946~1959年) 第一代計算機的內部元件使用的是電子管。第一代計算機主要用于科學研究和工程計算。 采用晶體管的第二代計算機(1960~1964年) 第二代計算機的內部元件使用的是晶體管,晶體管比電子管小得多,處理更迅速、更可靠。第二代計算機主要用于商業、大學教學和政府機關。 采用集成電路的第三代計算機…

    Linux干貨 2017-12-03
欧美性久久久久