Answers:
我不相信有一种方法可以确定哪个程序创建了文件。
对于您的替代问题:您可以使用查看是否要重新创建文件inotify
。inotifywait
是inotify
子系统的命令行界面;您可以告诉它create
在主目录中查找事件:
$ (sleep 5; touch ~/making-a-test-file) &
[1] 22526
$ inotifywait -e create ~/
Setting up watches.
Watches established.
/home/mmrozek/ CREATE making-a-test-file
您可能想使用-m
(monitor)运行它,它告诉它在看到第一个事件后不要退出
inotify
?它尚未安装(内核2.6.34),也没有安装/dev/inotify
。
CONFIG_INOTIFY_USER
(Filesystems
-> Inotify support for userspace
)。inotifywait
可能在一个名为inotify-tools
inotify-tools
程序包,因此现在有了inotifywait
(和inotifywatch
)。我对其进行了测试,它似乎可以正常工作。
您可以通过LoggedFS访问文件系统,观察文件系统上发生的所有事情。这是一个堆叠的文件系统,它记录目录树中的每次访问。
loggedfs -l /var/tmp/$USER-home-fs.log ~
但是,记录整个主目录可能会降低系统速度。您至少要编写带有严格过滤器的配置文件。
如果您具有root用户访问权限,则在Linux上,您可以使用审核子系统记录大量内容,包括文件系统访问权限。确保auditd
守护程序已启动,然后配置要使用的日志auditctl
。每个记录的操作都记录在/var/log/audit/audit.log
(在典型分布中)。要开始观看特定文件:
auditctl -w /path/to/file
或长格式
auditctl -a exit,always -F path=/path/to/file
如果将监视放在目录中(带有-w
或-F dir=
),则还将以递归方式监视其中的文件及其子目录。
您可能需要看一下auditd
,该软件包使您可以进行安全审核,并获得许多有关谁更改了文件系统中内容的信息。
我知道这是一个老问题,但是我建议另一种方法,以防万一有人觉得有用。我最初将其发布为对这个问题的回答。
一种选择是使用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
从该输出中,您可以看到名为touch
pid 5470 的进程打开了该文件。
如果需要更多信息,可以在“捕获模式”下运行,在该模式下收集系统调用跟踪:
# sysdig -w /tmp/dumpfile.scap
然后等待文件创建,然后停止sysdig
并运行:
# csysdig -r /tmp/dumpfile.scap
这样您就可以探索发生的一切。您可以按<F2>
并选择Files
,按<F4>
来搜索文件名,然后按<F6>
来“挖掘”(这将显示与上述命令类似的输出)。这样,您就可以使用相同的方法来查找有关实际创建文件的过程的信息。
有一个GUI版本的csysdig
称为sysdig-inspect
,如果您喝的更多。