shell!!運維崗實用指令碼示例

2021-10-23 19:30:05 字數 2546 閱讀 1649

實驗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選項補充:

-mtime -n +n 按照檔案的更改時間來查詢檔案, -n表示檔案更改時間距現在n天以內,+n表示檔案更改時間距現在n天以前。find命令還有-atime和-ctime選項,但它們都和-mtime選項

相似,所以我們在這裡只介紹-mtime選項。

每隔5分鐘檢查指定的使用者是否登入系統,使用者名稱從命令列中輸入

如果指定的使用者已登入,則顯示相關的資訊。

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 ...