在 Linux 系统中,我想获取特定进程在其生命周期内打开(读取或写入)的所有文件的列表。从开始到结束,他的生命周期可能长达几个小时。
我不想调试内核。
我不介意使用类似这样的模拟程序http://valgrind.org/
我尝试使用 lsof,但我不确定是否列出了所有曾经打开过的文件。
答案1
您可以使用斯特拉斯:
strace -e open command
例子:
$ strace -e 打开谁 打开(“/etc/ld.so.cache”,O_RDONLY) = 3 打开(“/lib/libc.so.6”,O_RDONLY)= 3 打开(“ / usr / lib / locale / locale-archive”,O_RDONLY)= 3 打开(“/var/run/utmp”,O_RDONLY|O_CLOEXEC) = 3 打开(“/usr/lib/gconv/gconv-modules.cache”,O_RDONLY)= 3 打开(“/etc/localtime”, O_RDONLY) = 3 cyrus 控制台 2011-12-08 15:34 (:0) cyrus :0 2011-12-08 15:34
答案2
1 条建议...阅读手册页。特别查看 lsof 的“-p”参数。
-p s This option excludes or selects the listing of files for the
processes
“s” 是进程 ID,即你正在谈论的进程。你可以用下面的简单命令获取它:
ps ax |grep yourprocessname
并抓住第一个数字。然后简单地做一个
lsof -p your-snagged-number
瞧!所有文件均由进程使用。
不,它只包含当前打开的文件。 strace 可能是一个更好的选择……但要复杂得多。
答案3
如果您的系统中安装了 strace,您可以使用它来执行该任务:
strace -o strace.log <Your command>
在生成的日志文件中,您可以 grep “open(” 来查找已打开的任何文件。您还可以 grep 您可能感兴趣的其他内容,例如文件读取/写入、网络访问和其他活动。