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.