inotifywait实时监控文件目录
一、inotify简介
inotify 是一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、创建删除、移动等操作,也可以监控文件发生的一切变化。
inotify-tools 是一个C库和一组命令行的工作提供Linux下inotify的简单接口。
inotify-tools中包含inotifywait和inotifywatch两个命令
inotifywait 命令可以用来收集有关文件访问信息,Linux发行版一般没有包含这个命令。需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux都在内核中启用inotify。
inotifywatch命令用于收集关于被监控的文件系统的统计数据,包括每个inotify事件发生多少次。
二、inotifywait 使用
-m #持续监听
-r #使用递归形式监控目录
-q #减少冗余信息,只打印出需要的信息
-e #指定要监控的事件,多个事件使用逗号隔开
access #访问,读取文件
modify #修改,文件内容被修改
attrib #属性,文件元数据被修改
move #移动,对文件进行移动操作 move_to move_from
create #创建,生成新文件
open #打开,对文件进行打开操作
close #关闭,对文件进行关闭操作 close_write close_nowrite
delete #删除,文件被删除 delete_self
unmount #卸载文件或目录的文件系统
--timefmt #时间格式 y 年 m月 d日 H小时 M分钟
--format #监控事件发生后的信息输出格式
%w #表示发生事件的目录
%f #表示发生事件的文件
%e #表示发生的事件
%Xe #事件以“X”分隔
%T #使用由 --timefmt定义的时间格式
--exclude #排除文件或目录时,大小写敏感
# --exclude="(.*.swp)|(.*~$)|(.*.swx)"使用正则匹配排除文件
--excludei #同 --exclude 但是不区分大小写
问题:
/usr/local/bin/inotifywait: error while loading shared libraries:libinotifytools.so.0: cannot open shared object file: No such file or directory
解决方法:ln -s /usr/local/lib/libinotifytools.so.0/usr/lib64/libinotifytools.so.0
三、inotifywatch 使用
--fromfile #从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z, --zero #输出表格的行和列,即使元素为空
--exclude #正则匹配需要排除的文件,大小写敏感。
--excludei #正则匹配需要排除的文件,忽略大小写。
-r, --recursive #监视一个目录下的所有子目录。
-t , --timeout #设置超时时间
-e , --event #只监听指定的事件。与inotifywait事件一致
-a , --ascending #以指定事件升序排列。
-d , --descending #以指定事件降序排列。
#!/bin/bash
file=/documents/Others/qq_voice/tweet.wav
inotifywait -mq -e access $file | while read event
do
notify-send -i /documents/Others/pic/mm.jpg ‘主银’ ‘你有QQ消息哦~~’
done