【问题标题】: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())来改变它的大小。我不知道任何创建具有给定大小的文件的原子操作。
也就是说,您也许可以使用以下一种或多种替代方法的组合:
使用inotify 和stat 系统调用来记录操作以及文件大小和权限。不幸的是,这种方法不是原子的——它不会给你读/写偏移量。
在任何可能正在修改您的文件的进程上使用strace。 strace 日志对于人类来说可能非常冗长且乏味,但提供了大量关于被跟踪应用程序执行的操作的信息。
如果您对特定文件感兴趣,那么也许您可以使用FUSE 文件系统通过传递所有操作来镜像目录,同时记录所有内容。
【解决方案2】:
如果您不想编写自己的监控工具,auditd 是一个不错的选择。
否则,使用sys/inotify.h 可以通过查看struct inotify_event 结构为您提供有关文件的信息。
【解决方案3】:
如果您需要详细的信息,那么您将不得不编写一个内核模块来挂钩 VFS;甚至审计子系统也没有所有这些细节。