如何监视访问特定文件的进程?

问题描述:

我知道有一个fuser命令列出了进程的pid,但是如何持续监视哪个进程访问了该文件? (认为​​类似于tail -f文件名的行为)如何监视访问特定文件的进程?

说有一个写入文件并在某个时间间隔释放句柄的进程,所以很难使用fuser来捕获该进程。

+0

请检查http://linux.die.net/man/7/inotify – Jayan 2012-07-21 06:23:00

+0

如何(非)侵入性(非)交互式你需要/能负担得起这个吗?如果你提到的时间间隔足够长,@ cravoori的投票可能会奏效;用命名管道替换文件并使其缓冲区饱和将阻止所有作者,因此您可以在闲暇时识别它们,但可能不是您要寻找的解决方案;最后,你可以定义你自己的Linux [内核跟踪点](http://netsplit.com/2011/03/07/tracing-on-linux/)来跟踪哪个进程打开了一个特定的文件供写入。 – vladr 2012-07-21 06:24:03

你可以看着定期执行命令。为了突出连续运行的差异,手表还支持差异标记

watch -n 5 'fuser file_name' 
+0

对我来说真的没什么作用了...对文件的写入非常简短,并且使用手表没有捕获它(尝试注意-n 1) – the1plummie 2012-07-25 19:00:56

假设您在Linux上,您可以使用inotifywatch。

该命令将打印所有访问并修改文件60秒,然后打印出统计数据。

inotifywatch -v -e access -e modify -t 60 filename 

你可以得到inotifywatch的源作为https://github.com/rvoicilas/inotify-tools/wiki

+2

这将显示访问/修改的数量,但有没有办法找出*哪个进程*访问/修改了文件? – aioobe 2015-08-28 14:24:55