使用 inotify 监视对文件的访问

使用 inotify 监视对文件的访问

我想要一个触发器,当某个进程访问特定文件时,我希望收到通知(即应该运行脚本)。如果我理解正确的话,这可以通过inotify.

如果我有一个文件,/foo/bar.txt我将如何设置inotify来监视该文件?

我正在使用 Debian Wheezy 和内核 3.12(我的内核有 inotify 支持)

答案1

根据吉尔斯超级用户:

简单,使用inotify等待(安装您的发行版的inotify-tools软件包):

while inotifywait -e close_write myfile.py; do ./myfile.py; done

这有一个很大的限制:如果某个程序替换myfile.py为不同的文件,而不是写入现有的文件myfileinotifywait则会死亡。大多数编辑都是这样工作的。

要克服此限制,请inotifywait在目录上使用:

while true; do
  change=$(inotifywait -e close_write,moved_to,create .)
  change=${change#./ * }
  if [ "$change" = "myfile.py" ]; then ./myfile.py; fi
done

答案2

inotify 的基本 shell 接口是inotifywaitinotify-tools

要监视对文件的所有访问:

inotifywait -mq --format '%e' /path/to/file |
while IFS= read -r events; do
  /path/to/script "$events"
done

每次文件发生某些情况(读、写、关闭……)时,都会使用逗号分隔的同时发生的事件列表来调用您的脚本。

相关内容