Comment utiliser les codes de sortie Linux pour dépanner votre système Linux

Les codes de sortie, également connus sous le nom de codes de retour ou d’états de sortie, sont des signaux numériques qu’un programme, une commande ou un script renvoie au système d’exploitation (ou au processus appelant) lorsqu’il a fini de s’exécuter. Vous n’avez pas besoin de fouiller dans des fichiers journaux potentiellement longs pour diagnostiquer un échec - un code de sortie fournit souvent un indice rapide sur la nature du problème.
La convention universellement acceptée est que lorsqu’un programme s’exécute avec succès, il renvoie un code de sortie de 0. Tout autre nombre, généralement dans la plage standard de 1 à 255, indique qu’il y a eu un problème.
La façon la plus simple de vérifier le code de sortie de la dernière commande au premier plan exécutée dans des shells de type Unix (comme Bash ou Zsh) est d’inspecter la variable spéciale du shell $?. Par exemple, exécutez d’abord une commande quelconque, puis vérifiez son code de sortie :
ls/nonexistent_directory
echo$?
La commande echo $? affiche le code de sortie numérique stocké dans la variable $?. Si vous voyez 0, cela signifie que la commande précédente s’est terminée avec succès. Une valeur non nulle comme 1, 2 ou 127 indique une erreur, et le nombre spécifique donne un indice sur le type de problème - peut-être un fichier manquant, un répertoire inexistant ou des permissions insuffisantes.
Déboguer votre script avec des codes de sortie
Les codes de sortie sont particulièrement utiles lorsque vous écrivez des scripts shell. Ils aident votre script à déterminer si quelque chose s’est bien passé ou non, lui permettant de décider quoi faire ensuite.
Voici un exemple simple qui copie un fichier dans un dossier de sauvegarde et signale si la copie a réussi :
#!/bin/bash
# Essayer de copier le fichier
cp important_file.txt backup/
# Vérifier si la copie a réussi en utilisant le code de sortie ($? contient le code de sortie de la dernière commande)
if[$?-eq0]; then
echo"Sauvegarde réussie!"
else
echo"Échec de la sauvegarde avec le code de sortie $?"
exit1# Quitter le script avec un code d'erreur pour indiquer qu'il y a eu un problème.
fiLorsque la commande cp s’exécute, elle renvoie un code de sortie. Un code de sortie de 0 signifie que tout s’est bien passé. Si le code n’est pas 0, quelque chose a mal tourné - et le script imprime un message d’erreur et quitte avec un code de 1.
Définir vos propres codes de sortie
En plus de vérifier les codes de sortie des commandes, vous pouvez définir vos propres codes de sortie pour indiquer différents types d’erreurs. Cette pratique rend vos scripts plus informatifs, permettant à quiconque les utilisant de comprendre exactement quel type de problème s’est produit.
Considérez ce script :
#!/bin/bash
# Vérifier qu'un argument (nom de fichier) est fourni.
if[-z"$1"]; then
echo"Utilisation : $0 "
exit1# Le code de sortie 1 indique qu'aucun argument n'a été fourni.
fi
# Vérifier si le fichier fourni en tant que premier argument existe.
if[!-f"$1"]; then
echo"Erreur : Fichier non trouvé"
exit2# Le code de sortie personnalisé 2 indique que le fichier n'a pas été trouvé.
fiSi quelqu’un exécute votre script et qu’il échoue, il peut se référer au code de sortie pour déterminer l’erreur exacte. Dans cet exemple, le code de sortie 1 signale que l’utilisateur n’a pas fourni un argument requis, tandis que le code de sortie 2 indique explicitement que le fichier n’a pas été trouvé. Cette approche structurée est particulièrement utile lorsque votre script fait partie d’un système plus vaste ou lorsqu’un autre script dépend de sa sortie.
Liste des codes de sortie courants
Bien que différents programmes puissent définir leurs propres codes de sortie, il existe certains modèles communs que vous verrez dans de nombreux outils en ligne de commande - en particulier dans les systèmes Linux et de type Unix. Voici quelques-uns des codes les plus fréquemment rencontrés :
- 0 : Tout va bien ! Le programme s’est exécuté sans aucun problème.
- 1 : Quelque chose a mal tourné, mais l’erreur n’est pas spécifique. C’est comme le code de sortie fourre-tout.
- 2 : Mauvaise utilisation des commandes internes du shell. Cela peut se produire si vous utilisez une commande incorrectement, comme oublier des paramètres requis.
- 126 : La commande existe, mais vous n’avez pas la permission de l’exécuter.
- 127 : Commande introuvable. Cela signifie que la commande n’existe pas ou n’est pas dans le chemin du système. Vérifiez votre orthographe.
- 128 : Argument de sortie invalide. Vous avez utilisé un nombre qui n’a pas de sens en tant que code de sortie.
- 130 : Programme terminé par Ctrl + C. Cela se produit lorsque vous arrêtez manuellement un programme.
- 137 : Condition de manque de mémoire (OOM).
- 255 : Le programme a essayé de renvoyer un code de sortie en dehors de la plage valide.
Certains programmes spécifiques ont leurs propres codes de sortie uniques. Par exemple, grep renvoie 0 lorsqu’il trouve des correspondances, 1 lorsqu’il ne trouve aucune correspondance, et 2 lorsqu’il y a une erreur. De plus, les développeurs peuvent techniquement utiliser presque n’importe quel nombre (généralement de 0 à 255 sur les systèmes de type Unix).
Chaîner des commandes en fonction du succès ou de l’échec
Bash fournit également deux opérateurs pratiques && et || qui vous permettent de chaîner des commandes en fonction de si la précédente a réussi ou échoué :
- && (opérateur ET) : Exécute la commande suivante uniquement si la précédente a réussi (code de sortie 0).
- || (opérateur OU) : Exécute la commande suivante uniquement si la précédente a échoué (code de sortie non nul).
Par exemple, supposons que vous souhaitiez créer un répertoire puis y accéder immédiatement. Si la création du répertoire échoue ou si l’accès échoue, vous voudrez peut-être afficher un message d’erreur :
mkdir new_directory &&cd new_directory ||echo"Échec de la création et de l'accès au répertoire"Ici, mkdir new_directory essaie de créer le dossier. Si cela fonctionne, le code exécute immédiatement cd new_directory. Si l’une ou l’autre étape échoue, l’opérateur || s’active et imprime le message d’erreur.
Dernières réflexions
Les codes de sortie peuvent sembler un petit détail, mais ils font partie de ce qui rend les outils en ligne de commande si puissants. Ils créent un langage commun pour que les programmes communiquent sur le succès et l’échec, ce qui est essentiel pour construire des systèmes complexes.
Si vous êtes nouveau dans le travail en ligne de commande, commencez par prendre l’habitude de vérifier echo $? lorsque les commandes ne se comportent pas comme prévu. Bientôt, vous utiliserez des codes de sortie dans vos propres scripts et apprécierez ce système de communication simple mais efficace.