Monitorare i cambiamenti in una directory in Linux

Recentemente mi è capitato di dover tenere sotto controllo le modifiche fatte in una directory nella mia home. Per questo scopo mi sono servito di inotifywait presente nel pacchetto inotify-tools. Questo programma restituisce proprio le informazioni che mi servivano, ad esempio:

/path/to/dir/.git/objects/info/ CREATE commit-graph.lock
/path/to/dir/.git/objects/info/ MODIFY commit-graph.lock
/path/to/dir/.git/ DELETE gc.pid
/path/to/dir/.git/ CREATE index.lock
/path/to/dir/.git/ DELETE index.lock
/path/to/dir/.git/refs/remotes/origin/ CREATE master.lock
/path/to/dir/.git/refs/remotes/origin/ MODIFY master.lock
/path/to/dir/.git/logs/refs/remotes/origin/ MODIFY master

La directory sotto controllo era /path/to/dir/, comprese le sue sotto directory, e — com’è evidente — su ogni riga il programma mostra in sequenza:

  • la directory dov’è avvenuta la modifica;
  • l’azione eseguita;
  • il file interessato.

Installazione

Installiamo anzitutto il pacchetto inotify-tools:

sudo pacman -Syu inotify-tools

Esecuzione

Eseguiamo inotifywait:

inotifywait -m -r -e modify,create,delete /percorso/alla/directory

Le opzioni fornite significano:

-m (o anche --monitor)
Rimane in ascolto delle modifiche;
-r (o anche --recursive)
Controlla anche le sotto directory;
-e (o anche --event)
Controlla quali eventi deve monitorare. Se non specificato, controlla tutti gli eventi.

Nel manuale di inotifywait possiamo vedere quali siano gli eventi disponibili per il monitoraggio:

Evento Descrizione
access file or directory contents were read
attrib file or directory attributes changed
close file or directory closed, regardless of read/write mode
close_nowrite file or directory closed, after being opened in read-only mode
close_write file or directory closed, after being opened in writable mode
create file or directory created within watched directory
delete file or directory deleted within watched directory
delete_self file or directory was deleted
modify file or directory contents were written
move file or directory moved to or from watched directory
moved_from file or directory moved from watched directory
moved_to file or directory moved to watched directory
move_self A watched file or directory was moved.
open file or directory opened
unmount file system containing file or directory unmounted

Tabella 1. Gli eventi disponibili in inotifywait per il monitoraggio.