? ? ?當(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


--------------------