Il arrive fréquemment que l’on doive exécuter de manière répétée une commande ou un script pour suivre divers aspects du système, comme les processus actifs, l’utilisation de l’espace disque ou encore les connexions des utilisateurs. La commande Linux `watch` permet d’automatiser ces vérifications, évitant ainsi d’avoir à les lancer manuellement à chaque fois.
Cette commande offre la possibilité de surveiller en temps réel l’activité du système, englobant les connexions d’utilisateurs, l’état du réseau, l’utilisation de la mémoire et du processeur, l’espace disque, et bien plus encore. Examinons ensemble comment exploiter la commande `watch` sous Linux.
Qu’est-ce que la commande `watch` ?
La commande `watch` sous Linux permet d’exécuter une commande ou un programme spécifique de façon répétitive, à intervalles réguliers, tout en affichant son résultat dans le terminal. Cela facilite l’observation des changements en temps réel. L’affichage est mis à jour à chaque intervalle, remplaçant la sortie précédente. Par défaut, la commande se répète toutes les deux secondes et continue jusqu’à son interruption manuelle via la combinaison de touches Ctrl + C.
Syntaxe de la commande `watch`
La syntaxe de base de la commande `watch` est la suivante :
watch options <commande>
Diverses options de ligne de commande peuvent être utilisées avec `watch`. Sans option, la commande exécutera l’action spécifiée toutes les deux secondes. Par exemple, la commande suivante affichera le résultat de `ls` :
watch ls -l ~/
L’affichage présentera les modifications apportées au contenu du répertoire (création, suppression ou changement de taille d’un fichier), avec une actualisation toutes les deux secondes.
Exécuter une commande à intervalles définis avec `watch`
Il est possible de modifier l’intervalle d’actualisation de la commande `watch`. Ainsi, on peut lui indiquer d’attendre un nombre précis de secondes avant de relancer la commande. Pour ajuster l’intervalle, l’option `-n` est utilisée, suivie du délai en secondes.
watch -n
Par exemple, pour lancer une commande toutes les 5 secondes, exécutez :
watch -n 5 <commande>
Mettre en évidence les changements entre deux actualisations
Par défaut, la commande `watch` remplace l’affichage à chaque nouvelle actualisation. Avec l’option `-d`, il est possible de mettre en évidence les différences entre la sortie précédente et la sortie actualisée.
watch -d
Supprimer l’en-tête de la sortie de la commande `watch`
Par défaut, la commande `watch` affiche un en-tête en haut de chaque affichage, contenant l’intervalle de mise à jour, le nom de la commande, ainsi que la date et l’heure actuelles du système. L’option `-t` permet de supprimer cet en-tête :
watch -t <commande>
Émettre un signal sonore en cas d’erreur
Lorsqu’un processus Linux termine son exécution, il renvoie un code de sortie. La valeur est généralement 0 en cas de succès, et une valeur non nulle en cas d’erreur. L’option `-b` de la commande `watch` émet un bip sonore si la commande retourne un code de sortie différent de zéro.
Par exemple, pour surveiller l’état de `sshd.service` et être averti en cas d’arrêt du service, utilisez :
watch -b sudo systemctl status sshd.service
Cette commande émettra un bip lorsque le service s’arrêtera. Le signal cessera lorsque le service sera de nouveau actif. Pour tester cela, ouvrez un autre terminal et arrêtez le service. Des bips seront émis en continu jusqu’à ce que le service soit relancé. Notez que le paquet `beep` doit être installé sur votre système pour utiliser cette fonctionnalité.
Arrêter `watch` lors d’un changement de sortie
Il est également possible de configurer la commande `watch` pour qu’elle s’arrête automatiquement dès qu’un changement est détecté dans le résultat de la commande surveillée. Cela se fait grâce à l’option `-g`. Cette option est particulièrement utile pour des scénarios où l’on attend des changements spécifiques dans la sortie.
Dès que la sortie est modifiée, la commande `watch` s’arrête. On peut coupler cette option avec la commande `echo` pour afficher un message à l’écran.
Par exemple, imaginons que l’on attende l’arrivée d’un fichier dans un répertoire. La commande suivante surveillera le répertoire. Dès que le fichier sera présent, `watch` s’arrêtera et le message « fichier arrivé » s’affichera :
watch -g "ls -l | grep filename" && echo "file arrived"
Un autre exemple utile serait de recevoir une notification lors de la connexion d’un utilisateur spécifique :
watch -g "who | grep username" && echo "username logged in"
Cette commande surveillera la sortie de la commande `who`, qui liste les utilisateurs connectés. Lorsque l’utilisateur cible se connectera, `watch` s’arrêtera et affichera un message dans le terminal.
De même, il est possible de configurer `watch` pour qu’elle arrête un service lors de modifications sur un fichier. Il est essentiel de noter que lors de l’utilisation de chaînes de commandes avec redirection, la totalité de la commande doit être placée entre guillemets.
Surveillance de l’activité du système Linux
Si vous effectuez fréquemment la même opération, l’utilisation de la commande `watch` pour automatiser cette tâche est fortement recommandée. Cela évite d’avoir à saisir sans cesse des commandes pour observer les changements.
La commande `watch` peut être combinée avec d’autres commandes Linux pour surveiller les ressources et l’activité du système, ainsi que pour suivre les modifications apportées aux fichiers ou répertoires.