我正在 linux 中搜索用于监视文件的工具。例如,我需要知道文件发生了什么。喜欢它被创建、重写、读取等等。
我知道我可以使用 inotify 来实现这一点。但我需要更多详细信息。例如,我可以知道创建文件的事件。但我不仅想要创建文件,还想要它创建的文件的大小。例如,要读取一个文件,我不仅想知道我发生的读取文件的事件,还想知道读取文件的详细信息,例如它读取的文件的偏移量。
有没有人可以帮助解决这个问题?
我正在 linux 中搜索用于监视文件的工具。例如,我需要知道文件发生了什么。喜欢它被创建、重写、读取等等。
我知道我可以使用 inotify 来实现这一点。但我需要更多详细信息。例如,我可以知道创建文件的事件。但我不仅想要创建文件,还想要它创建的文件的大小。例如,要读取一个文件,我不仅想知道我发生的读取文件的事件,还想知道读取文件的详细信息,例如它读取的文件的偏移量。
有没有人可以帮助解决这个问题?
如果您不想编写自己的监控工具,auditd是一个不错的选择。否则, usingsys/inotify.h
通过查看struct inotify_event
struct 为您提供有关文件的信息。
据我所知,内核没有提供深度细节的基础设施。这种支持意味着过多的监控钩子,甚至可能影响系统的性能。您必须编写自己的内核代码才能接收此类信息...
您似乎也对某些操作的粒度感到困惑。例如,当通过open()
系统调用创建文件时,它最初是空的。您需要额外的系统调用(例如write()
or lseek()
)来改变它的大小。我不知道任何创建具有给定大小的文件的原子操作。
也就是说,您也许可以使用以下一种或多种替代方法的组合:
如果您需要详细的信息,那么您将不得不编写一个内核模块来挂钩 VFS;甚至审计子系统也没有所有这些细节。