Überwachung von Dateien und Verzeichnisänderungen unter Linux mit fswatch

Andreas Preuss
04-06-2018 13:20

fswatch ist ein einfacher plattformübergreifender Dateiänderungs-Monitor für die Befehlszeile, der Benachrichtigungen erält, wenn der Inhalt der angegebenen Dateien oder Verzeichnishierarchien geändert oder modifiziert werden. Er führt vier Arten von Überwachungen auf verschiedenen Betriebssystemen aus, wie z.B.:

  • Ein Monitor, der auf der Dateisystem-Ereignis-API von Apple OS X aufbaut.
  • Ein Monitor, der auf kqueue basiert, einer Benachrichtigungsschnittstelle, die in FreeBSD 4.1 ebenfalls auf vielen *BSD-Systemen, einschließlich OS X, unterstützt wird.
  • Ein Monitor, der auf der File Events Notification API des Solaris-Kernels und seiner Ausgründungen basiert.
  • Ein Monitor, der auf inotify basiert, einem Kernel-Subsystem, das Änderungen am Dateisystem von Anwendungen anzeigt.
  • Ein Monitor basierend auf ReadDirectoryChangesW, einer Windows-API, die Änderungen in einem Verzeichnis aufzeichnet.
  • Ein Monitor, der regelmäßig den Status des Dateisystems überprüft, die Änderungszeiten der Dateien im Speicher hält und Änderungen am Dateisystem manuell ermittelt (was überall funktioniert, wo stat verwendet werden kann).

Die Features von fswatch:
Es Unterstützt mehrere betriebssystemspezifische APIs und ermöglicht rekursive Verzeichnisüberwachung. Es führt Pfadfilterung durch, indem es reguläre Ausdrücke einschließt und ausschließt. Es unterstützt anpassbare Datensatzformate und periodische Leerlauf-Ereignisse.
So kann man fswatch in Linux-Systemen installieren:
Leider ist das fswatch-Paket nicht für die Installation aus den Standard-System-Repositories in allen Linux-Distributionen verfügbar. Die einzige Möglichkeit, die neueste Version von fswatch zu installieren, besteht darin, sich aus den Quellen die Applikation selbst zu kompilieren, wie in der folgenden Installationsanleitung beschrieben:

Zuerst die neueste fswatch tar Datei mit folgendem wget Befehl holen und wie gezeigt installieren:

$ wget https://github.com/emcrisostomo/fswatch/releases/download/1.11.3/fswatch-1.11.3.tar.gz
$ tar -xvzf fswatch-1.11.3.tar.gz
$ cd fswatch-1.11.3
$ ./configure
$ make
$ sudo make install 

Wichtig:
Sicherstellen, dass die GNU GCC (C und C++ Compiler) und Entwicklungswerkzeuge (auf Debian/Ubuntu) auf dem System installiert sind, bevor fswatch aus dem Quelltext kompiliert wird. Wenn nicht, wird es mit folgenden Befehlen auf den jeweiligen Linux-Distributionen installiert:

# yum group install 'Development Tools' [On CentOS/RHEL] 
# dnf group install 'Development Tools' [On Fedora 22+ Versions] 
$ sudo apt-get install build-essential [On Debian/Ubuntu Versions] 

Auf Debian/Ubuntu-Distributionen kann es beim Ausführen des Befehls fswatch zu folgendem Fehler kommen:

fswatch: error while loading shared libraries: libfswatch.so.6: cannot open shared object file: No such file or directory

Um dies zu beheben, muss man die Links und den Cache zu den dynamischen Bibliotheken aktualisieren, bevor fswatch verwendet werden kann. Dies erledigt man mit folgendem Befehl:

$ sudo ldconfig

Benutzung von fswatch unter Linux
Die allgemeine Syntax für die Ausführung von fswatch ist:

$ fswatch [option] [path]

Unter Linux wird empfohlen, den Standardmonitor inotify zu verwenden. Die verfügbaren Monitore können mit der Option -M oder - list-monitors aufgelistet werden:

$ fswatch -M
$ fswatch --list-monitors

Mit dem folgenden Befehl kann man Änderungen im aktuellen Verzeichnis z.B. /home/user verfolgen, wobei die Ereignisse alle 4 Sekunden an die Standardausgabe gesendet werden. Mit der Option -l oder --latency kann man die Latenzzeit in Sekunden einstellen, die Standardeinstellung ist 1 Sekunde.

$ fswatch -l 4 . 

fswatch - Änderungen im Home-Verzeichnis überwachen Dieser Befehl überwacht alle 5 Sekunden die Änderungen an der Datei /var/log/auth.log:

$ fswatch -l 5 /var/log/auth.log 

Mit der Option -t oder --timestamp wird der Zeitstempel für jedes Ereignis gedruckt, um die Uhrzeit im UTC-Format zu drucken, muss die Option -u oder --utf-time verwendet wwerden. Man kann die Zeit auch mit der Option -f oder --format formatieren:

$ fswatch --timestamp /var/log/auth.log

Als nächstes weist -x oder --event-flags fswatch an, die Ereignisflags neben dem Ereignispfad zu drucken. Man kann die Option -event-field-seperator verwenden, um Ereignisse mit dem entsprechenden Trennzeichen auszugeben.

$ fswatch --events-flags ~ /var/log/auth.log

Um den numerischen Wert eines Ereignisses auszugeben, das Änderungen im Heimatverzeichnis und der Datei /var/log/auth.log anzeigt, verwendet man die Option -n oder --numeric wie unten beschrieben:

$ fswatch --numeric ~ /var/log/auth.log

Weitere detaillierte Verwendungsmöglichkeiten und Informationen findet man in der fswatch-Manualseite:

$ man fswatch

oder direkt im fswatch Github Repository

Tags: BSD, Debian 9 Stretch, Linux, MAC OS X, Security
Durchschnittliche Bewertung: 4 (1 Abstimmung)

Es ist möglich, diese FAQ zu kommentieren.