【问题标题】:linux file access monitor,with inotify?linux文件访问监视器,带有inotify?
【发布时间】:2012-06-21 19:39:52
【问题描述】:

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

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

有没有人可以帮助解决这个问题?

【问题讨论】:

    标签: linux filesystems monitor inotify operation


    【解决方案1】:

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

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

    也就是说,您也许可以使用以下一种或多种替代方法的组合:

    • 使用inotifystat 系统调用来记录操作以及文件大小和权限。不幸的是,这种方法不是原子的——它不会给你读/写偏移量。

    • 在任何可能正在修改您的文件的进程上使用stracestrace 日志对于人类来说可能非常冗长且乏味,但提供了大量关于被跟踪应用程序执行的操作的信息。

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

    【讨论】:

      【解决方案2】:

      如果您不想编写自己的监控工具,auditd 是一个不错的选择。 否则,使用sys/inotify.h 可以通过查看struct inotify_event 结构为您提供有关文件的信息。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          最近更新 更多