当时感觉这个功能的确实有点意思,所以网上查阅了些资料,自己研究了下,这会儿有空写了个脚本,分享给大家,如有问题,还请大家指出。


以下我写了两个脚本:

注:原理实际上利用的是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 '{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


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