我想知道进程访问了哪些文件。strace
可以提供这些信息,但的输出strace
相当“原始”。 是否有任何程序可以提供类似的功能,但以更人性化的方式(即过滤掉库、突出显示 $HOME 目录中的文件、提供有关访问频率的统计信息等)?
答案1
一个叫 Ole Tange 的人编写了你描述的工具。请看这里https://gitlab.com/ole.tange/tangetools/tree/master/tracefile.tracefile 本质上是一个 shell 脚本,因此请使其可执行并运行它。.pod 文件是描述如何使用它的手册。
答案2
脂肪痕迹
安装脂肪痕迹包裹:
sudo apt install fatrace
姓名 fatrace - 报告系统范围的文件访问事件
概要 fatrace [ 选项 ]
描述 fatrace 报告所有正在运行的进程的文件访问事件。
它不会报告 fatrace 本身的文件访问,以避免将输出写入文件而导致的事件被记录。它还会忽略虚拟和内核文件系统(如 sysfs、proc 和 devtmpfs)上的事件。
其主要目的是查找那些不断不必要地唤醒磁盘并因此阻碍省电的进程。
默认情况下,事件会报告到 stdout。如果您在 gnome-terminal 等中运行此工具,这将导致一些循环,因为这会导致每个输出行都访问磁盘。为避免这种情况,请将输出重定向到文件。
输出格式
典型事件如下rsyslogd(875): W /var/log/auth.log compiz(1971): O device 8:2 inode 658203
该行具有以下字段:
进程名称。此信息从 /proc/pid/comm 读取,对于长进程名称可能会缩写。
进程 ID
事件类型:打开、读取、写入或关闭。可以进行组合,例如 CW 用于关闭已写入的文件。
受影响的文件。在某些情况下,无法确定路径和名称,例如,因为它是一个已被删除的临时文件。在这种情况下,它会打印设备的主号和次号以及 inode 号。要更详细地检查此类过程,您应该考虑使用 strace(1)。
如果指定 --timestamp 选项,第一个字段将是当前时间。