在linux中监视文件系统更改的最佳方法
Posted
技术标签:
【中文标题】在linux中监视文件系统更改的最佳方法【英文标题】:Best way to monitor file system changes in linux 【发布时间】:2011-12-05 06:04:01 【问题描述】:我正在考虑构建一个监视文件系统活动的文件系统同步实用程序,但似乎 linux 内核中的某些文件系统监视功能已过时或功能不全。
我的研究发现
dnotify 先有通知功能,具有通知删除、修改、访问、属性、创建、移动等功能,可以确定文件描述符,但现在 inotify 和 fanotify 已经过时了
inotify 以通知排在第二位,具有通知访问、修改、属性、关闭、移动、删除、创建等功能,但它不提供文件描述符或进程,并且会被 fanotify 过时
fanotify 是最新的通知访问,修改,关闭,但不通知删除或属性,但提供文件描述符
我需要一种方法来确定进程(例如从 fd)以及删除、修改、属性等内容,以便同步所有内容,有什么建议吗?不幸的是 dnotify 似乎是最好但最过时的
【问题讨论】:
【参考方案1】:您应该使用库而不是 inotify
和朋友 - 类似 FAM
或 Gamin
(两者的 API 相同)。这将使您的程序可移植到其他 Unix。
【讨论】:
【参考方案2】:有一个很好的库提供文件描述符或带有 inotify 的进程。它有自己的 C API 和 inotifywatch util(适用于脚本),都在 inotify-tools 包中。
http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/index.html http://www.infoq.com/articles/inotify-linux-file-system-event-monitoring我强烈反对 fanotify 会过时 inotify。
FAM 和 gamin 是非常好的服务器/客户端选项。他们都使用 inotify 作为过时的 dnotify 和民意调查的首选。我更喜欢游戏。
【讨论】:
出于兴趣,您强烈反对的原因是什么? 我也很好奇 - 用 inotify 递归地查看目录充其量是棘手的。 fanotify 无法直接比较,但对于监控整个磁盘卷,它更简单、更可靠。 除非您想监视它是否有“文件已重命名”或“文件已删除”之类的内容,然后您仍然不走运。 :// 这些似乎都没有提供进程 ID。 “inotify API 不提供有关触发 inotify 事件的用户或进程的信息。”【参考方案3】:incron 是用于此类操作的有用工具。您可以为要观看的目录或文件创建配置文件。
http://inotify.aiken.cz/?section=incron&page=about&lang=en
在ubuntu中
sudo apt-get install incron
/etc/incron.d/mynotification.conf
# notification for user creation
/home IN_ALL_EVENTS /opt/notify_user_created.sh $#
【讨论】:
以上是关于在linux中监视文件系统更改的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章