CentOS 6
Sponsored Link

inotifyでファイルの追加・変更・削除を監視する
2011/07/11
 
inotifyでファイルの追加・変更・削除を監視するようにします。
[1] inotify インストール
[root@dlp ~]#
yum --enablerepo=epel -y install inotify-tools
 
# EPELからインストール
[2] inotifyを使ってみます。以下では /etc ディレクトリ配下のファイルの追加・変更・削除・移動 を監視するよう inotify を立ち上げています。その他にもいろいろなオプションがありますので 詳細は「man inotify」を参照ください。
[root@dlp ~]#
inotifywait -e create,delete,modify,move -mrq /etc &

[1] 3817
# 試しに /etc 配下にファイルを作成してみる

[root@dlp ~]#
touch /etc/test.txt

/etc/ CREATE test.txt    
# 検知された
# 試しに作成したファイルをリネームしてみる。

[root@dlp ~]#
mv /etc/test.txt /etc/test.conf

/etc/ MOVED_FROM test.txt
/etc/ MOVED_TO test.conf    
# 検知された
# 試しに作成したファイルを削除してみる

[root@dlp ~]#
rm -f /etc/test.conf

/etc/ DELETE test.conf    
# 検知された
[3] 起動スクリプトを作成して対象ディレクトリ配下の変更をログに記録していくようにします。 これにより、重要なファイルがいつ変更されたかが分かるので、トラブル時には役にたつかもしれません。 ただし、誰がやったかまでは分からないので、sudo のログや accton のログ等と組み合わせて見る必要があります。
[root@dlp ~]#
vi /etc/inotifywait.conf
   
# 設定ファイル作成
# ログファイル指定

LOGFILE=/var/log/inotify.log
# 監視対象ディレクトリ指定

MONITOR=/etc
# 監視対象イベント指定 (カンマ区切りで指定)

# イベントの種類は「man inotifywait」参照

EVENT=create,delete,modify,move
[root@dlp ~]#
vi /etc/rc.d/init.d/inotifywait
   
# 起動スクリプト作成
#!/bin/bash

# inotifywait: Start/Stop inotifywait
#
# chkconfig: - 80 20
# description: inotifywait waits for changes to files using inotify.
#
# processname: inotifywait

. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
. /etc/inotifywait.conf

LOCK=/var/lock/subsys/inotifywait

RETVAL=0
start() {
   echo -n $"Starting inotifywait: "
   /usr/bin/inotifywait \
   --format '%w%f %e %T' \
   --timefmt '%Y/%m/%d-%H:%M:%S' \
   --exclude '.*\.sw[pox].*' \
   -e $EVENT \
   -o $LOGFILE \
   -dmrq $MONITOR

   RETVAL=$?
   echo
   [ $RETVAL -eq 0 ] && touch $LOCK
   return $RETVAL
}
stop() {
   echo -n $"Stopping inotifywait: "
   killproc inotifywait
   RETVAL=$?
   echo
   [ $RETVAL -eq 0 ] && rm -f $LOCK
   return $RETVAL
}
case "$1" in
   start)
      start
      ;;
   stop)
      stop
      ;;
   status)
      status inotifywait
      ;;
   restart)
      stop
      start
      ;;
   *)
      echo $"Usage: $0 {start|stop|status|restart}"
      exit 1
esac
exit $?

[root@dlp ~]#
chmod 755 /etc/rc.d/init.d/inotifywait

[root@dlp ~]#
/etc/rc.d/init.d/inotifywait start

Starting inotifywait:
[root@dlp ~]#
chkconfig --add inotifywait

[root@dlp ~]#
chkconfig inotifywait on
# 試しに適当にアクションを起こしてみる

[root@dlp ~]#
touch /etc/test.txt

[root@dlp ~]#
mv /etc/test.txt /etc/test.conf

[root@dlp ~]#
vi /etc/test.conf
   
# 適当に編集

[root@dlp ~]#
rm -f /etc/test.conf
# ログをみると以上の4操作で以下のログが記録されていることが分かります

[root@dlp ~]#
cat /var/log/inotify.log

/etc/test.txt MOVED_FROM 2011/07/11-19:13:06
/etc/test.conf MOVED_TO 2011/07/11-19:13:06
/etc/4913 CREATE 2011/07/11-19:13:25
/etc/4913 DELETE 2011/07/11-19:13:25
/etc/test.conf MOVED_FROM 2011/07/11-19:13:25
/etc/test.conf~ MOVED_TO 2011/07/11-19:13:25
/etc/test.conf CREATE 2011/07/11-19:13:25
/etc/test.conf MODIFY 2011/07/11-19:13:25
/etc/test.conf~ DELETE 2011/07/11-19:13:25
/etc/test.conf DELETE 2011/07/11-19:13:31
 
Tweet