AA_PO-25719_DmitryGuzhanin-123RF.jpg

© Dmitry Guzhanin, 123RF

Mit Inotify das Dateisystem überwachen

Bescheid!

Das Dateisystem auf Veränderungen zu überwachen, erweist sich oft als ausgesprochen nützlich, hilft es doch, viele Vorgänge zu automatisieren.

Die Situation tritt immer wieder auf: Sobald Sie eine bestimmte Datei erzeugt oder verändert haben, möchten Sie das Kompilieren anstoßen, ein Archiv erstellen oder das File auf einen Server hochladen. Früher kam dazu das sogenannte Busy-Waiting zum Einsatz, heute erledigen die Inotify-Tools diese Aufgabe eleganter und effizienter [1].

Beim Busy-Waiting läuft ein Programm in einer Endlosschleife und ruft dabei immer wieder dieselben Informationen ab, etwa den Inhalt eines Verzeichnisses. Diese vergleicht es mit zuvor erhobenen Daten. Diese Vorgehensweise ist nicht nur ineffektiv, sondern kann im schlimmsten Fall bei Datenträgern sogar Schäden verursachen.

Viel besser wäre es, liefe die Überwachung automatisch ab – der Kernel könnte alle Programme, die auf eine Änderung an einer Datei warten, über eine spezielle Schnittstelle benachrichtigen. Schon die Dateisysteme des Amiga kannten so etwas. Tatsächlich gibt es auch unter Linux eine entsprechende Funktion namens Inotify (aus "I-Node" und "notify"). Linux setzt Inotify auf bestimmte Einträge im Dateisystem an.

Durch Optionen legen Sie dabei fest, welche Änderungen an Dateien der Kernel auf welche Weise meldet. Alle Änderungen lösen sogenannte Events aus, einen Überblick dazu finden Sie in der Tabelle "Inotify-Events". Achtung: Die tatsächlich verwendete Syntax unterscheidet sich bei den Programmen gelegentlich, oft hinsichtlich der Groß/Kleinschreibung. Bei Fehlern finden Sie meist in der Manpage des verwendeten Programms Hinweise. Bei den SELF-Events existieren die beobachteten Dateien nach der Meldung nicht mehr, was normalerweise die Überwachung beendet.

Inotify-Events

Kürzel Format
ACCESS Zugriff auf die Datei(en)
ATTRIB Metadaten geändert
CLOSE_WRITE Zum Schreiben geöffnete Datei geschlossen
CLOSE_NOWRITE Schreibgeschützte Datei geschlossen
CREATE Neue Datei angelegt
DELETE Datei gelöscht
DELETESELF Überwachtes Verzeichnis gelöscht
MODIFY Datei modifiziert
MODIFYSELF Überwachtes Verzeichnis modifiziert
MOVEDFROM Datei aus dem überwachten Verzeichnis verschoben
MOVEDTO Datei ins überwachte Verzeichnis verschoben
OPEN Datei geöffnet

Die interne Schnittstelle zu Inotify dokumentiert die entsprechende Manpage, die Sie über man 7 inotify aufrufen. Als Anwender können Sie auf die Events nicht unmittelbar zugreifen. Dafür gibt es eine Reihe von Werkzeugen, mit deren Hilfe Sie in der Shell und in Skripten die entsprechenden Informationen auswerten. Zu den wichtigsten davon gehören:

  • Inotify-Tools: enthält mit Inotifywait und Inotifywatch zwei Tools für einfache Aufgaben.
  • Iwatch: ein sehr einfach anzuwendendes Werkzeug.
  • FsWatcher: ein komplexes Tool mit vielen Funktionen.
  • Inotail: eine Inotify-gesteuerte Version von Tail als Alternative zum Aufruf tail -F Datei.
  • Fsniper: ein konfigurationsgesteuerter Inotify-Monitor mit recht umständlicher Syntax.
  • Watchman: ein konfigurationsgesteuerter Inotify-Monitor mit zahlreichen Funktionen.
  • DirEvent: die GNU-kompatible, systemunabhängige Version.

Diese Reihe ließe sich noch mit weiteren Programmen fortsetzen, die Ähnliches bieten. Aber auch andere Anwendungen wie Cron (Incron) und Desktop-Suchmaschinen wie Beagle, Strigi und Recoll nutzen gern die Möglichkeit, sich mithilfe von Inotify über neue Dateien oder Änderungen informieren zu lassen, um diese dann zu indizieren.

Etwas weiter als die typischen Inotify-Programme geht DirEvent: Das GNU-Programm ist in der Lage, sowohl Inotify als auch alternative Mechanismen zu verwenden, um Änderungen am Dateisystem festzustellen. Allerdings lässt sich DirEvent nur über eine Konfigurationsdatei nutzen – von daher eignet sich das Programm nicht wirklich für den Einsatz auf der Befehlszeile oder in Skripten.

Inotify-Tools

Für den Einsatz auf der Befehlszeile und in Skripten eignen sich die Inotify-Tools – und dort insbesondere Inotifywait – sowie Iwatch am besten.

Inotifywait funktioniert wie folgt: Sie definieren die zu überwachenden Dateien und die auszuwertenden Events. Sobald eine entsprechende Situation auftritt, terminiert es, und ein Skript oder eine Shell-Funktion führt den nächsten Befehl aus. Der ruft dann die gewünschte Aktionen auf. Normalerweise kommt Inotifywait innerhalb einer Schleife zum Einsatz, um beliebig oft auf die Events reagieren zu können.

Ein typisches Skript dazu zeigt Listing 1. Dort überwacht modify die im ersten Argument ($1) übergebene Datei auf Änderungen. Der Vorteil dieser Methode: Bei Eintreffen des Events lassen sich beliebig viele Aktionen – hier das Sortieren eines Index und gegebenenfalls das Erstellen eines Glossars – ausführen.

Listing 1

#!/bin/bash
while date; do
  inotifywait -e modify "$1"
  makeindex -g -s k+g2.ist "${1%%.*}.idx"
  nice xelatex "$@"
done

Der Parameter "${1%%.*}.idx" nutzt die Bash-Routinen, um den Namen der Indexdatei aus dem Namen der überwachten Datei (mit der Endung .tex) zu erstellen. Nach Abschluss von Makeindex erfolgt ein erneutes Übersetzen des Quelltexts. Dem sehr einfach gehaltenen Skript fehlt insbesondere jegliche Fehlerbehandlung, etwa eine Prüfung der Eingabedatei oder eine Vorsorge für den Fall, dass Makeindex mit einem Fehler abbricht.

Optionen

Eine Reihe von Optionen steuert das genaue Verhalten von Inotifywait. So schränken -e Event oder --event Event ein, welche Events das Tool beachtet. Fehlt diese Angabe, wertet inotifywait alle Ereignisse aus. Die Option -t Zeit oder --timeout Zeit gibt die Wartezeit auf das Event in Sekunden ab. Nach Ablauf dieser Frist beendet sich das Programm, auch wenn der Event nicht auftrat.

Der Schalter -r oder --recursive überwacht Verzeichnisse inklusive aller Unterverzeichnisse. Diese Option sollten Sie mit Bedacht verwenden: Zum einen lösen eventuell ungewollte Änderungen versehentlich die Bearbeitung aus, zum anderen benötigt die Verwaltung von tief verzweigten Verzeichnisbäumen zusätzliche Ressourcen.

Die Option @Ausnahme(n) klammert die angegebenen Datei(en) bei der Beobachtung aus. Das ist insbesondere für automatisch erzeugte Dateien sinnvoll, beispielsweise für Backups. Ähnlich funktionieren --exclude Muster und --excludei Muster: Sie definiert Muster für zu ignorierende Dateinamen, im ersten Fall ohne und im zweiten unter Berücksichtigung der Schreibweise.

Die Option --fromfile Datei definiert die zu überwachenden Dateien über eine Datei mit den Pfaden. Der Schalter -m oder --monitor sorgt dafür, dass das Programm nicht mehr terminiert, sondern bis zum Eintreffen eines externen Signals (etwa kill pid) weiterarbeitet.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Da geht noch was!
    Das Standard-Bildformat JPEG gilt seit Jahren als brauchbarer Kompromiss zwischen Qualität und Quantität. Große Bildbestände geraten dennoch schnell aus den Fugen. Lepton hilft dabei, Platz zu sparen.
  • Automagie
    Magie: Sie laden eine Datei aus dem Internet herunter, und je nach Dateityp landet sie automatisch in Ihrer MP3-Sammlung, der Drucker gibt sie aus, oder der PC konvertiert sie ins PDF-Format. Das Tool "fsniper" ermöglicht diese Automatisierung.
  • Erbsenzählerei
    Ob Rsync, Integrit oder Aide – alle diese Werkzeuge beobachten den Verzeichnisbaum des Systems und schlagen Alarm, sobald sie dort unbefugte Veränderungen bemerken.
  • Schlanker Datei-Jongleur
    Komfortables Dateimanagement jenseits von Nautilus und Konqueror ist kein Ding der Unmöglichkeit. Das Programm Pcmanfm lockt mit schlanker Architektur und neuen Möglichkeiten.
  • Wo steht KDE 4.2?
    Das frisch erschienene KDE 4.2 sieht nicht nur toll aus, sondern bringt auch die von KDE 3 bekannten und geschätzten Fähigkeiten des K-Desktops wieder voll mit. Obendrein bietet KDE 4.2 aber noch viel mehr.
Kommentare

Infos zur Publikation

LU 02/2018: PAKETE VERWALTEN

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Internet abschalten
Karl-Heinz Hauser, 20.02.2018 20:10, 0 Antworten
In der Symbolleiste kann man das Kabelnetzwerk ein und ausschalten. Wie sicher ist die Abschaltu...
JQuery-Script läuft nicht mit Linux-Browsern
Stefan Jahn, 16.02.2018 12:49, 2 Antworten
Hallo zusammen, ...folgender goldener Code (ein jQuery-Script als Ergebnis verschiedener Exper...
XSane-Fotokopie druckt nicht mehr
Wimpy *, 30.01.2018 13:29, 1 Antworten
openSuse 42.3 KDE 5.8.7 Seit einem Software-Update druckt XSane keine Fotokopie mehr aus. Fehler...
TOR-Browser stürzt wegen Wikipedia ab
Wimpy *, 27.01.2018 14:57, 0 Antworten
Tor-Browser 7.5 based on Mozilla Firefox 52.8.0 64-Bit. Bei Aufruf von http: oder https://de.wi...
Wifikarte verhindert Bootvorgang
Maik Kühn, 21.01.2018 22:23, 1 Antworten
iwlwifi-7265D -26 failed to load iwlwifi-7265D -25 failed to load iwlwifi-7265D -24 failed to l...