? ? ?當(dāng)時感覺這個功能的確實有點意思,所以網(wǎng)上查閱了些資料,自己研究了下,這會兒有空寫了個腳本,分享給大家,如有問題,還請大家指出。
以下我寫了兩個腳本:
注:原理實際上利用的是du -sb輸出值來判斷文件的變化,再利用diff進行比對。
1.在執(zhí)行腳本前要保存原始的狀態(tài):
# 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.執(zhí)行監(jiān)控腳本
# 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 '{print $3}'|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
? ?fi
fi
echo "====================================" >> $LOG
#清理臨時文件
rm -rf $TMP_B $TMP_C
--------------------