Wie werde ich benachrichtigt, wenn eine bestimmte Datei unter Linux gelöscht wird?

2

Ich suche nach einer Möglichkeit, eine Datei zu überwachen und ein Ereignis auszulösen, sobald die Datei entfernt wurde. Sobald es entfernt wurde, ersetze / kopiere ich eine neue Datei und starte den Monitor erneut.

Z.B

watch "/tmp/fileToMonitor.txt"

// file deleted by some process
cp new_file "/tmp/fileToMonitor.tx"

// watch file again (repeat same steps..)

Wie kann ich das mit einem Bash-Skript machen? Ist das möglich?

user797717
quelle
Da ist es auditd. Recherchiere danach.
Larssend,
Auch Forschung inotify
Cybernard

Antworten:

4

Sie können dies mit dem inotifywaitDienstprogramm (aus dem inotify-toolsPaket, mindestens unter Debian) tun .

inotifywaitkann Ereignisnamen als Argumente verwenden und warten, bis sie in einer überwachten Datei oder einem überwachten Verzeichnis auftreten, bevor sie zurückgegeben werden. In Ihrem Fall müssten Sie das delete_selfEreignis verwenden, um anzugeben, dass das Programm zurückkehren soll, wenn die überwachte Datei gelöscht wird.

Wenn Sie also eine neue Datei kopieren /tmp/fileToMonitor.txtmöchten, sobald diese entfernt wurde, gehen Sie wie folgt vor:

inotifywait -e delete_self "/tmp/fileToMonitor.txt" && cp new_file "/tmp/fileToMonitor.txt"

Wenn Sie die Überwachung erneut starten möchten, können Sie dies in eine Schleife einfügen:

while true ; do
  inotifywait -e delete_self "/tmp/fileToMonitor.txt" \
    && cp new_file "/tmp/fileToMonitor.txt"
done
Qeole
quelle
Toll. Danke. Genau das, wonach ich gesucht habe.
user797717
Gern geschehen :) Die modifyVeranstaltung ist übrigens sehr praktisch, um Ihre Dateien bei Änderungen neu zu kompilieren. Im Allgemeinen benutze ich dieses Tool dafür.
Qeole