可能很白痴,但我正在运行一个完成速度非常快的命令,所以我没有足够的时间从另一个窗口 lsof 它并查看它打开了哪些文件。是否有一些明显的方法来运行命令并立即将 lsof 附加到它? (最好继续跟踪它打开了哪些文件,直到完成)
编辑 - 我也可以很高兴在进程关闭后将 lsof 附加到进程中,我不必实时查看它正在打开的文件
答案1
在这种情况下lsof
可能不是最实用的工具。我会strace
在这种情况下使用。例如,查看ls
命令在其短暂运行时间内打开哪些文件:
strace -e trace=open ls
答案2
您可以在一个窗口中使用该命令watch
,例如:
watch -d 'lsof| `fgrep cron`'
该命令每两秒刷新一次窗口;您可以减少 -n 选项的时间,请参阅 中的更多详细信息man watch
。
管道| fgrep cron
可以帮助您只看到您正在搜索的结果。
当您在另一个窗口中使用该命令时,您将在这种情况下看到与 cron 命令关联的文件和用户。通过您的特定命令或程序更改 cron 命令。
答案3
您可以考虑使用“strace”:它会向您显示从执行开始的系统调用,从而包括文件打开情况。
答案4
您可以使用以下命令实时监控所有打开的文件:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open
对于特定的进程/命令名称(不是脚本),您可以执行以下操作:(例如 apache2 的示例)
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open and proc.name=apache2