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.