找出哪个进程正在写入特定目录


19

我有一个目录/ some / dir,我看到新文件一直都在那儿出现。如何找出创建这些文件的过程?

Answers:


18

尝试lsof +r2 | grep '/some/dir'。这将显示进程访问/ some / dir并每2秒刷新一次。


2
Thaks,这非常接近我的需求,因为它首先生成打开文件的整个列表,然后按/ some / dir进行过滤。但是,如果进程非常快速地创建文件并且不让它们保持打开状态,那么我知道以上内容甚至可能会丢失一些文件。我认为在那种情况下,唯一的选择就是审计子系统,对吗?
homer5439 2011年

您的假设是正确的。另一个想法是使用inotifywait,请参见linux.die.net/man/1/inotifywait
weeheavy 2011年

谢谢,我之前曾考虑过inotify工具,但是我发现它们纯粹是在文件系统级别上工作的,并且似乎无法提供有关谁做了什么的信息。
homer5439 2011年

18

使用内核audit子系统

auditctl -w /some/dir/ -p war -k whatsgoingon

这样就建立了一个挂钩,等待/ some / dir /下发生的事情。

然后确保您有auditd守护程序正在运行。之后,只需等待文件出现,然后从/var/log/auditd.log系统中的任何地方查看或写入,即可了解发生的情况以及通过什么过程进行读取。


谢谢,尽管它需要安装的审计工具,但看起来似乎确实做到了这一点,默认情况下可能并没有安装审计工具。但是,好的,如果需要这些信息,则可以随时进行安装。
homer5439 2011年

作为提醒人们注意的一点:您不能将手表放在顶级目录(受内核禁止)中
Tony Sepia

1
这确实是一种有效的方法!非常感谢!!!顺便说一句,完成后,您可以删除所有挂钩,以免通过永久写入审核日志auditctl -D。您可以auditctl -l用来列出所有挂钩。
罗伯特·

0

lsof 可以帮忙:

# lsof -r1 /some/dir/*

1
谢谢。上面的命令仅告诉我谁在访问现有文件,而对新创建的文件不显示任何内容,是否正确?我的理解是/ some / dir / *扩展到调用命令时存在的文件列表。
homer5439 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.