Linux 學習記錄 2019年5月11日 第4章 vim編輯器與shell 命令腳本

第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日 的凌晨一點

Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本
Linux 學習記錄 2019年5月11日   第4章 vim編輯器與shell 命令腳本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章