如何使用dnotify / inotify命令连续监视目录

我是dnotify / inotify命令的新手。 任何人都可以帮助我如何编写脚本,使其持续监视目录,并指出它有一些变化或修改。

Solutions Collecting From Web of "如何使用dnotify / inotify命令连续监视目录"

Inotify本身就是一个内核模块,可以通过来自C程序的调用访问。 http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/

有一个名为inotify-tools的应用程序套件,其中包含:

inotifywait – 等待使用inotify更改文件

http://linux.die.net/man/1/inotifywait

inotifywatch – 使用inotify收集文件系统访问统计信息

http://linux.die.net/man/1/inotifywatch

您可以直接从命令行使用inotify,例如像这样可以持续监视主目录下的所有更改(可能会生成大量的输出):

inotifywait -r -m $HOME 

这里是一个连续监视和反应Apache日志活动的脚本,从inotifywait的man文件复制:

 #!/bin/sh while inotifywait -e modify /var/log/messages; do if tail -n1 /var/log/messages | grep httpd; then kdialog --msgbox "Apache needs love!" fi done 

以下是我用来查看单个文件的操作。 “-m”在一次事件之后导致监视与退出。 要获得时间戳,至少需要inotify-tools的3.13版本,但如果这不重要(或者在操作系统上不可用或难以更新),则可以跳过timefmt和format选项。 在另一个shell中的“cat /etc/resolv.conf”导致下面的结果:

 $ inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' /etc/resolv.conf Setting up watches. Watches established. 12:49 /etc/resolv.conf OPEN 12:49 /etc/resolv.conf ACCESS 12:49 /etc/resolv.conf CLOSE_NOWRITE,CLOSE 

inotifywait也有用于监视目录的选项,因此请检查联机帮助页。 添加-r递归来监视目录的子项。

下面是我在不同的窗口中用“ – >”前缀显示的命令的例子:

 $ inotifywait -mr --timefmt '%H:%M' --format '%T %w %e %f' /home/acarwile/tmpdir Setting up watches. Beware: since -r was given, this may take a while! Watches established. -> cd into directory, no info -> ls in directory 13:15 /home/acarwile/tmpdir/ OPEN,ISDIR 13:15 /home/acarwile/tmpdir/ CLOSE_NOWRITE,CLOSE,ISDIR -> touch newfile 13:16 /home/acarwile/tmpdir/ CREATE newfile 13:16 /home/acarwile/tmpdir/ OPEN newfile 13:16 /home/acarwile/tmpdir/ ATTRIB newfile 13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE newfile -> mv newfile renamedfile 13:16 /home/acarwile/tmpdir/ MOVED_FROM newfile 13:16 /home/acarwile/tmpdir/ MOVED_TO renamedfile -> echo hello >renamedfile 13:16 /home/acarwile/tmpdir/ MODIFY renamedfile 13:16 /home/acarwile/tmpdir/ OPEN renamedfile 13:16 /home/acarwile/tmpdir/ MODIFY renamedfile 13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile -> touch renamedfile 13:17 /home/acarwile/tmpdir/ OPEN renamedfile 13:17 /home/acarwile/tmpdir/ ATTRIB renamedfile 13:17 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile -> rm renamedfile 13:17 /home/acarwile/tmpdir/ DELETE renamedfile -> cd ..; rmdir tmpdir 13:17 /home/acarwile/tmpdir/ DELETE_SELF 

之后,我试图重拍tmpdir(“mkdir tmpdir”),但没有得到任何输出。 新的tmpdir与旧的tmpdir不在同一个目录。 时间只是^ C和停止itnotifywait。

正如我在https://superuser.com/a/747574/28782上所说,我做了一个帮助脚本,它使用inotifywait没有一些直接限制: inotifyexec

用法示例(假设您已将其作为可执行文件添加到系统路径中):

 inotifyexec "echo test" -r .