デバイスを作成すると、inotifywaitは変更されません。

デバイスを作成すると、inotifywaitは変更されません。

これは完璧に動作します。

$ 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/uptime1000分の1秒までの正確な稼働時間を含む簡単な例を考えてみてください。 inotifyが毎秒100回「作成」されたことを知らせるべきですか?あまり役に立たないだけでなく、これらの仮想の「書き込み」に代わってinotifyイベントを生成することがないため、パフォーマンスの問題になり、解決するのは難しい問題かもしれません。カーネルからinotifyファイルシステムAPIレベルで動作

だから状況はこうです一部/proc/uptimesysfsと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たとえば、イベント(スクリプトの実行)が必要です。

関連情報