inotify系列命令 [1]_ ###################### 高效、实时的 Linux 文件系统事件监控框架,windows用ReadDirectoryChangesW 判断是否支持Inotify 机制:: % grep INOTIFY_USER /boot/config-$(uname -r) CONFIG_INOTIFY_USER=y 实例1:: $> inotifywait -rme modify,attrib,move,close_write,create,delete,delete_self /file/path Setting up watches. Beware: since -r was given, this may take a while! Watches established. $> mkdir /file/path/infoq $> echo TODO > /file/path/infoq/article.txt $> rm /file/path/infoq/article.txt % shell 中将会打印以下信息 /file/path/ CREATE,ISDIR infoq /file/path/infoq/ CREATE article.txt /file/path/infoq/ MODIFY article.txt /file/path/infoq/ CLOSE_WRITE,CLOSE article.txt /file/path/infoq/ DELETE article.txt 实例2:我们要忽略文件夹 /srv/test/large:: $> inotifywait --exclude '^/srv/test/(large|ignore)/' -rme modify,attrib,move,close_write,create,delete,delete_self /srv/test Setting up watches. Beware: since -r was given, this may take a while! Watches established. % echo test > /srv/test/action.txt % echo test > /srv/test/large/no_action.txt % echo test > /srv/test/ignore/no_action.txt % echo test > /srv/test/large-name-but-action.txt % 这里应该只会报告'action.txt'和'large-name-but-action.txt'两个文件的变化 % 而忽略子文件夹'large'和'ignore'下的文件,结果也确实如此 /srv/test/ CREATE action.txt /srv/test/ MODIFY action.txt /srv/test/ CLOSE_WRITE,CLOSE action.txt /srv/test/ CREATE large-name-but-action.txt /srv/test/ MODIFY large-name-but-action.txt /srv/test/ CLOSE_WRITE,CLOSE large-name-but-action.txt Inotifywatch:使用 inotify 来统计文件系统访问信息:: $> inotifywatch -v -e access -e modify -t 120 -r ~/InfoQ Establishing watches... Setting up watch(es) on /home/mika/InfoQ OK, /home/mika/InfoQ is now being watched. Total of 58 watches. Finished establishing watches, now collecting statistics. Will listen for events for 120 seconds. total modify filename 2 2 /home/mika/InfoQ/inotify/ Inotify 的配置选项:: /proc/sys/fs/inotify/max_user_instances: 规定了每个用户所能创建的 Inotify 实例的上限 /proc/sys/fs/inotify/max_user_watches: 规定了每个 Inotify 实例最多能关联几个监控 (watch) 运行过程中达到上限测试: $> inotifywait -r / 使用 Inotify 的一些工具:: incron: http://inotify.aiken.cz/: 似于 cron 的守护进程 使用了 Inotify,可以由事件触发执行 使用方法: 1.在 /etc/incron.allow 中添加使用 incron 的用户 $> echo username > /etc/incron.allow 2.插入我们自己的规则:/src/test 文件夹中的文件被修改,就会发送一封邮件 $> incrontab -e /srv/test/ IN_CLOSE_WRITE mail -s "$@/$#\n" root 注意: 不要让 incron 监控整个子目录树 注意: incron 使用不慎的话,例如形成死循环,则会导致系统宕机 其他工具: inosync(基于消息通知机制的文件夹同步服务) iwatch(基于 Inotify 的程序,对文件系统进行实时监控) lsyncd(一个守护进程 (daemon),使用 rsync 同步本地文件夹) .. [1] https://www.infoq.cn/article/inotify-linux-file-system-event-monitoring