【问题标题】:How to monitor processes that accessed a particular file?如何监控访问特定文件的进程?
【发布时间】:2012-07-21 01:05:09
【问题描述】:

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

假设有一个进程在某个时间间隔写入文件并释放句柄,因此使用 fuser 很难捕获该进程。

【问题讨论】:

  • 您需要/负担得起的(非)侵入性和(非)交互性如何?如果您提到的时间间隔足够长,@cravoori 的轮询可能会起作用;用命名管道替换文件并使其缓冲区饱和将阻止所有写入者,因此您可以在闲暇时识别它们,但可能不是您正在寻找的那种解决方案;最后,您可以定义自己的 Linux kernel tracepoints 来跟踪哪个进程打开了特定的文件进行写入。

标签: linux shell unix command-line fuser


【解决方案1】:

您可以定期观察执行命令。 Watch 还支持差异标志,以突出显示连续运行的差异

watch -n 5  'fuser file_name'

【讨论】:

  • 对我来说不是真的工作...对文件的写入非常简短,使用 watch 没有捕获它(也试过 watch -n 1)
【解决方案2】:

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

此命令将在 60 秒内打印文件的所有访问和修改,然后打印出统计信息。

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

您可以通过https://github.com/rvoicilas/inotify-tools/wiki获取inotifywatch的来源

【讨论】:

  • 这将显示访问/修改的次数,但是有没有办法找出哪个进程访问/修改了文件?
猜你喜欢
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
相关资源
最近更新 更多