监视文件更改+处理对文件的访问


19

我想查看我的应用服务器文件夹中正在发生的事情,即哪些文件*.war在过去的x分钟内被进程x更改或哪些文件已更改(替换/创建)。

Linux中有工具可以帮助您吗?


您好尝试看一下本指南,以设置auditd来监视目录和文件xmodulo.com/how-to-monitor-file-access-on-linux.html
Sifungurux

1
我通过谷歌搜索这个问题,但我发现我的答案在这里:unix.stackexchange.com/questions/18844/...
昆廷Skousen

看一下SystemTap。uselessuseofcat.com/?p=281
史蒂夫

Answers:



14

Strace(如上所述)是一种检查指定运行软件的操作的方法。

类似的命令watch find dir/ -mmin 1也可能有助于检查某个目录中过去一分钟的更改。

根据您的确切需求,inotify-tools可能是这里的另一种交易工具。

例如,inotifywait -mr dir/监视给定目录中的更改,并立即为您提供任何尝试打开/读取/写入/关闭文件的应用程序的反馈。但是,inotify不会为您提供有关哪个应用程序或进程正在访问文件的反馈-strace会这样做。

请知道,对于在某些应用程序容器环境中运行的Java软件,系统级监视通常用途有限,因为您只会看到容器(例如Tomcat),而不是实际的应用程序(例如.war)与系统交互。


8

您可以通过lsof获取有关进程访问哪些文件的信息:

 lsof -n -p `pidof your_app`

反之亦然,您可以获取写入/读取某些文件的进程的pid:

 lsof -n -t file

6

您可以strace用来监视一个进程的所有系统调用,包括所有文件访问。

启动程序时:

$ strace ./myserver

您还可以通过它的PID将strace附加到正在运行的进程:

$ ps aux | grep myserver
me      1859  0.0  0.0  25288   424 ?        Ss   Sep02   0:00 myserver
$ strace -p 1859

也可以通过文件夹而不是通过PID进行监视,谢谢。btw strace -p PID在Ubuntu中对我有效。
Martin V.

0

watch find dir/ -mmin 1 不适用于我,只是复制和比较:

cp -r dir /tmp/olddir
# initialize/whatever
diff -r dir /tmp/olddir

这是相当耗费资源的,但是它显示了快照和diff时间之间的所有变化。

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.