Je suis nouveau dans la commande dnotify/inotify. Quelqu'un peut-il m'aider à écrire un script de telle sorte qu'il surveille en permanence un répertoire et indique qu'il y a un changement ou une modification.
Inotify lui-même est un module du noyau accessible via les appels de par ex. un programme C. http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/
Il existe une suite d'applications appelée inotify-tools, qui contient:
inotifywait - attend les modifications des fichiers avec inotify
et
inotifywatch - collecte des statistiques d'accès au système de fichiers à l'aide d'inotify
Vous pouvez utiliser inotify directement à partir de la ligne de commande, par exemple comme ceci pour surveiller en permanence toutes les modifications dans le répertoire personnel (peut générer beaucoup de sortie):
inotifywait -r -m $HOME
Et voici un script qui surveille en permanence et réagit à l'activité du journal Apache, copié à partir du fichier man d'inotifywait:
#!/bin/sh
while inotifywait -e modify /var/log/messages; do
if tail -n1 /var/log/messages | grep httpd; then
kdialog --msgbox "Apache needs love!"
fi
done
Voici ce que j'utilise pour voir les opérations sur un fichier individuel. "-m" provoque la surveillance par rapport à la sortie après un seul événement. Pour obtenir des horodatages, vous avez besoin d'au moins la version 3.13 des outils inotify, mais si cela n'est pas important (ou non disponible sur votre système d'exploitation ou difficile à mettre à jour), vous pouvez ignorer les options timefmt et format. "cat /etc/resolv.conf" dans un autre Shell conduit aux résultats ci-dessous:
$ inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' /etc/resolv.conf
Setting up watches.
Watches established.
12:49 /etc/resolv.conf OPEN
12:49 /etc/resolv.conf ACCESS
12:49 /etc/resolv.conf CLOSE_NOWRITE,CLOSE
inotifywait a également des options pour surveiller les répertoires, donc consultez la page de manuel. Ajoutez -r pour récursif pour surveiller les enfants d'un dir.
Voici un exemple avec les commandes que j'ai tapées dans une fenêtre différente affichée avec le préfixe "->":
$ inotifywait -mr --timefmt '%H:%M' --format '%T %w %e %f' /home/acarwile/tmpdir
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
-> cd into directory, no info
-> ls in directory
13:15 /home/acarwile/tmpdir/ OPEN,ISDIR
13:15 /home/acarwile/tmpdir/ CLOSE_NOWRITE,CLOSE,ISDIR
-> touch newfile
13:16 /home/acarwile/tmpdir/ CREATE newfile
13:16 /home/acarwile/tmpdir/ OPEN newfile
13:16 /home/acarwile/tmpdir/ ATTRIB newfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE newfile
-> mv newfile renamedfile
13:16 /home/acarwile/tmpdir/ MOVED_FROM newfile
13:16 /home/acarwile/tmpdir/ MOVED_TO renamedfile
-> echo hello >renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ OPEN renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile
-> touch renamedfile
13:17 /home/acarwile/tmpdir/ OPEN renamedfile
13:17 /home/acarwile/tmpdir/ ATTRIB renamedfile
13:17 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile
-> rm renamedfile
13:17 /home/acarwile/tmpdir/ DELETE renamedfile
-> cd ..; rmdir tmpdir
13:17 /home/acarwile/tmpdir/ DELETE_SELF
Après ce qui précède, j'ai essayé de refaire le tmpdir ("mkdir tmpdir") mais je n'en ai pas obtenu de sortie. Le nouveau tmpdir n'est pas le même répertoire que l'ancien tmpdir. Il est temps de juste ^ C et de l'arrêter notifier attendre.
Comme je l'ai dit sur https://superuser.com/a/747574/28782 , j'ai créé un script d'aide qui utilise inotifywait sans certaines de ses limitations directes: - inotifyexec
Exemple d'utilisation (en supposant que vous l'avez ajouté dans votre chemin système en tant qu'exécutable):
inotifyexec "echo test" -r .