寫一個shell腳本,檢測全部磁盤分區使用率和inode使用率並記錄到以當天日期爲命名的日誌文件裏,當發現某個分區容量或者inode使用量大於85%時,發郵件通知你本身。node
思路:一、就是先df -h 而後過濾出已使用的那一列,而後再想辦法過濾出百分比的整數部分,而後和85去比較,同理,inode也是同樣的思路。python
二、df -h、df -i 記錄磁盤分區使用率和inode使用率,date +%F 日誌名格式
三、取出使用率(第5列)百分比序列,for循環逐一與85比較,大於85則記錄到新文件裏,當for循環結束後,彙總超過85的一併發送郵件
shell
#!/bin/bash [ ! -d /var/log/disk/ ] && mkdir -p /var/log/disk/ log=/var/log/disk/`date +%F`.log date +'%F %T' > $log df -h >> $log echo >> $log df -i >> $log for i in `df -h | grep -v 'Use%'|sed 's/%//'|awk '{print $5}'|sort -u` do if [ $i -lt 85 ] then use=`df -h|grep -v 'Use%'|sed 's/%//'|awk '$5=='$i' {print $1,$5}'` echo "$use" >> use fi done if [ -e use ] then ca=`cat use` ##這裏能夠使用以前介紹的mail.py python mail.py 360347364@qq.com "Filesystem Use% check" "$ca" rm -rf use fi for j in `df -i|grep -v 'IUse%'|sed 's/%//'|awk '{print $5}'|sort -u` do if [ $j -lt 85 ] then iuse=`df -i|grep -v 'IUsed%' |sed 's/%//'|awk '$5=='$j' {print $1,$5}'` echo "$iuse" >> iuse fi done if [ -e iuse ] then ct=`cat iuse` python mail.py 360347364@qq.com "Filesystem iUse% check" "$ct" rm -rf iuse fi
解析:bash
[ ! -d /var/log/disk ] && mkdir -p /var/log/disk/ 判斷若是/var/log/disk/不是目錄則建立/var/log/disk/目錄,[ -d filename ]爲文件比較運算符號,解釋爲,若是filename爲目錄則爲真,加!爲非。併發
date+ '%F %T' 爲打印日期和時間。ide
df -h查看磁盤使用狀況日誌
df -h >> $log 將標準輸出追加到$log中。博客
df -i 查看inode使用狀況it
grep -v將不符合的行打印for循環
sed 's/%//'將%替換爲空
awk '{print $5}'打印第五列
sort -u去重複
for循環這一段表達的含義是:
使用grep sed awk等過濾出df -h輸出結果的整數部分,再使用if判斷將這些數與85比較,大於等於85的,將df -h的第一列和第五列追加到use文件中
使用if判斷,use文件是否存在,([ -e filename ]filename是否存在,若是存在則爲真)。若是use文件存在,則發一封郵件,郵件內容爲使用量超過85%的磁盤名和數值(即use文件的內容,這裏將use文件的內容賦值給變量$ca),郵件腳本爲mail.py,能夠參考本人郵件博客的內容
rm 刪除use文件,fi判斷結束。
第二個for同上含義
此腳本正確運行前提:該系統沒有邏輯卷的狀況下使用,由於邏輯卷df -h、df -i 時,使用率百分比是在第4列,而不是第5列。若有邏輯卷,則會漏統計邏輯卷使用狀況。