如何使用 dnotify /inotify 命令持续监控目录
- 2024-11-01 08:41:00
- admin 原创
- 48
问题描述:
我是 dnotify/inotify 命令的新手。有谁能帮我编写一个脚本,让它持续监视目录并指示其中是否有更改或修改。
解决方案 1:
Inotify 本身是一个内核模块,可以通过 C 程序等调用来访问。
https://linux.die.net/man/7/inotify
有一个名为 inotify-tools 的应用程序套件,其中包含:
inotifywait-使用 inotify 等待文件更改
和
inotifywatch - 使用 inotify 收集文件系统访问统计信息
您可以直接从命令行使用 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
解决方案 2:
下面是我用来查看单个文件的操作的方法。“-m”会导致监控,而不是在一次事件后退出。要获取时间戳,您至少需要 3.13 版的 inotify-tools,但如果这不重要(或者在您的操作系统上不可用或难以更新),您可以跳过 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 并停止它即可。
解决方案 3:
正如我在https://superuser.com/a/747574/28782上所说,我编写了一个使用inotifywait的辅助脚本,而没有它的一些直接限制:inotifyexec
使用示例(假设您已将其作为可执行文件添加到系统路径中):
inotifyexec "echo test" -r .
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件