给定文件路径,我如何确定哪个进程创建它(和/或读取/写入它)?
答案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
您可以使用ls
和grep
来查找 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
另一种方法是使用lsof
和grep
$ 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