Wie kann ich einen ganzen Verzeichnisbaum auf Änderungen in Linux ( ext3- Dateisystem) überwachen ?
Derzeit enthält das Verzeichnis ungefähr eine halbe Million Dateien in ungefähr 3.000 Unterverzeichnissen , die in drei Verzeichnisebenen organisiert sind.
Dies sind meist kleine Dateien (<1 KB, einige wenige bis zu 100 KB). Es ist eine Art Warteschlange, und ich muss wissen, wann Dateien innerhalb von 5-10 Sekunden erstellt, gelöscht oder deren Inhalt geändert wird.
Ich weiß, dass es Inotify und Sortierungen gibt, aber AFAIK überwacht nur ein einziges Verzeichnis, was bedeutet, dass ich in meinem Fall 3.000 Inotify-Handles benötigen würde - mehr als die üblichen 1024 Handles, die für einen einzelnen Prozess zulässig sind. Oder liege ich falsch?
Für den Fall, dass das Linux-System mir nicht sagen kann, was ich brauche: Vielleicht gibt es ein FUSE- Projekt, das ein Dateisystem simuliert (alle Dateizugriffe auf ein reales Dateisystem repliziert) und alle Änderungen separat protokolliert (nicht möglich)?
folder_sub
Infolder_main
, Erstellungfolder_sub_sub
infolder_sub
, Inotify vonfolder_main
Ankünften, Uhr ist eingeschaltetfolder_sub
, wird aberfolder_sub_sub
bereits übersehen, und daher ist weiterhin keine Uhr darauf installiert?Ich habe etwas Ähnliches mit dem
inotifywait
Tool gemacht:Dadurch werden rekursive Verzeichnisüberwachungen für den gesamten Baum eingerichtet und Sie können einen Befehl ausführen, wenn sich etwas ändert. Wenn Sie nur die Änderungen anzeigen möchten, können Sie das
-m
Flag hinzufügen , um es in den Überwachungsmodus zu versetzen.quelle
while loop
verwenden Sie-m
oder--monitor
switch / option / flag / arg. Ich weiß nicht, wann dieser 'Schalter' entstanden ist, aber er ist besser als Schleifenmove
Ereignis hinzufügen :inotifywait -e modify,create,delete,move -r /path/to/your/dir
Dieser Befehl reicht aus, um das Verzeichnis rekursiv auf alle Ereignisse wie Zugriff, Öffnen, Erstellen, Löschen ... zu überwachen.
quelle
inotify ist die beste Option, wenn Sie viele Unterverzeichnisse haben, aber wenn nicht, bin ich es gewohnt, diesen Befehl unten zu verwenden:
watch -d find <<path>>
quelle
watch
Paging ist nicht zulässig, daher geht alles verloren, was länger als die Terminalhöhe ist (z. B.tree
Befehle mit Anzahl der Dateien> Anzahl der Terminalzeilen)Verwenden Sie inotifywait von inotify-tools:
sudo apt install inotify-tools
Erstellen Sie nun ein Skript
myscript.sh
, das auch versteckte Dateien und Ordner enthält:Machen Sie das Skript ausführbar mit
chmod +x myscript.sh
Führen Sie es mit
./myscript.sh /folder/to/monitor
Wenn Sie kein Argument angeben, wird standardmäßig das Arbeitsverzeichnis verwendet.
Sie können auch mehrere Befehle ausführen, die
&& \
am Ende des vorherigen Befehls hinzugefügt werden, um den nächsten hinzuzufügen:Wenn Sie keinen Befehl für Ereignisse ausführen möchten, führen Sie den Befehl einfach direkt mit dem
-m
Modifikator aus, damit er nicht geschlossen wird:inotifywait -e modify,create,delete,move -m -r /path/to/your/dir
quelle
Sollte Fanotify diese Fähigkeit nicht irgendwann bieten? Zitat LWN :
„ Fanotify hat zwei grundlegende 'Modi', die gerichtet und global sind. [...] fanotify global zeigt stattdessen an, dass alles auf dem System vorhanden sein soll, und markiert dann einzeln Inodes, die ihm egal sind. ”
Ich verlor jedoch den Überblick über den neuesten Status.
quelle
Ich habe einen anderen Vorschlag, nur für Änderungen in den Dateien und zum Aufzeichnen von Verlaufsänderungen
benutze git
cd /folder_to_monitor git init git add * git commit -m "first snapshot"
Also, nachdem Sie die Änderungen vorgenommen haben
quelle
Speziell für große oder komplexe Überwachungsaufgaben , in dem Sie auf Triggerereignisse wollen auf das, was Sie sehen, Watchman Ein Dateidienst beobachten . Hier ist ein einfaches Beispiel, um ein Tool namens minify-css auszuführen, wenn eine CSS-Datei geändert wird:
Es führt eine umfassende Protokollierung durch, kann mehrere Uhren, die sich in einer Verzeichnisstruktur überschneiden, effizient verarbeiten, kann über die Befehlszeile oder über JSON verwaltet werden und vieles mehr. Siehe auch
Es ist über Debian Sid und Ubuntu 20.04 erhältlich und hat es fast zweimal in Fedora geschafft, soweit ich es sehen kann ( 1450590 und 1564720 ).
quelle