如何知道哪些进程访问了文件?

Ton*_*ony 2 linux file process monitor

我的操作系统是linux。

我有一个位于 /etc 的文件,
其完整路径如 /etc/AAA。

任何工具或命令都可以告诉我在一段时间内该文件被哪些进程访问。例如 1:10 AM,进程 A 写入 /etc/AAA 3:50 AM,进程 B 读取 /etc/AAA

我需要知道访问 /et/AAA 的所有进程 ID

谢谢。

woj*_*tow 5

linux审计系统可以帮助你并且会提供详细的信息:

这是 Redhat 网站上的一些文档,但应该适用于其他 Linux 变体。大多数发行版都有审核系统,但可能是可选安装。(另请参阅以下命令的手册页)

假设审核子系统已经在运行,您可以添加一条规则来监视对示例文件的读取访问,如下所示:

auditctl -w /etc/AAA -p r -k mywatch
Run Code Online (Sandbox Code Playgroud)

(-w 告诉要监视什么文件,-p 告诉要监视什么活动[在本例中为读取],-k 是任意键,可用于稍后查找记录)

然后你可以使用命令查看结果:

ausearch -k mywatch
Run Code Online (Sandbox Code Playgroud)

或查看audit.log 文件(在某些系统上位于/var/log/audit 中)

限制:请注意,文件系统监视(使用 -p)仅记录文件的打开(具有读或写权限),而不记录各个读/写调用的时间。例如,读/写一个大文件会生成太多日志消息并耗尽日志文件空间,因此它不会这样做,它只是记录文件的打开情况。因此,理论上,一个长时间运行的守护进程的程序可以在启动时打开一个文件进行写入(这将被记录),但直到几天后才写入该文件(这将不会被记录)。不过,它对于观察对文件进行快速更改的短期程序应该很有用。如果您确实想监视单个调用,可以使用 -S 选项来监视系统调用,但请谨慎使用,因为如果过于笼统,您可能会很快淹没日志。