0

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

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

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

4

3 回答 3

1

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

于 2014-02-17T13:42:07.813 回答
1

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

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

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

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

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

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

于 2012-06-21T22:26:09.293 回答
0

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

于 2012-06-21T19:45:16.637 回答