inotify を用いてファイル操作の監視(Ubuntu 上)
Linuxカーネルのinotify機能はファイルシステムイベントを通知し、inotify-toolsで利用できる。inotifywaitはイベント待機・表示を行い、aptでインストールする。オプション`-r`で再帰、`-m`で継続監視、`--format`で出力を設定可能である。監視数上限やNFS等の制限がある。
inotifyはLinuxカーネルが提供する機能であり、ファイルやディレクトリに対する様々な操作(作成、削除、変更、移動など)が発生した際にアプリケーションへ通知する。inotify-toolsは、このinotify機能を手軽に利用するためのコマンドラインツール群であり、中でもinotifywaitコマンドは指定したイベントの発生を待機し、その情報を標準出力に表示する主要なツールである。
インストール
inotifywaitコマンドを含むinotify-toolsパッケージは、標準のリポジトリからインストールできる。以下のコマンドを実行する。
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install inotify-tools
このコマンドにより、inotifywaitやinotifywatchなどの関連ツールがシステムにインストールされる。Ubuntu 24.04 LTSでは、このパッケージの最新バージョンが利用可能である。
使い方の例
特定のディレクトリとそのサブディレクトリにおけるファイル操作イベントを再帰的かつ継続的に監視する基本的な例を示す。以下のコマンドは、現在のディレクトリ(例としてホームディレクトリに移動してから実行)を監視対象とする。
cd
inotifywait -rm --format '%T %w %f %e' .
上記のinotifywait
コマンドで使用している主なオプションは以下の通りである。
-r
,--recursive
: 指定したディレクトリに加え、その配下のサブディレクトリも再帰的に監視対象に含める。大規模なディレクトリツリーを監視する場合、初期設定に時間がかかることがある。-m
,--monitor
: イベントが発生してもコマンドが終了せず、継続して監視を続ける。このオプションと-r
を組み合わせることで、監視開始後に新しく作成されたサブディレクトリも自動的に監視対象となる。--format '%T %w %f %e'
: イベント発生時の出力フォーマットをカスタマイズする。指定されたコードに従って情報が表示される。
--format
オプションで使用可能な主な書式コードは以下の情報に対応する。
%T
: イベントが発生した時刻(デフォルトはHH:MM:SS
形式)。%w
: イベントが発生したディレクトリのパス。%f
: イベントが発生したファイルまたはディレクトリの名前。これがディレクトリ自身に対するイベントの場合は空文字列となる。%e
: 発生したイベントの種類。複数のイベントが同時に発生した場合はカンマ区切りで表示される(例:CREATE
,DELETE
,MODIFY
,MOVED_FROM
,MOVED_TO
,CLOSE_WRITE
など)。
例えば、上記のコマンドを実行中に監視対象ディレクトリ内でファイルを作成したり、内容を変更したりすると、設定したフォーマットに従って以下のような形式でイベント情報が出力される。
HH:MM:SS /path/to/directory/ FILENAME EVENT1,EVENT2,...
注意点: inotifyが一度に監視できるファイル/ディレクトリの数にはシステム全体で上限(デフォルトは通常8192)がある。多数のファイルを監視する場合、この上限に達して監視が正常に行えない可能性がある。また、inotifyはネットワークファイルシステム(NFSなど)、疑似ファイルシステム(/proc, /sysなど)、およびメモリマップファイル操作による変更は検出できないという制限がある。