inotifywatch
を使用して/tmp
フォルダの変更を監視しようとしています:
Sudo inotifywatch -v -r /tmp
いくつかのファイル(touch /tmp/test-1 /tmp/test-2
)を作成した後、inotifywatch
を終了します( Ctrl-C 次の統計が表示されます。
Establishing watches...
Setting up watch(es) on /tmp
OK, /tmp is now being watched.
Total of 39 watches.
Finished establishing watches, now collecting statistics.
total attrib close_write open create filename
8 2 2 2 2 /tmp/
出力は統計だけを出力しますが、予想したファイルは出力しません( here または here のように)。さまざまな種類のアクセス(cat
、mktemp
など)を試しましたが、同じことです。
私は何か見落としてますか?それは私がVPSを使用していて、何かが制限されているためです。
OS:VPS上のDebian 7.3(inotify-tools)
これは、inotifywatch
の使用方法とツール自体の動作によるものです。 _inotifywatch -r /tmp
_を実行すると、_/tmp
_と、alreadyが含まれているすべてのファイルの監視を開始します。 _/tmp
_内にファイルを作成すると、ディレクトリメタデータが更新され、新しいファイルのiノード番号が含まれます。つまり、変更は_/tmp
_ではなく_/tmp/test-1
_で行われます。さらに、inotifywatch
の開始時に_/tmp/test-1
_が存在しなかったため、inotify
時計が配置されていません。 これは、監視を配置した後に作成されたファイルで発生するイベントが検出されないことを意味します。自分で見た方が理解しやすいかもしれません。
_$ inotifywatch -rv /tmp &
Total of n watches.
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
_
inotify_add_watch(2)
でトレースメカニズムを有効にした場合 の場合、最後のコマンドでinotifywatch
によって設定されたウォッチの数がわかります。この数は、inotifywatch
自体によって与えられた数と同じでなければなりません。次に、_/tmp
_内にファイルを作成し、もう一度確認します。
_$ inotifywatch -rv /tmp &
Total of n watches.
$ touch /tmp/test1.txt
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
_
数は増加しません。つまり、新しいファイルは監視されません。代わりにディレクトリを作成すると、動作が異なることに注意してください。
_$ inotifywatch -rv /tmp &
Total of n watches.
$ mkdir /tmp/test1
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n + 1
_
_
-r
_、_--recursive
_:[...]監視対象ディレクトリ内に新しいディレクトリが作成された場合それらは自動的に監視されます。
編集:2つの例の間で少し混乱しましたが、 最初の場合 、ユーザーがinotifywatch
on _~/*
_(展開された don_crisstiのコメントはこちらを参照 )。 _~/.*
_には_~/.
_が含まれているため、ホームディレクトリも監視されます。理論的には、_~/..
_スイッチと組み合わせてシステム全体を監視する_-r
_も含める必要があります。
ただし、監視されているディレクトリでcreateイベントをトリガーするファイルの名前を取得することはis可能です、それでもinotifywatch
はこの情報を取得しないと思います(ディレクトリ名より少し深い場所に保存されます)。 _inotify-tools
_はinotifywait
と呼ばれる別のツールを提供します。これは_inotify-watch
_とほとんど同じように動作し、より多くの出力オプション(_%f
_を含む)を提供します。ここに) :
_inotifywait -m --format "%e %f" /tmp
_
manページ から:
_
--format <fmt>
_ printfに似た構文を使用して、ユーザー指定の形式で出力します。 [...]次の変換がサポートされています。_
%f
_:ディレクトリ内でイベントが発生すると、イベントが発生したファイルの名前に置き換えられます。_
%e
_:発生したイベントに置き換えられ、カンマで区切られます。
また、_-m
_オプション(モニター)は、最初のイベントの後でinotifywait
を実行し続けるため、inotifywatch
と非常によく似た動作が再現されます。