在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 和朋友 - 类似 FAMGamin(两者的 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中监视文件系统更改的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 中监视完整的目录树的更改?

监视文件系统事件的平台无关方式

如何在 AIX 中监视没有 cron 作业的文件更改

Python Inotify 监视LINUX文件系统事件

使用Azure Monitor监控服务运行状态

Python Inotify 监视LINUX文件系统事件