はじめに
ある日、僕は /tmp ディレクトリの中に、見覚えのないファイル群を見つけた。
- zeb_def_ipc_16353
- zeb_def_ipc_1811
- zeb_def_ipc_18916
派手な名前でもなく、意味ありげな拡張子でもない。ただ、そこに「ある」。
まるで、終電後の駅のベンチに静かに座っている人のように。
- なぜここにあるのか
- 誰が作ったのか
- そして、なぜ今この瞬間に存在しているのか
こういう疑問は、たいてい放っておけば自然に消える。再起動すれば /tmp の中身はすっきりするし、日常生活に実害はない。世界はだいたいの場合、説明がなくても回っていく。
この文章は、Mac の /tmp の片隅で、誰にも知られず生成されるファイルをめぐる、
ささやかな観察記録であり、犯人探しというほど大げさなものではありません。
けれど、ファイルが生まれるその瞬間には、必ず誰かの――いや、何かの意志がある。
その気配を、ほんの少しだけ、覗いてみたいと思った人の備忘録になります。
fs_usage とは?(macOS標準の監視ツール)
fs_usage は、macOS に標準搭載されているリアルタイム監視ツールで、
ファイルシステムのアクティビティに関連するシステムコールの
使用統計情報を継続的に表示します。
デフォルトでは、システム上で現在実行中の
すべてのプロセス(プロセスfs_usage自身を含む)が対象となります。
何がわかるのか?
fs_usage を使うと、次のような情報が分かります。
どのプロセスが
- どのファイルに対して
- どんな操作をしたのか
- いつ実行されたのか
のような、今この瞬間、何がどのファイルを触っているかを可視化するツールです。
基本コマンド
基本コマンドは下記です
sudo fs_usage
root で実行する必要があり、rootで実行しない場合は、
下記のようなエラーが発生します。
'fs_usage' must be run as root...
オプション
オプションについてはよく使うものだけ解説します。
-f フィルタ指定
監視対象のカテゴリを絞り込みます。
| 指定の仕方 | 意味 |
|---|---|
| -f filesys | ファイルシステムのみ表示 |
| -f network | ネットワークのみ表示 |
| -f diskio | ディスクI/Oのみ表示 |
| -f exec | 実行及び生成イベントのみ表示 |
| -f pathname | パス名に関連するイベントのみ表示 |
| -f cachehit | キャッシュヒットも表示 |
sudo fs_usage -f filesys
-w ワイド表示
出力が長いと省略されるのですが、
このオプションがあれば省略せずフル表示になります。
sudo fs_usage -w
-e 除外
Finder のイベントを除外
sudo fs_usage -e Finder
番外: grep と組み合わせ
明らかに気になる組み合わせがある場合は
下記のように grep と組み合わせて使うと実務上はスッキリします。
sudo fs_usage -w -f filesys | grep hoge
原因の特定
では先程までのオプションを含め下記のように実行してみましょう。
sudo fs_usage -f filesys | grep /tmp/zeb
しかし、待てど暮らせど /tmp/zeb は現れません。
・・・
そうです。このコマンドはリアルタイム監視なので、
リアルタイムに更新がないと判別がつきません \(^o^)/オワタ
そういう時はファイルのタイムスタンプを見てみましょう。
/tmp % ls -la | grep zeb_def_ipc_95016
srwxr-xr-x 1 test-user wheel 0 2 27 10:31 zeb_def_ipc_95016
該当時間に更新されてるとすると下記も考えられます。
- 該当時間に起動しており、今起動していないものを探す
- 裏で動いているソフトの場合定期実行しているので翌日のその時間に回す
私の場合は前者でした。
再度 fs_usage を起動します。
sudo fs_usage -f filesys | grep /tmp/zeb
そしてzoomを起動します。出ました…
そう、犯人はzoom でした。
11:35:56 unlink private/tmp/zeb_def_ipc_37109 0.000163 zoom.us
出力の見方
先程の出力は下記のように見ることができます。
| 出力 | 意味 |
|---|---|
| 11:35:56 | イベントが発生した時刻。 |
| unlink | システムコールの種類 |
| private/tmp/zeb_def_ipc_37109 | 対象パス |
| 0.000163 | 処理時間 |
| zoom.us | その操作を実行したプロセス名 |
つまり,11:35:56に、Zoomが /private/tmp/zeb_def_ipc_37109 を
unlinkしたということがわかります。真実はいつもひとつ!
後書き
今回の主役だった zeb_def_ipc_xxxxx も、悪意のある何かではなく、
ただ Zoom が内部で使うファイルのようでした。
役目を終えれば消え、再起動すれば跡形もなくなる、
舞台裏のスタッフのような存在です。
けれど大切なのは、「正体」そのものよりも、
どうやって確かめたか という過程にあります。
- 思い込みで削除しない
- 不安を放置しない
- まず観察する
- そして、ログを見る
fs_usage のようなツールは、
派手ではありませんが、確実に「今この瞬間の真実」を見せてくれます。
エンジニアリングの多くは、壮大な設計よりも、
こうした小さな違和感への好奇心から始まります。
- 「なぜここにあるのか?」
その問いを、面倒くさがらずに追いかけられるかどうか。
それが、システムを“使う側”から“理解する側”へと
一歩進む分岐点なのかもしれません。
もしあなたの /tmp にも、
見覚えのない誰かが静かに座っていたら
慌てず、削除せず、まずは観察してみてください。
そこにはきっと、あなたの知らなかったもう一つの舞台裏が
広がっているかもしれません。