Whatfiles 是一个 Linux 工具,用于记录其他程序在你的系统上读取、写入、创建或删除的文件。它还会追踪目标进程创建的任何新进程和线程。
长期以来,我一直对缺乏一个简单的工具来查看进程从 main() 到退出期间访问了哪些文件感到沮丧。无论你是不信任软件供应商,还是担心恶意软件,能够知道程序或安装程序对你的系统做了什么非常重要。lsof 只能观察一个时间点,而 strace 体积较大且有些复杂。
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-clone-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-heal-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-perspective-clone-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-convolve-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-smudge-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-dodge-burn-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-desaturate-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/plug-ins, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /usr/lib/gimp/2.0/plug-ins, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/pluginrc, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /usr/share/locale/en_US/LC_MESSAGES/gimp20-std-plug-ins.mo, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /usr/lib/gimp/2.0/plug-ins/script-fu, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /etc/ld.so.cache, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /etc/ld.so.cache, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpui-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpwidgets-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpwidgets-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimp-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpcolor-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
基本用法,启动 ls 并将输出写入当前目录的日志文件:
$ whatfiles ls -lah ~/Documents
使用 -o 指定输出文件位置:
$ whatfiles -o MyLogFile cd ..
包含调试输出,打印到标准输出而不是日志文件:
$ whatfiles -d -s apt install zoom
附加到当前正在运行的进程(需要 root 权限):
$ sudo whatfiles -p 1234
现成的二进制文件位于 releases 页面!还有人将其添加到了 Arch 仓库,并且 letompouce 还建立了一个 GitLab 流水线。
gcc 和 make):$ cd whatfiles
$ make
$ sudo make install
支持 x86、x86_64、ARM32 和 ARM64 架构。
这不就是 strace -fe trace=creat,open,openat,unlink,unlinkat ./program 的重新实现吗?
是的。不过它的目标是更简单易用。
有 Mac 和 Windows 版本吗?
没有。在 Mac 上追踪系统调用需要 task_for_pid(),这需要代码签名,我无法使其工作,而且我也不想每年付给苹果 100 美元来编写自由软件。Mac 上的 dtruss 可以用来跟踪单个进程及其子进程,但 -t 标志似乎只接受一个系统调用来过滤。fs_usage 做了类似的事情,但我不确定它是否跟踪子进程/线程。Windows 的 Process Monitor 很优秀。
whatfiles 启动 Firefox 时,标签页会崩溃。(但 Firefox 运行后使用 -p [PID] 附加运行正常,如果 Firefox 已打开一个窗口,使用 whatfiles 启动第二个窗口也正常。)感谢你的关注,也请查看 Cloaker、Nestur 和 Flying Carpet!