
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
すぐに使えるバイナリはリリースページにあります!また、誰かが親切にも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()が必要で、コード署名が必要ですが、それを動作させることができず、そもそも無料ソフトウェアを書くためにAppleに年間100ドルを支払う気はありません。Macのdtrussを使用すると単一のプロセスとその子プロセスを追跡できますが、-tフラグはフィルタリングするシステムコールを1つしか受け付けないようです。fs_usageも同様のことを行いますが、子プロセス/スレッドを追跡するかどうかはわかりません。WindowsのProcess Monitorは非常に優れています。
whatfilesを使ってFirefoxを起動するとタブがクラッシュします。(起動後に-p [PID]でアタッチする場合は正常に動作し、すでにFirefoxのウィンドウが開いている場合はwhatfilesを使って2つ目のウィンドウを起動しても問題ありません。)ご興味をお持ちいただきありがとうございます。ぜひCloaker、Nestur、Flying Carpetもご覧ください!