如何确定哪个进程正在创建文件?

如何确定哪个进程正在创建文件?

给定文件路径,我如何确定哪个进程创建它(和/或读取/写入它)?

答案1

拉索夫命令(已经在几个答案中提到)会告诉您在运行它时哪个进程打开了一个文件。lsof几乎适用于所有 UNIX 变体。

lsof /path/to/file

lsof不会告诉您两微秒前打开并一微秒前关闭的文件。如果您需要监视特定文件并在访问该文件时做出反应,则需要不同的工具。

如果您可以提前计划一下,您可以将文件放在记录文件系统文件系统。 LoggedFS 是一个保险丝堆叠式文件系统,记录对层次结构中文件的所有访问。日志记录参数是高度可配置的。保险丝可用于所有主要大学。您需要记录对创建文件的目录的访问。从提供的示例配置文件开始并根据本指南

loggedfs -l /path/to/log_file -c /path/to/config.xml /path/to/directory
tail -f /path/to/log_file

许多大学还提供其他监控设施。 Linux下可以使用比较新的 审计子系统。关于它的文献不多(但多于关于 Loggedfs 的文献);你可以从本教程或者A 很少 例子或者只是与auditctl手册页。在这里,确保守护进程已启动就足够了,然后运行auditctl

auditctl -w /path/to/file

(我认为旧系统需要auditctl -a exit,always -w /path/to/file)并观察日志/var/log/audit/audit.log

答案2

好吧,您可以重复运行lsof,如果幸运的话,罪魁祸首将使文件保持打开状态足够长的时间以使其显示出来。 IE。:

$ lsof -r1 /path/to/file

或对于许多文件

$ lsof -r1 /path/to/folder/*

这将列出在某个时间点对给定路径的所有访问,每秒一次。这包括列出访问该文件的进程的 PID。

如果这不起作用,即文件打开和关闭的速度非常快,这种情况经常发生,我相信您需要寻找更复杂的工具。或许记录文件系统可能是什么东西?

哈克兰
如果每秒一次lsof不起作用,您当然可以破解一个 while 循环,尽可能快地重复运行 lsof 。喜欢:

$ while true; do lsof /paht/to/file; done;

不漂亮,但谁知道呢,也许就这么做了。

答案3

您可以使用lsof为了那个原因:

$ lsof /tmp/file
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
less      4737 wena    4r   REG    8,6    90700 1643536 /tmp/file

它说名为的进程less正在保存文件”/tmp/文件“ 打开。

笔记geany:奇怪的是,如果我使用或,这不起作用nano。我期待更好的建议。

答案4

您可以使用lsgrep来查找 chrome 使用的文件

$ ls -l /proc/*/fd | grep "chrome"
lrwx------ 1 ba abc 64 Jul 16 22:19 104 -> /home/abc/.config/google-chrome/Default/Cookies
lr-x------ 1 abc abc 64 Jul 16 22:19 113 -> /opt/google/chrome/nacl_irt_x86_64.nexe
lrwx------ 1 abc abc 64 Jul 16 22:19 121 -> /home/abc/.cache/google-chrome/Default/Cache/data_0
lrwx------ 1 abc abc 64 Jul 16 22:19 122 -> /home/abc/.cache/google-chrome/Default/Cache/data_1
lrwx------ 1 abc abc 64 Jul 16 22:19 123 -> /home/abc/.cache/google-chrome/Default/Cache/data_2
lr-x------ 1 abc abc 64 Jul 16 22:19 125 -> /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic

另一种方法是使用lsofgrep

$ lsof | grep "chrome"
chrome     2204       abc  cwd       DIR                8,5     4096 1441794 /home/abc
chrome     2204       abc  rtd       DIR                8,5     4096       2 /
chrome     2204       abc  txt       REG                8,5 87345336 5111885 /opt/google/chrome/chrome
chrome     2204       abc  mem       REG                8,5  4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache/data_3
chrome     2204       abc  mem       REG                8,5  1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache/data_2
chrome     2204       abc  mem       REG                8,5   270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache/data_1
chrome     2204       abc  mem       REG                8,5    45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache/data_0

相关内容