Linuxのinotify-toolsでファイルやディレクトリの変更を監視する

2015-07-01 追記

随分前に書いたpythonからinotifyを利用する記事もあります。よろしければ。

ファイルが変更されるタイミングを知りたい時とか、アクセスするタイミングを知りたい時とか、ありますよね。・・・あんまり無いか。 そんな時に活躍するのがLinuxカーネルに組み込まれてるinotifyって機能。 基本は適当な言語からライブラリとして呼び出すようなのですが、面倒なのでコマンドラインから。

inotify-toolsってパッケージがあります。適当にパッケージマネージャでインストール。 んでもって、

$ inotifywait -m file.txt

とかやるとfile.txtの変更を監視してくれます。 ファイル名の代わりにディレクトリを指定すれば、そのディレクトリの中にあるものを監視してくれます。

再帰的に監視したい場合は-rオプションを付ける。

$ inotifywait -mr file.txt

こんな。

$ inotifywait -mc file.txt

とかにするとCSV形式で出力します。監視対象,変更の種類,ファイル名の順、っぽい。

出力を見ているとアクセスの種類が表示されているのですが、こいつでフィルタリングすることも出来ます。

$ inotifywait -me open,close file.txt

こうするとファイルを開いた/閉じた時だけ表示。 イベントの名前はヘルプを見れば色々載ってます。accessとかmodifyとかopen/closeとかその他いっぱい。

--formatオプションを使うと出力のフォーマットを指定したりできます。 細かいことはmanページでどうぞ。

ちなみに、ずっと付けている-mオプションを付けないと、一つ目のイベントが発生した時点でコマンドが終了してしまいます。

この記事を書きながらずっとvimのスワップファイルの挙動を見ているのだけれど、これ結構おもしろい。 一回保存するにも何度も保存したり移動したりをやってるのね。