我的主目录中突然出现了三个文件,分别是“client_state.xml”、“lockfile”和“time_stats_log”。最后两个是空的。我想知道他们是怎么到那里的。这不是第一次发生,但最后一次是几周前;我删除了文件,没有任何损坏或抱怨。我一直想不起来我在报道的时候在做什么stat $filename。有什么办法可以找出他们来自哪里?
或者,有没有办法监视主目录(但不是子目录)以创建文件?
Gil*_*il' 24
您可以通过LoggedFS访问文件系统上发生的一切。这是一个堆叠文件系统,它记录目录树中的每次访问。
loggedfs -l /var/tmp/$USER-home-fs.log ~
Run Code Online (Sandbox Code Playgroud)
不过,记录整个主目录可能会降低系统速度。您至少要编写一个带有严格过滤器的配置文件。
如果您有 root 访问权限,在 Linux 上,您可以使用审计子系统来记录大量事情,包括文件系统访问。确保auditd守护进程已启动,然后配置要使用auditctl. 每个记录的操作都记录在/var/log/audit/audit.log(在典型分布上)。要开始观看特定文件:
auditctl -w /path/to/file
Run Code Online (Sandbox Code Playgroud)
或以长形式
auditctl -a exit,always -F path=/path/to/file
Run Code Online (Sandbox Code Playgroud)
如果您将监视放在目录上(使用-w或-F dir=),则递归地监视其中的文件及其子目录。
Mic*_*zek 21
我不相信有一种方法可以确定哪个程序创建了一个文件。
对于您的替代问题:不过,您可以使用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
Run Code Online (Sandbox Code Playgroud)
你可能想用-m(monitor)运行它,它告诉它在看到第一个事件后不要退出
我知道这是一个老问题,但我会建议另一种方法,以防万一有人觉得它有用。我最初发布这个是为了回答一个被欺骗的问题。
一种选择是使用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
Run Code Online (Sandbox Code Playgroud)
从该输出中,您可以看到一个名为touchpid 5470的进程打开了该文件。
如果您需要更多信息,您可以在收集系统调用跟踪的“捕获模式”下运行:
# sysdig -w /tmp/dumpfile.scap
Run Code Online (Sandbox Code Playgroud)
然后等待文件被创建,然后停止sysdig并运行:
# csysdig -r /tmp/dumpfile.scap
Run Code Online (Sandbox Code Playgroud)
这会让你探索发生的一切。您可以按<F2>并选择Files,按<F4>搜索文件名,然后按<F6>“挖掘”(这将显示类似于上述命令的输出)。这样,您就可以使用相同的方法来查找有关实际创建文件的过程的信息。
有一个 GUI 版本的csysdig调用sysdig-inspect,如果这更适合您的话。