Que se passe-t-il lorsque vous exécutez une commande sous Linux ?
La plupart des utilisateurs de Linux ignorent souvent le fonctionnement interne du système d'exploitation. Vous exécutez peut-être des commandes Linux sur le shell depuis longtemps, mais vous êtes-vous déjà demandé ce qui se passe dans les coulisses lorsque vous appuyez sur Entrée ?
À la fin, vous aurez une brève compréhension de la façon dont le shell traite la commande tapée sous Linux.
Traitement de la commande
Lorsque vous entrez une commande, la première chose que fait le shell est de diviser la commande entière en « jetons ». Le shell recherchera alors un nom de programme appartenant au premier jeton de la ligne de commande.
S'il ne le trouve dans aucun des répertoires du chemin de recherche défini dans la variable d'environnement $PATH ou dans le répertoire local avec l'opérateur . , ou s'il ne s'agit pas d'un alias ou d'une fonction shell, le shell donnera une erreur . S'il trouve une commande valide, le shell passera alors en revue chacun des autres jetons et décidera s'il s'agit d'une variable, d'un paramètre de shell ou d'un argument de la commande.
Si le shell détermine qu'il s'agit d'une variable ou d'un paramètre comme l'opérateur ~ pour le répertoire personnel, le shell les développera ou les remplacera par leurs valeurs d'origine dans la commande.
Lorsque le shell a développé des paramètres ou des variables, il transmet la chaîne de commande à la commande, en exécutant le programme avec ses arguments. Le shell ne détermine pas si des arguments sont valides. C'est le travail du commandement.
Exécuter la commande
Lorsque le shell lance une autre commande, comment revient-il à la même invite que vous utilisiez auparavant ? Le shell fait une copie de lui-même, un processus appelé forking. Cette copie du shell se remplace par la commande, avec tous les arguments qui ont été traités précédemment. C'est ce qu'on appelle un « exec » et le processus combiné est appelé « fork-and-exec ».
Par exemple, lorsque vous exécutez la commande ls , le processus shell se fork lui-même à l'aide de la méthode fork() et crée une autre instance shell. Sur les deux processus shell exécutés sur le système, le shell supplémentaire exécutera ls à l'aide de la fonction exec() , se transformant en une instance de la commande ls.
Pendant ce temps, le shell d'origine attend la fin de la commande. C'est pourquoi vous pouvez utiliser le contrôle des tâches pour suspendre des tâches et exécuter des tâches en arrière-plan dans le shell.
Signaler l'état de sortie
Les commandes Linux indiquent si elles ont été exécutées avec succès ou non via leur état de sortie. Comme son nom l'indique, les programmes signalent leur état de sortie lorsqu'ils ont fini de s'exécuter. Ils le font à travers le $? variable d'environnement, qui contient l'état de sortie de la dernière commande exécutée.
Par convention, un état de sortie de 0 indique une exécution réussie, tandis que tout autre que 0 signifie généralement une erreur. Votre shell peut également indiquer un état de sortie différent de zéro sur la ligne de commande en fonction de la configuration de votre invite.
La capture d'écran ci-dessus est un exemple montrant une invite Zsh personnalisée qui affiche un état de sortie d'erreur de 127 en raison d'une commande qui n'existe pas.
Vous savez maintenant comment fonctionnent les commandes Linux
Maintenant que vous savez comment le shell Linux traite une commande, fork et exécutez lui-même, et comment les programmes signalent leur état de sortie, vous pouvez utiliser la ligne de commande plus efficacement.
Plusieurs shells Linux sont disponibles gratuitement pour les utilisateurs. Bien que chacun d'eux effectue plus ou moins le même travail, ils sont différents à bien des égards. Vous pouvez essayer d'installer certains des shells sur votre système et décider vous-même lequel vous convient le mieux.