linux文件访问监视器,带有inotify?

时间:2012-06-21 19:39:53

标签: linux filesystems monitor inotify operation

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

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

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

3 个答案:

答案 0 :(得分:1)

如果您不想编写自己的监控工具,

auditd是一个不错的选择。 否则,使用sys/inotify.h会通过查看struct inotify_event struct。

为您提供有关该文件的信息

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

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

  • 对可能正在修改文件的任何进程使用stracestrace日志对于人类进行解析可能非常冗长乏味,但是提供了很多关于被跟踪应用程序执行的操作的信息。

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