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?


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.