これは完璧に動作します。
$ inotifywait --event create ~/foo
Setting up watches.
Watches established.
/home/ron/foo/ CREATE bar
ただし、/sys/devices/virtual/net の下に tun0 ディレクトリが作成されると、そのディレクトリが存在します。
$ inotifywait --event create /sys/devices/virtual/net
Setting up watches.
Watches established.
このフォルダは誰でも読むことができるので、inotifywaitが機能したいと思います。
それでは、私が何を間違っているのでしょうか?
ありがとう
答え1
しかし、よくある質問(FAQ)以下の部分的なサポートを意味します。
Q:sysfs(procfs、nfs ...)を見ることはできますか?
簡単に言えばそうです。しかし、いくつかの制限があります。これらの制限はカーネルのバージョンによって異なり、より小さくなる傾向があります。特定のファイルシステムについてお読みください。
実際に何がサポートされているか(またはライブラリ/ユーティリティのinotifyサポートではなく、ファイルシステム自体にほとんど依存しているため、どのカーネルバージョンで)話しません。
簡単な説明は、inotifyをサポートすることは本当に意味がないということです。すべて/sys
(または)では/proc
伝統的な意味で変更されないからです。これらのファイル/ディレクトリのほとんどは、カーネル状態のスナップショットを表します。あなたがそれらを見るとき。
/proc/uptime
1000分の1秒までの正確な稼働時間を含む簡単な例を考えてみてください。 inotifyが毎秒100回「作成」されたことを知らせるべきですか?あまり役に立たないだけでなく、これらの仮想の「書き込み」に代わってinotifyイベントを生成することがないため、パフォーマンスの問題になり、解決するのは難しい問題かもしれません。カーネルからinotifyファイルシステムAPIレベルで動作。
だから状況はこうです一部/proc/uptime
sysfsとprocfsのエントリは、たとえばアクセス(アクセス、開く、閉じる)のタイミングを知らせるinotifyイベントを生成しますが、私のカーネルはファイルシステムがマウントおよびアンマウントされたときにイベントを表示しません/proc/mounts
。
Greg Kroah-Hartmanが言った内容は次のとおりです。
http://linux-fsdevel.vger.kernel.narkive.com/u0qmXPFK/inotify-sysfs そしてリヌス:
http://www.spinics.net/lists/linux-fsdevel/msg73955.html
(ただし、両スレッドとも2014年のスレッドです。)
即時の問題を解決するには、作成および削除されたトンデバイスのトリガを表示するdbus(ルートは不要)を使用できます(私のデバイスにはトンデバイス名は表示されず、PtPを含むHAL文字列のみが表示されます)(いいえdbus-monitor --monitor --system
)。udevadm monitor
ルートが必要)またはポーリングディレクトリに置き換えます(試み:共有フォルダの新しいファイルを監視するスクリプト(Windowsホスト、Linuxゲスト))。 ( "n"で始まるファイルを使用して注意することudev
もできますが、これは非常に悪いハックです。)inotifywait -m -r /dev/.udev
答え2
/sys
そして/proc
ファイルシステムではありません。これはカーネルインタフェースであり、ファイルシステムのように動作します。
ネットワークデバイスを作成すると、ファイルシステムフォルダは作成されません。データが変更されると、誰も見なくても通常のファイルシステムが変更されます。しかし、/sys
コンテンツは/proc
誰かが見る瞬間に生成されます。
udev
たとえば、イベント(スクリプトの実行)が必要です。