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のスワップファイルの挙動を見ているのだけれど、これ結構おもしろい。 一回保存するにも何度も保存したり移動したりをやってるのね。