Wie funktioniert inotify?

14

Laut Wikipedia ,

Inotify ist ein Linux-Kernel-Subsystem, das Änderungen am Dateisystem bemerkt. Es ersetzte das vorherige dnotify.

Programme, die Dateien synchronisieren (z. B. Absturzplan, Dropbox, Git), werden in Benutzerhandbüchern empfohlen, die vom Benutzer erweitert werden max_user_watches( 1 , 2 , 3 ).

Soweit ich von inotify verstehe, wird dem Betriebssystem "mitgeteilt", dass eine Datei geändert wurde, anstatt dass das Betriebssystem nach Änderungen "suchen" muss.

Ich gehe davon aus, dass in jedem Verzeichnis eine "inotify" -Datei erstellt wird. Ist das richtig? Gibt es eine Möglichkeit, über die Befehlszeile mit inotify zu interagieren?

Ressourcen
Warum unterscheiden sich inotify-Ereignisse auf einem NFS-Mount?
Inotifywait für eine große Anzahl von Dateien in einem Verzeichnis

Spuder
quelle
Sie werden die Antworten auf Ihre Fragen wahrscheinlich nicht so finden (zumindest nicht so einfach), aber Sie sollten grep --exclude=arch -r inotifyin den Linux-Kernel-Quellen laufen .

Antworten:

21

Inotify ist eine interne Kernel-Einrichtung. Es gibt keine "inotify-Datei". Es gibt dedizierte Systemaufrufe inotify_init, inotify_add_watchmit inotify_rm_watchdenen Prozesse, die sich selbst registrieren, benachrichtigt werden, wenn bestimmte Dateisystemereignisse auftreten. Wenn das Ereignis eintritt, erhält der Prozess eine Beschreibung des Ereignisses über den von zurückgegebenen Dateideskriptor inotify_init.

Dem Betriebssystem wird nicht "mitgeteilt", dass eine Datei geändert wurde: Es weiß, weil es die Änderung vornimmt. Es ist die Anwendung, die sagt, dass eine Datei geändert wurde, anstatt suchen zu müssen.

Das Programm inotifywaitbietet eine einfache Möglichkeit, inotify über die Befehlszeile zu verwenden.

Gilles 'SO - hör auf böse zu sein'
quelle