第4章 vim編輯器與shell 命令腳本
Linux中的一切都是文件
部署一個服務,就是在修改服務的配置文件
Vim編輯器 是Vi編輯器的提升版本
命令模式:a、i、o 進入輸入模式
末行模式:Esc鍵鍵入命令模式
vim vi
vim編輯器是vi編輯器的提升版本
vim 帶有着色的功能
命令模式:複製、剪切、粘貼、搜索等等
輸入模式:隨意對文件進行內容編輯
末行模式:保存、退出、設置編輯環境
進入編輯文件後,默認是在命令模式
Vim中常用的命令
dd 刪除(剪切)光標所在整行
5dd 刪除(剪切)從光標處開始的5行
yy 複製光標所在整行
5yy 複製從光標處開始的5行
u 撤銷上一步的操作
p 把之前刪除(dd)或複製(yy)過的數據粘貼到光標後面
n 顯示搜索命令定位到的下一個字符串
N 顯示搜索命令定位到的上一個字符串
末行模式中可用的命令
:w 保存
:q 退出
:q! 強制退出(放棄對文檔的 修改內容)
:wq! 強制保存退出
:set nu 顯示行號
:set nonu 不顯示行號
:命令 執行該命令
:整數 跳轉到該行
:s/one/two 將當前光標所在行的第一個one 替換成two
:s/one/two/g 將當前光標所在行的所有one 替換成two
:%s/one/two/g 將當前光標所在行的所有one 替換成two
?字符串
/字符串
4.1.2 配置主機名稱
[root@localhost 桌面]# vim /etc/hostname
localhost.localdomain
#linuxprobe.com
[root@localhost 桌面]# cat /etc/hostname
localhost.localdomain
#linuxprobe.com
4.1.3 配置網卡信息
cd /etc/sysconfig/network-scripts/
4.1.4配置Yum軟件倉庫
1、cd /etc/yum.repos.d/ 進入Yum軟件倉庫的配置文件
2、vim rhel17.repo 創建新的配置文件(rhel17.repo)
3、按配置參數的路徑掛載光盤,並把光盤掛載信息寫入到/etc/fstab文件中
4、使用"Yum install httpd -y”命令檢查Yum軟件倉庫是否已經可用。
[root@localhost 桌面]# vim /etc/yum.repos.d/yumwenjian.repo
進入Yum軟件倉庫的配置文件
[rhel]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
創建掛載點進行掛載操作,並設置成開機自動掛載
嘗試使用Yum軟件倉庫來安裝web服務。
4.2 編寫腳本
1:腳本聲明 哪個程序可以懂 bash #!/bin/bash
2:腳本註釋 #sdkasodka 不執行 可以有可以沒有 某一程序或某一段代碼suan的解釋
3:腳本命令 Linux系統命令即是腳本命令
執行腳本
1、bash 腳本名稱.sh
2、./腳本名稱.sh
4.2.1 編寫腳本
[root@linuxprobe ~]# vim xiaofeng1.sh
[root@linuxprobe ~]# cat xiaofeng1.sh
#!/bin/bash
#lianxi jiaoben shiyong
pwd
ls
ll
top
[root@linuxprobe ~]# bash xiaofeng1.sh
/root
anaconda-ks.cfg xiaofeng1.sh 公共 圖片 音樂
initial-setup-ks.cfg xiaolu.txt 模板 文檔 桌面
practise xiaoxiao 視頻 下載
xiaofeng1.sh:行5: ll: 未找到命令
top - 16:11:54 up 4:14, 2 users, load average: 0.61, 0.24, 0.1
Tasks: 494 total, 1 running, 493 sleeping, 0 stopped, 0 zom
%Cpu(s): 19.4 us, 1.8 sy, 0.0 ni, 78.7 id, 0.0 wa, 0.1 hi, 0
KiB Mem: 2035648 total, 1043932 used, 991716 free, 920
KiB Swap: 2097148 total, 0 used, 2097148 free. 328880
PID USER PR NI VIRT RES SHR S %CPU %MEM
2468 root 20 0 1816144 294852 42416 S 80.1 14.5
1186 root 20 0 219796 33704 7500 S 8.9 1.7
5392 root 20 0 789836 24172 14224 S 4.3 1.2
762 root 20 0 0 0 0 S 1.0 0.0
137 root 20 0 0 0 0 S 0.3 0.0
1032 root 20 0 267352 4320 3480 S 0.3 0.2
2603 root 20 0 346920 17252 13692 S 0.3 0.8
3372 root 20 0 0 0 0 S 0.3 0.0
5938 root 20 0 123924 1932 1156 R 0.3 0.1
1 root 20 0 52924 6800 3768 S 0.0 0.3
2 root 20 0 0 0 0 S 0.0 0.0
3 root 20 0 0 0 0 S 0.0 0.0
5 root 0 -20 0 0 0 S 0.0 0.0
[root@localhost ~]# vim xiaofeng1.sh
[root@localhost ~]# bash xiaofeng1.sh
uname -a :
Linux localhost.localdomain
#linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
pwd :
/root
ls :
bianji etc ip.txt xiaolu.txt 視頻 下載
CheckHosts.sh etc.tar.gz practise 公共 圖片 音樂
checkkeys.sh guess.sh xiaofeng1.sh 模板 文檔 桌面
uptime :
01:20:37 up 18 min, 2 users, load average: 0.37, 0.43, 0.32
[root@localhost ~]# cp xiaofeng1.sh jiaobenlianxi.sh
[root@localhost ~]# ls
bianji etc.tar.gz practise 模板 下載
CheckHosts.sh guess.sh xiaofeng1.sh 視頻 音樂
checkkeys.sh ip.txt xiaolu.txt 圖片 桌面
etc jiaobenlianxi.sh 公共 文檔
[root@localhost ~]# rm -f xiaofeng1.sh
[root@localhost ~]# ls
bianji etc ip.txt xiaolu.txt 視頻 下載
CheckHosts.sh etc.tar.gz jiaobenlianxi.sh 公共 圖片 音樂
checkkeys.sh guess.sh practise 模板 文檔 桌面
[root@localhost ~]# cat jiaobenlianxi.sh
#!/bin/bash
#lianxi jiaoben shiyong
echo "uname -a :"
uname -a
echo "pwd :"
pwd
echo "ls :"
ls
echo "uptime :"
uptime
4.2.2接收用戶的參數
變量
$0指腳本名稱本身
$#總共接收到多少參數
$*分別接收到參數有哪些
$1,$3,$5,第1個參數,第3個參數,第5個參數的值是什麼
[root@localhost ~]# vim jiaobencanshu.sh
[root@localhost ~]# cat jiaobencanshu.sh
#!/bin/bash
jiaoben canshu lianxi
echo "$0"
echo "$#,$*"
echo "$1,$3,$5"
[root@localhost ~]# bash jiaobencanshu.sh a b c d e f g h
jiaobencanshu.sh
8,a b c d e f g h
a,c,e
1:接收用戶輸入的參數
2:根據用戶輸入的參數做出判斷
4.2.3判斷用戶的參數
條件測試語句:
文件測試語句:
邏輯測試語句:
整數值比較語句:
字符串比較語句:
文件測試參數:
-d 測試文件是否爲目錄類型
-e 測試文件是否存在
-f 判斷是否爲一般文件
-r 測試當前用戶是否有權限讀取
-w 測試當前用戶是否有權限寫入
-x 測試當前用戶是否有權限執行
判斷/home是否爲一個目錄類型的文件
[root@localhost ~]# [ -d /home ]
[root@localhost ~]# echo $? #判斷上一條語句是否執行成功,若成功,返回0
0
判斷/etc/fstab是否爲一般文件,如果返回值爲0,則代表文件存在,且爲一般文件:
[root@localhost ~]# [ -f /home ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -f /etc/fstab ]
[root@localhost ~]# echo $?
0
邏輯語句
測試語句 && 命令 邏輯的與
測試語句 || 命令 邏輯的或
測試語句 ! 命令 邏輯的非
邏輯的與 &&:當成功的時候,則執行後面語句
[root@localhost ~]# [ -f /etc/fstab ] && echo $?
0
邏輯的或 ||:當成功的時候,則執行後面語句
[root@localhost ~]# [ -d /etc/fstab ] || echo $?
1
[root@localhost ~]# [ $USER=root ] && echo "admin" || echo "user"
admin
[root@localhost ~]# su linuxprobe
[linuxprobe@localhost root]$ [ $USER=root ] && echo "admin" || echo "user"
admin
邏輯的非 !:當成功-->取反值,失敗;當失敗-->取反值,成功;
[root@localhost ~]# [ ! $USER = root ] && echo "user"
[root@localhost ~]# su linuxprobe
[linuxprobe@localhost root]$ [ ! $USER = root ] && echo "user"
user
管理員叫做root用戶
邏輯語句用於對測試結果進行邏輯分析,根據測試結果可實現不同的效果。例如在Shell終端中邏輯“與”的運算符號是&&,它表示當前面的命令執行成功後纔會執行它後面的命令,因此可以用來判斷/dev/cdrom文件是否存在,若存在則輸出Exist字樣。
[root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist
邏輯“或”,它在Linux系統中的運算符號爲||,表示當前面的命令執行失敗後纔會執行它後面的命令,因此可以用來結合系統環境變量USER來判斷當前登錄的用戶是否爲非管理員身份:
[root@linuxprobe ~]# echo $USER
root
[root@linuxprobe ~]# [ $USER = root ] || echo "user"
[root@linuxprobe ~]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ [ $USER = root ] || echo "user"
user
當前我們正在登錄的即爲管理員用戶—root。下面這個示例的執行順序是,,先判斷當前登錄用戶的USER變量名稱是否等於root,然後用邏輯運算符“非”進行取反操作,效果就變成了判斷當前登錄的用戶是否爲非管理員用戶了。最後若條件成立則會根據邏輯“與”運算符輸出user字樣;或條件不滿足則會通過邏輯“或”運算符輸出root字樣,而如果前面的&&不成立纔會執行後面的||符號。
整數比較運算符
-eq 是否等於
-ne 是否不等於
-gt 是否大於
-lt 是否小於
-le 是否 等於或小於
-ge 是否大於或等於
[root@localhost ~]# [ 10 > 5 ] && echo $?
0
[root@localhost ~]# [ 10 > 15 ] && echo $?
0
[root@localhost ~]# [ 10 -gt 8 ] && echo "right" || echo "wrong"
right
[root@localhost ~]# [ 10 -gt 15 ] && echo "right" || echo "wrong"
wrong
[root@localhost ~]# [ 10 -lt 8 ] && echo "right" || echo "wrong"
wrong
[root@localhost ~]# [ 10 -lt 16 ] && echo "right" || echo "wrong"
做內存報警的小程序:
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 1987 893 1094 9 0 315
-/+ buffers/cache: 577 1410
Swap: 2047 0 2047
[root@localhost ~]# free -m | grep Mem:
Mem: 1987 893 1094 9 0 315
[root@localhost ~]# free -m | grep Mem: | awk '{ print $4 }'
1094
[root@localhost ~]# OREZ=free -m | grep Mem: | awk '{ print $4 }'
[root@localhost ~]# echo $OREZ
1090
[root@localhost ~]# [ $OREZ -lt 1024 ] && echo "neicunchognzu" || echo "neicunbuzu"
[root@localhost ~]# [ $OREZ -lt 1024 ] && echo "baojing" | mail -s "subjiect " linuxprobe
查看內存不能使用量
awk 是正則表達式
free命令,它可以用來獲取當前系統正在使用及可用的內存量信息。接下來先使用free -m命令查看內存使用量情況(單位爲MB),然後通過grep Mem:命令過濾出剩餘內存量的行,再用awk '{print $4}'命令只保留第四列,最後用FreeMem=語句
的方式把語句內執行的結果賦值給變量。
這個演示確實有些難度,但看懂後會覺得很有意思,沒準在運維工作中也會用得上。
[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 1826 1244 582 9 1 413
-/+ buffers/cache: 830 996
Swap: 2047 0 2047
[root@linuxprobe ~]# free -m | grep Mem:
Mem: 1826 1244 582 9
[root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'
582
[root@linuxprobe ~]# FreeMem=free -m | grep Mem: | awk '{print $4}'
[root@linuxprobe ~]# echo $FreeMem
582
[ free -m | grep Mem: awk '{print $4}'
-lt 1024 ] && echo
"Insufficient Memory"
我們使用整數運算符來判斷內存可用量的值是否小於1024,若小於則會提示“Insufficient Memory”(內存不足)的字樣:
[ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
[ free -m | grep Mem: awk '{print $4}'
-lt 1024 ] && mail -s memory [email protected]
當內存達到某個值的時候,郵件發出。
字符串比較語句用於判斷測試字符串是否爲空值
操作符
作用
比較字符串內容是否相同
!=
比較字符串內容是否不同
-z
判斷字符串內容是否爲空
接下來通過判斷String變量是否爲空值,進而判斷是否定義了這個變量:
[root@linuxprobe ~]# [ -z $String ]
[root@linuxprobe ~]# echo $?
04.3 流程控制語句
4.3.1 if條件測試語句
if 如果
判斷目錄是否存在,存在,向目錄裏寫入。
下面使用單分支的if條件語句來判斷/media/cdrom文件是否存在,若存在就結束條件判斷和整個Shell腳本,反之則去創建這個目錄:
[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
if條件語句的雙分支結構由if、then、else、fi關鍵詞組成,它進行一次條件匹配判斷,如果與條件匹配,則去執行相應的預設命令;反之則去執行不匹配時的預設命令,相當於口語的“如果……那麼……或者……那麼……”。if條件語句的雙分支結構也是一種很簡單的判斷結構。
使用雙分支的if條件語句來驗證某臺主機是否在線,然後根據返回值的結果,要麼顯示主機在線信息,要麼顯示主機不在線信息。
$?變量,作用是顯示上一次命令的執行返回值
[root@localhost ~]# vim chkhost.sh
#!/bin/bash
ping#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi
-c 3 ping 3次
-i 0.2 ping 間隔時間
-w 3 ping 最長超時時間
&>/dev/null 將所有信息輸出到黑洞文件
/dev/null 相當於中沒有回收功能的Windows回收站,任何信息或者文件進入後就會消失掉
[root@localhost ~]# bash chkhost.sh 192.168.1.110
Host 192.168.1.110 is Off-line.
[root@localhost ~]# bash chkhost.sh 192.168.1.120
Host 192.168.1.120 is On-line.
[root@localhost ~]# bash chkhost.sh 192.168.1.130
Host 192.168.1.130 is Off-line.
[root@localhost ~]# bash chkhost.sh 127.0.0.0
Host 127.0.0.0 is Off-line.
[root@localhost ~]# bash chkhost.sh 127.0.0.1
Host 127.0.0.1 is On-line.
使用多分支的if條件語句來判斷用戶輸入的分數在哪個成績區間內,然後輸出如Excellent、Pass、Fail等提示信息。
read是用來讀取用戶輸入信息的命令,能夠把接收到的用戶輸入信息賦值給後面的指定變量,-p參數用於向用戶顯示一定的提示信息。
[root@localhost ~]# vim chkscore.sh
[root@localhost ~]# cat chkscore.sh
#!/bin/bash
duofenzhi if tiaojian yuju panduan fenshu zai nage chengji qujian.
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
[root@localhost ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@localhost ~]# bash chkscore.sh
Enter your score(0-100):77
77 is Pass
輸入1000分 結果是如何?
[root@localhost ~]# bash chkscore.sh
Enter your score(0-100):1000
1000 is Fail
批量檢測主機是否在的腳本
4.3.2 for 條件循環語句
使用for循環語句從列表文件中讀取多個用戶名,然後爲其逐一創建用戶賬戶並設置密碼。首先創建用戶名稱的列表文件users.txt,每個用戶名稱單獨一行。
首先創建一個主機列表文件ipadds.txt:
[root@linuxprobe ~]# vim ip.txt
192.168.1.110
192.168.1.120
192.168.1.130
然後前面的雙分支if條件語句與for循環語句相結合,讓腳本從主機列表文件ipadds.txt中自動讀取IP地址(用來表示主機)並將其賦值給IP變量,從而通過判斷ping命令執行後的返回值來逐個測試主機是否在線。腳本中出現的$(命令)是一種完全類似於第3章的轉義字符中反引號命令
的Shell操作符,效果同樣是執行括號或雙引號括起來的字符串中的命令。
使用雙分支if條件語句與for循環語句相結合,讓腳本從主機列表文件ipadds.txt中自動讀取IP地址,並將其賦值給IP變量,從而通過判斷ping命令執行後的返回值來逐個測試主機是否在線。
[root@linuxprobe ~]# vim checkHosts.sh
#!/bin/bash
for IP in cat ip.txt
do
ping -c 3 -i 0.2 -w 3 $IP &> /dev/null
if [ $? -eq 0 ] ;then
echo "Host $IP is On-line ."
else
echo "Host $IP is Off-line ."
fi
done
[root@linuxprobe ~]# bash checkHosts.sh
Host 192.168.1.110 is Off-line .
Host 192.168.1.120 is On-line .
Host 192.168.1.130 is Off-line .
for循環語句,批量創建用戶。讀取用戶名稱,使用腳本命令read讀取用戶輸入的密碼,賦值給PASSWD變量,使用“id 用戶名”查看用戶信息,使用$?判斷用戶是否存在。
[root@localhost ~]# vim users.txt
[root@localhost ~]# cat users.txt
andy
barry
xiaolu
xiaoli
xiaozhang
xiaohuang
xiaomei
xiaoyan
[root@localhost ~]# vim jianyonghu.sh
[root@localhost ~]# cat jianyonghu.sh
#!/bin/bash
#for循環語句,批量創建用戶。讀取用戶名稱,使用腳本命令read讀取用戶輸入的密碼,賦值給PASSWD變量,使用“id 用戶名”查看用戶信息,使用$?判斷用戶是否存在。
read -p "Enter":PASSWD
for UNAME in cat users.txt
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Alread exists"
else
useradd $UNAME &> /dev/null
echo "PASSWD" |passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , creat success"
else
echo "$UNAME , creat failure"
fi
fi
done
[root@localhost ~]# bash jianyonghu.sh
Enter:PASSWDredhat11
andy , creat success
barry , creat success
xiaolu , creat success
xiaoli , creat success
xiaozhang , creat success
xiaohuang , creat success
xiaomei , creat success
xiaoyan , creat success
[root@localhost ~]# tail -6 /etc/passwd
xiaolu:x:1005:1005::/home/xiaolu:/bin/bash
xiaoli:x:1006:1006::/home/xiaoli:/bin/bash
xiaozhang:x:1007:1007::/home/xiaozhang:/bin/bash
xiaohuang:x:1008:1008::/home/xiaohuang:/bin/bash
xiaomei:x:1009:1009::/home/xiaomei:/bin/bash
xiaoyan:x:1010:1010::/home/xiaoyan:/bin/bash
[root@localhost ~]# bash jianyonghu.sh
Enter:PASSWDredhat11
Alread exists
Alread exists
Alread exists
Alread exists
Alread exists
Alread exists
Alread exists
Alread exists
使用反引號``,執行一個命令。
使用$(命令),執行一個命令。
for 循環 範圍
for 循環 條件
4.3.3 while條件循環語句
猜測數值大小的腳本Guess.sh。 該腳本使用$RANDOM變量來調取出一個隨機的數值(範圍爲0~32767),將這個隨機數對1000進行取餘操作,並使用expr命令取得其結果,再用這個數值與用戶通過read命令輸入的數值進行比較判斷。這個判斷語句分爲三種情況,分別是判斷用戶輸入的數值是等於、大於還是小於使用expr命令取得的數值。當前,現在這些內容不是重點,我們當前要關注的是while條件循環語句中的條件測試始終爲true,因此判斷語句會無限執行下去,直到用戶輸入的數值等於expr命令取得的數值後,這兩者相等之後才運行exit 0命令,終止腳本的執行。
[root@localhost 桌面]# vim guess.sh
[root@localhost 桌面]# cat guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
while true
do
read -p "Enter:" INT
let TIMES++
if [ $INT -eq $PRICE ] ;then
echo "OK,$INT"
echo "Times is $TIMES ci"
exit 0
elif [ $INT -gt $PRICE ] ;then
echo "high"
else
echo "low"
fi
done
[root@localhost 桌面]# bash guess.sh
Enter:520
high
Enter:260
low
Enter:391
high
Enter:329
low
Enter:356
high
Enter:343
low
Enter:352
high
Enter:348
low
Enter:350
high
Enter:349
OK,349
Times is 10 ci
4.3.4 case 條件測試語句
在前文介紹的Guess.sh腳本中有一個致命的弱點—只能接受數字!您可以嘗試輸入一個字母,會發現腳本立即就崩潰了。原因是字母無法與數字進行大小比較,例如,“a是否大於等於3”這樣的命題是完全錯誤的。我們必須有一定的措施來判斷用戶的輸入內容,當用戶輸入的內容不是數字時,腳本能予以提示,從而免於崩潰。
通過在腳本中組合使用case條件測試語句和通配符(詳見第3章),完全可以滿足這裏的需求。接下來我們編寫腳本Checkkeys.sh,提示用戶輸入一個字符並將其賦值給變量KEY,然後根據變量KEY的值向用戶顯示其值是字母、數字還是其他字符。
[root@linuxprobe ~]# vim checkkeys.sh
#!/bin/bash
read -p "Enter:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "zimu"
;;
[0-9])
echo "shuzi"
;;
*)
echo "Luanma"
esac
[root@linuxprobe ~]# bash checkkeys.sh
Enter:a
zimu
[root@linuxprobe ~]# bash checkkeys.sh
Enter:8
shuzi
[root@linuxprobe ~]# bash checkkeys.sh
Enter:
Luanma
[root@localhost 桌面]# bash checkkeys.sh
Enter:34
[root@localhost 桌面]# bash checkkeys.sh
Enter:23sd
Luanma
[root@localhost 桌面]# bash checkkeys.sh
Enter:479$09xc
Luanma
輸入兩位數34,57,輸入 數字加字母, 則是輸出" luanma " 。
打包網站數據做備份:
if 單 雙 多分支
for 範圍
while 條件
case 判斷
4.4 計劃任務服務程序
at 一次性的計劃任務
crond 週期性的計劃任務
at 一次性的計劃任務
[root@linuxprobe ~]# at 22:10
at> reboot
at> <EOT> #ctrl d 保存
job 2 at Wed May 1 22:10:00 2019
[root@linuxprobe ~]# at -l #查看 at 任務名稱
2 Wed May 1 22:10:00 2019 a root
在使用at命令來設置一次性計劃任務時,默認採用的是交互式方法。例如,使用下述命令將系統設置爲在今晚23:30分自動重啓網站服務。
[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd
at > 此處請同時按下Ctrl+d來結束編寫計劃任務
job 3 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root
[root@linuxprobe ~]# atrm 2
果讀者想挑戰一下難度更大但簡捷性更高的方式,可以把前面學習的管道符(任意門)放到兩條命令之間,讓at命令接收前面echo命令的輸出信息,以達到通過非交互式的方式創建計劃一次性任務的目的。
[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root
4 Mon Apr 27 23:30:00 2016 a root
at 時間 創建計劃任務
at -l 查看計劃任務
atrm 編碼 刪除計劃任務
at -c 編碼 查看計劃任務的詳細情況
crond 是一個服務
crondtab 配置工具 默認調用vim 編輯器
crontab -e 創建、編輯計劃任務
crontab -l 查看當前計劃任務
crontab -r 刪除某條計劃任務
需要注意的是,如果有些字段沒有設置,則需要使用星號(*)佔位,如圖4-23所示。
分 時 日 月 星期 命令
分 0~59 整數
時 0~23 整數
日 0~31 整數
月 0~12 整數
星期 0~7 整數 0和7 都是星期日
命令 要執行的命令或程序腳本
假設在每週一、三、五的凌晨3點25分,都需要使用tar命令把某個網站的數據目錄進行打包處理,使其作爲一個備份文件。我們可以使用crontab -e命令來創建計劃任務。爲自己創建計劃任務無需使用-u參數,具體的實現效果的參數如crontab -l命令結果所示:
[root@linuxprobe ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
[root@localhost 桌面]# crontab -e
crontab: installing new crontab
[root@localhost 桌面]# crontab -l
0 1 1 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 1-5 /usr/bin/rm-rf /tmp/*
分 時 日 月 星期 命令
0 1 1-5 每週一到五 的凌晨一點
0 /4 1-5 每週一到五 的每隔4小時
0 1 1,3,5 每週的1,3,5日 的凌晨一點
0 1 1-5 * 每月的1-5日 的凌晨一點