这里呢,我准备了一些范例来帮助大家理解 inotifywait 命令的使用。
1、实时监控/etc目录的所有事件(包括文件的访问,写入,修改,删除等)
[root@rsync-client ~]# inotifywait -rm /etc
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
/etc/ OPEN ld.so.cache
/etc/ CLOSE_NOWRITE,CLOSE ld.so.cache
/etc/ CREATE test
/etc/ OPEN test
/etc/ ATTRIB test
/etc/ CLOSE_WRITE,CLOSE test
此时,我在另外一个新打开的终端,touch /etc/test,这边就会产生相应的事件信息了。
2、实时监控/home目录的文件或目录创建,修改和删除相关事件
[root@rsync-client ~]# inotifywait -mrq -e create,modify,delete /home
/home/ CREATE,ISDIR test2
/home/test2/ CREATE .bash_profile
/home/test2/ MODIFY .bash_profile
/home/test2/ CREATE .bash_logout
/home/test2/ MODIFY .bash_logout
/home/test2/ CREATE .bashrc
/home/test2/ MODIFY .bashrc
此时,我在新打开的终端上,使用useradd创建一个用户,这边就会产生相应的事件信息了!
3、实时监控/etc/passwd的文件修改,删除和权限相关事件,并且要求指定输出格式为27/06/14 16:12 /etc/passwd ATTRIB。
[root@rsync-client ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' --event modify,delete,attrib /etc/passwd
27/06/14 16:39 /etc/passwd ATTRIB
27/06/14 16:39 /etc/passwd IGNORED
此时,我在新打开的终端上,使用 useradd 创建一个新用户,这边就会产生相应的事件信息了!
4、写一个脚本实现对 /data/web 目录进行监控,监控文件删除,修改,创建和权限相关事件,并且要求将监控信息写入/var/log/web_watch.log。要求日志条目要清晰明了,能突显文件路径、事件名和时间。
[root@rsync-client ~]# cat web_watch.sh
#!/bin/bash
inotifywait -mrq --timefmt '%y/%m/%d %H:%M' --format '%T %w%f %e' --event delete,modify,create,attrib /data/web | while read date time file event
do
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
echo $event'-'$file'-'$date'-'$time >> /var/log/web_watch.log
;;
MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)
echo $event'-'$file'-'$date'-'$time /var/log/web_watch.log
;;
esac
done
[root@rsync-client ~]# cat /var/log/web_watch.log
CREATE-/data/web/a-14/06/27-16:21
CREATE-/data/web/aa-14/06/27-16:21
CREATE-/data/web/aaaa-14/06/27-16:24
CREATE-/data/web/aaaaa-14/06/27-16:24
此时,我在新打开的终端上,使用 touch 在/data/web目录下创建a,aa,aaa,aaaa这四个文件。然后查看/var/log/web_watch.log 文件,即可发现已经产生相应的事件信息,并且按照指定格式进行存放!
inotifywatch
语法:
inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]
参数
-h,–help # 输出帮助信息
-v,–verbose # 输出详细信息
@ # 排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile # 从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z,–zero # 输出表格的行和列,即使元素为空
–exclude # 正则匹配需要排除的文件,大小写敏感。
–excludei # 正则匹配需要排除的文件,忽略大小写。
-r,–recursive # 监视一个目录下的所有子目录。
-t,–timeout # 设置超时时间
-e,–event # 只监听指定的事件。
-a,–ascending # 以指定事件升序排列。
-d,–descending # 以指定事件降序排列
OK,继续拿一个范例来帮助大家理解!
1、统计/home目录所在文件系统发生的事件次数
[root@rsync-client ~]# inotifywatch -v -e create -e modify -e delete -t 30 -r /home
Establishing watches...
Setting up watch(es) on /home
OK, /home is now being watched.
Total of 3 watches.
Finished establishing watches, now collecting statistics.
Will listen for events for 60 seconds.
total modify create delete filename
8 3 4 1 /home/
监控的时候,我在新打开的终端上,创建了4个文件,修改了3个文件内容,删除了一个文件。等监控的30秒时间到了之后,他就会显示出上面的事件次数报告!