/tmp
以下を使用してフォルダの変更を監視しようとしていますinotifywatch
。
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/
出力には統計のみが印刷されますが、予想されるファイルは印刷されません(例:ここまたはここ)。さまざまな種類のアクセス(などcat
を介して)を試しましたが、mktemp
結果は同じです。
私が逃したものは何ですか? VPSを使用していて、一部のコンテンツが制限されているためですか?
オペレーティングシステム:VPSのDebian 7.3(inotify-tools)
答え1
これは、ツールの使用方法inotifywatch
とツール自体の動作方法によるものです。を実行すると、すべてのファイルが表示さinotifywatch -r /tmp
れ始めます。/tmp
すでに内部に。からファイルを作成すると、ディレクトリメタデータが更新され、/tmp
新しいファイルのinode番号が含まれます。これは、変更がからで/tmp
はなくで行われたことを意味します/tmp/test-1
。また、発売/tmp/test-1
当時は時計がなかったため、inotifywatch
時計は配置されていません。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
: [...] watch ディレクトリ内に新しいディレクトリを作成する場合自動的に監視されます。
編集する:2つの例を挙げると少し混乱していますが、最初のケース、ユーザーがinotifywatch
(~/*
拡張、ここでdon_crisstiのコメントをご覧ください。)。理論~/.*
的にはホームディレクトリ~/.
も含める必要があり、~/..
スイッチと組み合わせることで-r
システム全体を監視できます。
しかしそれははいトリガーされたファイルの名前を取得できます。作るイベントは監視対象のディレクトリにありますが、この情報は検索されないようですinotifywatch
(ディレクトリ名よりも少し深い場所に保存されています)。非常に同様に動作し、より多くの出力オプションを提供するinotify-tools
という別のツールがあります(ここで探しているものを含む)。inotifywait
inotify-watch
%f
inotifywait -m --format "%e %f" /tmp
~からマニュアルページ:
--format <fmt>
printf と同様の構文を使用して、ユーザーが指定した形式で出力します。 [...] 次の変換がサポートされます。
%f
:そのディレクトリでイベントが発生すると、そのイベントを発生させたファイル名に置き換えられます。。
%e
:発生したイベントをカンマで区切って置き換えます。
また、-m
オプション(モニター)はinotifywait
最初のイベント以降も引き続き実行され、非常に似た動作を再現しますinotifywatch
。