たった1つのコマンドでLinux上のアプリのファイル操作をリアルタイム監視する方法
Linuxをセットアップすると、通常は期待どおりに動作します。バックグラウンドではファイルが作成され、設定が更新され、キャッシュが構築されています。しかし、何も壊れていない限り、その内部をのぞき見ることはほとんどありません。
そこで今回は発想を変えて、バックグラウンドで起きているすべてをその場で目撃してみることにしました。使用したのはinotifywaitコマンドによるリアルタイム監視です。このコマンドのパワフルさには驚かされました。ごく単純な操作が、複数のバックグラウンド処理を生み出していることが明らかになったのです。
すべてを追跡するLinuxの機能
ファイルアクティビティは思ったより簡単に監視できる

Inotifyは、Linuxカーネル2.6.13で追加されたカーネルレベルのサブシステムです。ファイルシステムのイベントをリアルタイムで捉え、発生したその瞬間に報告します。要するに、カーネルが変更を通知してくれる仕組みです。
ファイルの作成・変更・削除・アクセス・移動を常時追跡し、これらのイベントを報告します。inotifyを使っていて気に入った点は、通常の使用でオーバーヘッドが極めて小さいことです。カーネルがすでに生成しているシグナルを報告しているだけで、バックグラウンドスキャナーを走らせているわけではないからです。
inotifyと直接やり取りすることはできません。そこで必要になるのがinotify-toolsです。このパッケージは、カーネル機能をターミナルから利用可能にする2つのユーザー空間ユーティリティを提供します。
| コンポーネント | 役割 |
|---|---|
| inotify | ファイルシステムイベントを生成するカーネルサブシステム |
| inotifywait | イベントをターミナルへリアルタイムで流し込む |
| inotifywatch | 一定期間内の各イベントタイプの発生回数を集計する |
これらの中で、リアルタイム監視を可能にするのがinotifywaitです。
アプリの動きをリアルタイムで見られるたった1つのコマンド
数秒でリアルタイムファイル追跡を開始

inotifyはすでにカーネルに組み込まれているため、開始に必要なのはinotify-toolsのインストールだけです。
| ディストリビューション | コマンド |
|---|---|
| Ubuntu / Debian | sudo apt install inotify-tools |
| Fedora | sudo dnf install inotify-tools |
| Arch Linux | sudo pacman -S inotify-tools |
| openSUSE | sudo zypper install inotify-tools |
インストール後は、inotifywait --versionを実行して準備が整ったことを確認し、次にinotifywait -m ~/Documentsを実行します。-mフラグを付けることが重要です。これがないと、最初のイベント発生後にコマンドが終了してしまいます。実行すると即座に対象ディレクトリ(この場合は「Documents」)の変化が表示され始めます。イベントは「監視ディレクトリ/イベントタイプ/トリガーとなったファイル」という形式で表示され、例えば/home/user/Documents/ MODIFY notes.txtのように現れます。
イベントを取得したら、いくつかのフラグを使ってレポートをより有用なものにできます。
| フラグ | 目的 |
|---|---|
| -m | 1つのイベントで終了せず、継続的に実行し続ける |
| -r | すべてのサブディレクトリを再帰的に監視する |
| -e | 特定のイベントタイプだけを抽出(例:-e create,modify,delete) |
| --format | 可読性やログ記録に合わせて出力形式を制御する |
| --timefmt | 各イベントにタイムスタンプを追加する |
これらが基本のコマンドです。あとは実際の対象を指定するだけで使えます。
実際のアプリで試して見えたこと
普段は決して気づかないファイルの挙動
自分のPCで何が起きているのか確かめるため、普段どおりアプリを使いながら、inotifywaitを特定のディレクトリに向けてみました。驚いたのは表示された内容そのものではなく、バックグラウンドアクティビティの膨大さでした。
まずテキストエディターから始めました。Documentsフォルダーを監視中にファイルを保存すると、1つのイベントが通知されると思っていましたが、返ってきたのは一連のイベント列でした。一時ファイルの作成、続くmoved_fromとmoved_toイベント。この間、テキストエディターは元のファイルに直接触れていませんでした。エディターは使い捨ての一時ファイルに書き込んだ後、それを入れ替える方式を採用しています。こうすることで、書き込み中に問題が起きても元のファイルが無傷で保たれるのです。
次に~/.mozilla/firefox/ディレクトリに切り替えて、Firefoxを監視しました。ブラウザーを起動すると瞬時に書き込みが殺到し、数秒のうちにブックマークと閲覧履歴を担うplaces.sqlite、開いているタブを管理するsessionstore.jsonlz4などが現れました。興味深かったのは、ブラウザーがアイドル状態でも書き込みが続いていたことです。これは正常なブラウザーの挙動のようで、Chromeでも同様のアイドル時の書き込みを見かけたことがあります。Firefoxの大量のバックグラウンドアクティビティは、セッションデータを継続的にディスクへ書き出すことで、クラッシュ後もタブを復旧できるようにするために重要なのです。
しかし、これらすべての中で最もノイズが多かったのはパッケージのインストールでした。/var/lib/dpkg/を監視しながらapt installを実行すると、まずlock-frontendファイルが現れました。これはパッケージ操作が同時に実行されないよう保証する重要なメカニズムです。その後、パッケージデータベース全体で膨大な書き込みが発生していきました。
観察した3つのディレクトリで共通していたのは、「単一のきれいなファイル操作」は一度も存在しなかったという点です。どの操作にも必ず複数の層が伴っていたのです。
実生活で本当に役立つ場面
これは実験として始めましたが、数回セッションを重ねるうちに、inotifywaitは自然と手が伸びるツールになりました。特に有用なのが設定問題のデバッグです。設定ディレクトリを監視し、上書きされるファイルをその都度確認すれば、設定が勝手にリセットされ続ける問題の手掛かりをつかめます。
また、よく知らないソフトウェアを評価するときにも頼りになります。データがどこに保存されているのか推測する必要はもうなく、ソフトが触るファイルを直接観察できます。想定外のディレクトリへ書き込むアプリを見つける簡単な方法でもあります。
ただし、inotifywaitを使うなら、非常にノイズの多い出力に備える必要があります。もう1つの限界は、何が変わったかは分かっても、なぜ変わったのかまでは教えてくれないことです。それでも、Linux管理に欠かせない最も有用なコマンドの1つになったことは間違いありません。
-
美しく使いやすいLinuxディストリビューションを探しているなら「Elementary OS Luna」を試してみよう
Linuxユーザーなら「Elementary」という名前を一度は耳にしたことがあるでしょう。彼らはもともと、LinuxベースのOS向けに美しいテーマを作るグループとしてスタートしましたが、やがてシンプルさと美しさを追求した数々のアプリ開発へと進化していきました。メールクライアントの「Geary」などがその代表例です。 あれからElementaryチームは大きく成長しました。そしてついに、完全なOSの第2版となる「Elementary OS Luna」をリリースしたのです。美しく、エレガントで、おそらく現時点で最高のLinux体験を提供してくれる一枚です。 2011年に初代Elementary
-
elementary OS 6「Odin」ベータ版がついに登場!新機能まとめとダウンロード方法
前回のメジャーリリースから早くも1年以上が経過しました。その間、独自の哲学と美しいデスクトップ環境によって、elementary OSの人気は大きく高まっています。数か月にわたる入念な開発を経て、elementary OSチームはついに2021年のメジャーリリースを発表する準備が整いました。 elementary OS 6「Odin」の公開は目前に迫っており、現在パブリックベータ版が配信されており、Linux愛好家は安定版のリリース前に先行して体験することができます。 elementary OS 6 Odinの新機能とは? 前バージョンと比較して、elementary OS 6 Odinはユ