在linux中监视文件系统更改的最佳方法

在linux中监视文件系统更改的最佳方法,linux,filesystems,inotify,Linux,Filesystems,Inotify,我正在考虑构建一个监控文件系统活动的文件系统同步实用程序,但linux内核中的一些文件系统监控功能似乎已经过时或功能不全 我的研究发现了什么 dnotify首先提供了notification,它具有通知删除、修改、访问、属性、创建、移动的功能,可以确定文件描述符,但是现在inotify和fanotify已经过时了 inotify以notification名列第二,它具有通知访问、修改、属性、关闭、移动、删除、创建等功能,但它不提供文件描述符或进程,fanotify会使其过时 fanotify是最

我正在考虑构建一个监控文件系统活动的文件系统同步实用程序,但linux内核中的一些文件系统监控功能似乎已经过时或功能不全

我的研究发现了什么

dnotify首先提供了notification,它具有通知删除、修改、访问、属性、创建、移动的功能,可以确定文件描述符,但是现在inotify和fanotify已经过时了

inotify以notification名列第二,它具有通知访问、修改、属性、关闭、移动、删除、创建等功能,但它不提供文件描述符或进程,fanotify会使其过时

fanotify是最新的,它通知访问、修改、关闭,但不通知删除或属性,但提供文件描述符


我需要一种方法来确定流程(例如从fd)以及删除、修改、属性等,以便同步所有内容,有什么建议吗?不幸的是,dnotify似乎是最好的,但最过时的

你应该使用一个库,而不是
inotify
和friends——类似于or的东西(两者的API相同)。这将使您的程序可移植到其他Unix。

有一个很好的库,它提供了文件描述符或使用inotify的进程。它有自己的C API和inotifywatch util(适用于脚本),都在inotify工具包中

我强烈反对fanotify将超过inotify


FAM和gamin是非常好的服务器/客户端选项。他们都使用inotify作为第一个选项,而不是过时的dnotify和polls。我更喜欢gamin。

对于这样的操作,incron是一个有用的工具。您可以为要监视的目录或文件创建配置文件

在ubuntu中

sudo apt-get install incron
/etc/incron.d/mynotification.conf

# notification for user creation
/home IN_ALL_EVENTS /opt/notify_user_created.sh $#

出于兴趣,您强烈反对的原因是什么?我也很好奇-使用inotify递归地查看目录充其量也很棘手。fanotify没有直接的可比性,但对于监视整个磁盘卷来说,它更简单、更可靠。除非您想监视它是否存在“文件被重命名”或“文件被删除”之类的情况,否则您仍然运气不佳:/这些似乎都没有提供进程ID。“inotifAPI没有提供有关触发inotify事件的用户或进程的信息。”