最近看到群裡有人聊到他們的伺服器最近被掛馬,然後想利用乙個指令碼能夠實時監控web目錄下檔案的變化,也就是對該目錄的增刪改操作都會記錄到相應日誌下。
當時感覺這個功能的確實有點意思,所以網上查閱了些資料,自己研究了下,這會兒有空寫了個指令碼,分享給大家,如有問題,還請大家指出。
以下我寫了兩個指令碼:
指令碼1:將需要監控的目錄的原始狀態儲存到log日誌
指令碼2:將指令碼1的原始狀態與本指令碼比對,如果目錄檔案發生變化,則將變化的內容儲存到日誌。
注:原理實際上利用的是du -sb輸出值來判斷檔案的變化,再利用diff進行比對。
1.在執行指令碼前要儲存原始的狀態:
# vi initial.sh
-------------------
#!/bin/bash
path=/bin:/sbin:/usr/bin:/usr/sbin/:/usr/local/bin:/usr/local/sbin:~/bin
export path
# 監控的目錄
dir=/root
# 臨時檔案
tmp_a=/tmp/a.txt
# 遍歷指定目錄下的檔案大小及路徑並重定向到日誌檔案
find $dir -print0 | xargs -0 du -sb > $tmp_a
-------------------
2.執行監控指令碼
# vi monitor.sh
-------------------
#!/bin/bash
path=/bin:/sbin:/usr/bin:/usr/sbin/:/usr/local/bin:/usr/local/sbin:~/bin
export path
# 監控的目錄
dir=/root
# 日期變數
date=`date +%f_%h:%m`
# 臨時檔案
tmp_a=/tmp/a.txt
tmp_b=/tmp/b.txt
tmp_c=/tmp/c.txt
# 日誌檔案
log=/var/log/filemodify.log
# 遍歷指定目錄下的檔案大小及路徑並重定向到日誌檔案
find $dir -print0 | xargs -0 du -sb > $tmp_b
# 比較目錄變化,並將變化的檔案寫入日誌
diff=$(diff $tmp_a $tmp_b)
if [[ -z $diff ]];
then
echo "nothing change" >> $log
else
echo "here is the change" >> $log
echo "" >> $log
echo "$diff" |awk ''|sort -k2n |uniq |sed '/^$/d' |tee $tmp_c >> $log
if [ -s $tmp_c ];
then
echo "" >> $log
echo "it modified at $date" >> $log
# 將當前監控的目錄結構覆蓋為初始狀態
find $dir -print0 | xargs -0 du -sb > $tmp_a
fifi
echo "***********************************=" >> $log
#清理臨時檔案
rm -rf $tmp_b $tmp_c
--------------------
SHELL 監控LINUX目錄檔案變化
最近看到群裡有人聊到他們的伺服器最近被掛馬,然後想利用乙個指令碼能夠實時監控web目錄下檔案的變化,也就是對該目錄的增刪改操作都會記錄到相應日誌下。當時感覺這個功能的確實有點意思,所以網上查閱了些資料,自己研究了下,這會兒有空寫了個指令碼,分享給大家,如有問題,還請大家指出。以下我寫了兩個指令碼 指...
如何用shell獲取linux目錄下的檔名呢?
遇到乙個很繁瑣的事情,有兩個目錄a b,兩個資料夾目錄裡有一些檔案的檔名是一樣,不過字尾名不同,我想把a資料夾下跟b資料夾裡相同檔名的檔案覆蓋到b去,並刪除b裡同名而不同字尾的檔案,檔案很多,我想用shell來試寫這樣乙個功能,不過本人剛接觸shell,還不清除怎麼用shell來獲取目錄下的檔名來進...
Shell指令碼監控目錄內檔案改動
bin bash webroot home www cp dev null rsync file if f file.md5 then find webroot type f e程式設計客棧xec md5sum file.md5 else for file in md5sum c file.md5g...