假设有一个文件即使在我删除它之后仍然自动出现在我的主目录中。对它一无所知,有没有办法弄清楚是什么让该文件一直放在那里?有没有办法追踪创建它的程序/进程?
答案1
一种选择是使用sysdig
:开源系统监控应用程序。使用它,您可以按名称监视文件的活动。假设您想查看哪个进程正在创建名为 的文件/tmp/example.txt
:
# sysdig fd.name=/tmp/example.txt
567335 16:18:39.654437223 0 touch (5470) < openat fd=3(<f>/tmp/example.txt) dirfd=-100(AT_FDCWD) name=/tmp/example.txt flags=70(O_NONBLOCK|O_CREAT|O_WRONLY) mode=0666
567336 16:18:39.654438248 0 touch (5470) > dup fd=3(<f>/tmp/example.txt)
567337 16:18:39.654438592 0 touch (5470) < dup res=0(<f>/tmp/example.txt)
567338 16:18:39.654439629 0 touch (5470) > close fd=3(<f>/tmp/example.txt)
567339 16:18:39.654439764 0 touch (5470) < close res=0
567342 16:18:39.654441958 0 touch (5470) > close fd=0(<f>/tmp/example.txt)
567343 16:18:39.654442111 0 touch (5470) < close res=0
从该输出中,您可以看到名为 pid 5470 的进程touch
打开了该文件。
如果您想要更多信息,您可以在收集系统调用跟踪的“捕获模式”下运行:
# sysdig -w /tmp/dumpfile.scap
然后等待文件被创建,然后停止sysdig
并运行:
# csysdig -r /tmp/dumpfile.scap
这会让你探索发生的一切。您可以按<F2>
并选择Files
,<F4>
按搜索文件名,然后按<F6>
“挖掘”(这将显示类似于上面命令的输出)。这样,您就可以使用相同的方法来查找有关实际创建该文件的进程的信息。
如果您更喜欢的话,有一个csysdig
名为的 GUI 版本。sysdig-inspect