linux文件访问监视器,使用inotify?

linux文件访问监视器,使用inotify?,linux,filesystems,monitor,inotify,operation,Linux,Filesystems,Monitor,Inotify,Operation,我正在linux中搜索一个监视文件的工具。 例如,我需要知道文件发生了什么。比如它可以被创建、重写、阅读等等 我知道我可以使用inotify来实现这一点。但我需要更详细的信息。 例如,我可以知道创建文件的事件。但我想要的不仅是创建的文件,还有创建的文件的大小。 例如,要读取一个文件,我不仅要知道发生的事件读取文件,还要知道读取文件的详细信息,例如从中读取的文件的偏移量 有人能帮你解决这个问题吗?如果你需要详细的信息,那么你必须编写一个内核模块来钩住VFS;甚至审计子系统也没有所有这些细节。据我所

我正在linux中搜索一个监视文件的工具。 例如,我需要知道文件发生了什么。比如它可以被创建、重写、阅读等等

我知道我可以使用inotify来实现这一点。但我需要更详细的信息。 例如,我可以知道创建文件的事件。但我想要的不仅是创建的文件,还有创建的文件的大小。 例如,要读取一个文件,我不仅要知道发生的事件读取文件,还要知道读取文件的详细信息,例如从中读取的文件的偏移量


有人能帮你解决这个问题吗?

如果你需要详细的信息,那么你必须编写一个内核模块来钩住VFS;甚至审计子系统也没有所有这些细节。

据我所知,内核没有提供这种深度细节的基础设施。 这种支持意味着监控挂钩的数量过多,甚至可能影响系统的性能。您必须自己编写内核代码才能接收此类信息

您似乎还对某些操作的粒度感到困惑。例如,当通过
open()
系统调用创建文件时,该文件最初为空。您需要额外的系统调用(例如
write()
lseek()
)才能更改其大小。我不知道有任何原子操作会创建具有给定大小的文件

也就是说,您可以使用以下一种或多种备选方案:

  • 使用
    inotify
    stat
    系统调用来记录操作、文件大小和权限。不幸的是,这种方法不是原子式的,它不会给您读/写偏移量

  • 在可能修改文件的任何进程上使用<代码>strace日志对于人类来说可能非常长且繁琐,但它提供了有关被跟踪应用程序执行的操作的大量信息

  • 如果您对特定文件感兴趣,那么也许可以使用文件系统通过传递所有操作来镜像目录,同时也记录所有内容

    • 如果您不想编写自己的监控工具代码,那么这是一个不错的选择。 否则,使用
      sys/inotify.h
      可以通过查看
      struct inotify_event
      struct获得有关文件的信息