實驗2實驗3
兩類機器一共300多台,寫個指令碼自動清理這兩類機器裡面的日誌檔案,
在堡壘機上發布,也要批量發布到crontab裡面,
a類機器日誌存放路徑很同一,b類機器日誌檔案存放路徑需要用*匹配(因為這個目錄除了日誌外,還有其他檔案,不能刪除,匹配的時候看用*.log)
a類:/opt/cloud/log/ 刪除7天前日誌
b類:/opt/cloud/instances/ 刪除15天前日誌
不用考慮堡壘機上的操作,只要寫shell指令碼就可以。
1、需要寫出乙個通用指令碼,也就是說該指令碼無論是放到a類機器還是b類機器都可以執行
2、所以需要判斷是a類還是b類機器,可以用過判斷目錄/opt/cloud/log或者/opt/cloud/instances目錄的存在與否來確定是哪類機器。
3、對於a類機器直接find即可,而b類機器需要find -name "*.log"稍微繁瑣
4、找find哪天之前的引數,
5、日誌檔案找好後,傳遞給rm刪除,用到乙個命令?
#!/bin/bash
a=/opt/cloud/log/
b=/opt/cloud/instances/
if[ -d $a
]then
for l in
`find $a -mtime +7`
//find 結合-mtime選項可以查詢出幾天前改動的檔案
dorm -rf $l
done
elif
[ -d $b
]then
for i in
`find $b -mtime +15 -name "*.log"`do
rm -rf $i
done
fi
find選項補充:每隔5分鐘檢查指定的使用者是否登入系統,使用者名稱從命令列中輸入-mtime -n +n 按照檔案的更改時間來查詢檔案, -n表示檔案更改時間距現在n天以內,+n表示檔案更改時間距現在n天以前。find命令還有-atime和-ctime選項,但它們都和-mtime選項
相似,所以我們在這裡只介紹-mtime選項。
如果指定的使用者已登入,則顯示相關的資訊。
1、每隔5分鐘,可用計畫任務,也可以做死迴圈
2、根據題目要求,使用者名稱要求輸入,那就意味著和使用者互動,如果每5分鐘都去互動一次,太麻煩了,所以死迴圈比較合適,只需要互動一次
3、who和users命令可以檢視當前登入系統的使用者名稱列表用grep -w保證匹配的使用者更加精確
4、在while死迴圈之前,先讓使用者輸入使用者名稱,如果在迴圈裡面,那每隔5分鐘,都要輸入一次使用者名稱,這樣不合理
#!/bin/bash
read -p "監測使用者:" user
while
: //「:」為空命令,返回值為0,作用於true相似
doif
users
|grep -w $user
then
echo
else
echo
fisleep 300 //休眠時間,暫停時間,預設單位秒
done
#!/bin/bash
for((i=
1; i<=
4; i++
))do
ip="20.0.0.$i"
ping -c 2 -i 0.2 -w 2 $ip
&>/dev/null if[
$? -eq 0 ]
then
echo
"$ip不可以用"
>>/var/log/ipup.txt
else
echo
"$ip可用"
>>/var/log/ipdown.txt
fidone
#################過濾掉檔案中重複的部分############################
cat /var/log/ipup.txt |
sort
|uniq
>/var/log/ipupbak.txt
rm -rf /var/log/ipup.txt
mv /var/log/ipupbak.txt /var/log/ipup.txt
ping命令補充:-c :count 在傳送(和接收)了正好數量為 count 的回顯應答分組後停止操作。在傳送了 count 個分組後沒有收到任何分組的特別情況是傳送導致了終止(選程主機或閘道器不可達)。即發出的測試包數目
-i : wait 在傳送每個分組時等待 wait 個秒數。預設值為每個分組等待一秒。此選項與-f選項不能同時使用。每次發出測試包的間隔時間
-n :只以數字形式輸出資訊。這樣就不嘗試去查詢主機名了。
-t :設定存活數值ttl的大小-v
-w :waitsecs 在 waitsecs 秒後停止 ping 程式的執行。當試圖檢測不可達主機時此選項很有用。
運維實用小指令碼
bin bash ping w 1 1 dev null if eq 0 then echo 1 ok else echo 1 no fi bin bash id 1 dev null if eq 0 then echo 1 存在 else echo 1 不存在 fi bin bash a1 una...
運維常用shell指令碼
開頭加直譯器 bin bash 語法縮排,開頭用四個空格 多加注釋說明。命名規則 變數名大寫 區域性變數小寫 函式名小寫 名字能夠體現實際作用。預設變數是全域性的,在函式中變數local指定為區域性變數,避免汙染其他作用域。指令碼寫完後一定要先除錯再線上使用。echo random md5sum c...
使用shell指令碼輔助運維工作
儲存到 etc ethers檔案中,若此檔案已存在,則先轉移進行備份。每行一條記錄,第1列為ip位址,第2列為對應的mac位址。2 編寫乙個scanhost.sh的掃瞄指令碼,檢查有哪些主機開啟了ftp服務,掃瞄物件是 etc ethers中所有的ip位址。指令碼如下 root localhost ...