我很好奇如何通过命令行显示/监控程序正在写入的文件?我知道某些进程依赖某些文件才能运行,但我如何知道这些进程使用哪些文件。假设我想查看 DNS 解析器服务写入哪些文件,我知道答案是 /etc/resolv.conf,但我如何验证这一点?
答案1
该lsof
命令列出了每个进程打开的文件。任何时刻打开的文件数量都很大,因此您需要具体一点。
如果你知道进程 ID,请执行
sudo lsof -p <pid>
。如果您知道文件所在的目录,请执行
sudo lsof +D <directory>
。
还有更多选项。请参阅man lsof
。如果没有 sudo,您只能看到由您自己拥有的进程打开的文件。
答案2
您可以使用strace
它来监视进程进行的每个系统调用,包括打开文件进行读写。
strace
处理大量输出。您可以 grep 输出以open
仅查看对 的调用open files
。
man strace
有关详细信息,请参阅。请注意-f
,如果您需要跟踪分叉的进程,这是一个选项。