您可以使用进程监视器轻松观察到程序正在执行 I/O 磁盘操作。有没有一种简单的方法可以观察确切地每个进程正在读取/写入哪些文件?
欢迎使用 Windows/Linux 解决方案!
答案1
答案2
在 Windows 上,你可以使用一个名为进程监控,或简称为 ProcMon。它捕获所有文件和注册表访问 - 不仅仅是“当前”状态,还包括每个单独的操作。
这种类型的工具特别有用,因为许多文件都是快速打开-读取-关闭的,而不是长时间保持打开状态。
Linux 中 ProcMon 的大致对应版本是strace
。要查看所有与文件相关的系统调用:
strace -e file /bin/chmod a+w test.txt
其他类似工具有perf trace
和ltrace
。ktruss
我认为 BSD 有。
bpftrace
高度灵活的系统跟踪可以通过和 SystemTap进行stap
(两者都类似于 Solaris 的dtrace
)。不过,它们需要一段时间才能学会。有关的。
Linux审计子系统,带有auditctl
,可用于跟踪对特定文件的操作,无论这些操作是由哪个进程执行的。例如,您可以查看哪些进程正在访问您的 ~/.ssh/id_rsa 私钥。
(类似地,诸如 AppArmor 之类的 LSM 可以在“投诉”或“许可”模式下运行,在这种模式下,它们仅记录将被拒绝的操作,但实际上并不会拒绝它们。)
这通知通知子系统可用于获取正在访问的所有文件的系统范围的流水线供稿,例如使用该fatrace
工具。(它类似于 inotify,它是每个目录的;inotifywait -rmq ~/foo
将递归监视该目录。)