Terminal, ligne de commande, shell et console : sont-ils vraiment différents ?
Avez-vous déjà appelé le « terminal » un « shell » ou une « ligne de commande » ? Même si vous n'avez pas tort de le faire, il y a sont différences distinctes entre ces termes. Je vais plonger dans ces différences et l'origine des termes ; combien pouvez-vous obtenir correctement ?
Sommaire
Qu'est-ce qu'un terminal ?
Le mot « terminal » est l'abréviation de « émulateur de terminal », un programme qui imite le comportement des terminaux informatiques physiques à l'ancienne. Au début de l’informatique, les utilisateurs interagissaient avec des ordinateurs distants via des terminaux matériels dédiés via une liaison de communication. Ces terminaux étaient équipés d'un clavier et d'un écran, ou dans certains cas, d'une imprimante. Les utilisateurs utiliseraient des terminaux pour envoyer des commandes et afficher le texte.
La vidéo précédente montre un terminal informatique DEC VT100 connecté à un ordinateur central restauré.
Lorsque les ordinateurs personnels se sont répandus, les systèmes d'exploitation ont commencé à émuler les terminaux matériels sous forme de logiciels. Cela a permis aux utilisateurs d'interagir avec des systèmes distants sans avoir besoin de matériel de terminal physique. Aujourd’hui, l’héritage des terminaux physiques se poursuit grâce aux émulateurs de terminaux, que nous utilisons de manière très similaire.
Un émulateur de terminal vous permet d'envoyer des commandes et de recevoir du texte vers et depuis un ordinateur ; la borne fenêtre est le conteneur graphique qui l'entoure. Ainsi, techniquement parlant, la définition courante et moderne du mot « terminal » sous Linux ne fait pas référence à la fenêtre elle-même mais à un périphérique simulé pour envoyer des commandes et recevoir du texte.
Si cela vous intéresse, nous avons deux articles sur l'histoire du terminal. L'un couvre les trois époques des terminaux Unix et un autre couvre la progression de l'impression vers les terminaux vidéo.
Qu'est-ce qu'une coque ?
Un shell est la couche la plus externe d’un système qui facilite l’interaction de l’utilisateur. Dans un système d'exploitation, le shell peut prendre la forme d'une interface de ligne de commande ou d'une interface utilisateur graphique (GUI). Il fonctionne généralement comme un programme d'espace utilisateur qui communique avec le système via des canaux d'espace utilisateur standard, plutôt que d'interagir directement avec le noyau.
L'espace utilisateur est l'environnement d'exécution des processus non privilégiés. Toutes vos applications typiques (même les applications racine) s'exécutent dans l'espace utilisateur. L'espace noyau est réservé au code privilégié et dispose d'un pouvoir absolu sur le reste du système et d'un accès direct au matériel, par exemple aux pilotes ou aux composants du noyau.
Dans le langage Linux courant, le shell désigne généralement un interpréteur de ligne de commande qui accepte les commandes et les scripts pour effectuer des tâches sur le système d'exploitation. C'est un programme qui lit et comprend les commandes et les exécute. Des exemples de shells typiques sous Linux sont Bash, Zsh et fish. Chacun de ces shells a sa propre manière de traiter les commandes et d'exécuter des scripts.
Vous avez peut-être également entendu parler du shell Gnome ; Il s'agit d'un exemple de shell graphique avec lequel les utilisateurs s'interfacent pour contrôler le système, par exemple pour créer et supprimer des fichiers, etc. Un shell graphique sous Linux s'interfacera avec le système de fenêtrage et prendra la forme de menus, de fenêtres et d'autres fonctions de bureau.
Qu'est-ce qu'une ligne de commande ?
Une ligne de commande (CLI ou interface de ligne de commande) est simplement un endroit pour saisir des commandes dans un système, généralement via un shell de commande. C'est un terme universel, et une ligne de commande peut exister dans le cadre d'un système d'exploitation ou même d'un programme. Les gens confondent souvent ce terme avec d’autres termes étroitement liés, comme le terminal ou le shell, mais il a une signification distincte. Cette distinction ne vous empêchera pas de dormir la nuit avec inquiétude, mais elle existe.
Deux exemples courants de ligne de commande sont les lignes de texte que vous saisissez dans Bash ou Zsh.
Un autre exemple de ligne de commande se trouve dans Emacs, qui vous permet de saisir des commandes à la volée en utilisant Elisp.
Qu'est-ce qu'une console ?
La console Linux est un sous-système d'entrée/sortie fourni avec le noyau Linux. Il reçoit des messages et permet l'interaction avec le noyau.
La différence entre la console Linux et un émulateur de terminal réside dans le fait que le pilote de la console Linux s'exécute dans l'espace du noyau, affiche les messages système et permet une interaction directe avec le système Linux. D'un autre côté, les émulateurs de terminaux ne sont que des programmes permettant d'envoyer des commandes et de recevoir des réponses et s'exécutent entièrement dans l'espace utilisateur. La console Linux possède également beaucoup moins de fonctionnalités modernes que les émulateurs de terminal.
La console Linux gère des terminaux virtuels appelés TTY (alias consoles virtuelles). Vous pouvez interagir avec la console Linux via ces TTY, trouvés dans /dev/tty*, où « * » est un nombre. De même, les émulateurs de terminaux s'interfacent avec des pseudo-terminaux situés dans le répertoire /dev/pts/ (par exemple, /dev/pts/0, /dev/pts/1, etc.).
TTY signifie téléscripteur. Historiquement, il s'agissait d'appareils électromécaniques, un peu comme les machines à écrire, capables d'envoyer et de recevoir des messages électroniques via une ligne de communication (telle qu'un téléphone, un télégraphe ou une ligne série). Ces appareils remontent à l’ère du télégraphe (une mise à niveau du code Morse). Les systèmes Linux modernes les imitent.
Les vidéos précédentes montrent un téléimprimeur connecté à un serveur Linux via une ligne série. L'utilisateur émet des commandes et reçoit des sorties de la console Linux via des nœuds de périphérique TTY série (par exemple, /dev/ttyS0).
Grâce à un mécanisme ou à un autre, les consoles virtuelles et les émulateurs de terminaux exécutent un shell, généralement Bash. Les obus peuvent donner l’impression qu’ils se ressemblent, mais leurs contextes opérationnels sont très différents.
Vous pouvez accéder à un ATS via Ctrl+Alt+F*, où « * » est un nombre (1-7). Les distributions Linux configurent généralement TTY1 pour lancer le gestionnaire d'affichage (écran de connexion), qui à son tour lancera votre shell graphique (c'est-à-dire un environnement de bureau). Les numéros 2 à 7 sont généralement disponibles, mais le retour à TTY1 vous ramènera à votre bureau.
Utilisez la commande suivante pour voir à quelle console virtuelle votre session de connexion est attachée.
loginctl session-status
Ma session actuelle se connecte à vc1 (alias console virtuelle 1 ou TTY1) comme indiqué dans l'image précédente.
En bref, la console Linux est un sous-système d'entrée/sortie au niveau du noyau qui peut être contrôlé via une console virtuelle. Ces appareils TTY ont des racines historiques et imitent les appareils de téléscripteur. Il est toujours possible d'envoyer et de recevoir des commandes vers le noyau Linux via des téléimprimeurs.
Les gens confondent souvent ces termes, mais ils présentent des distinctions techniques claires. Par exemple, la CLI pourrait à juste titre désigner le terminal ou la console. La coquille pourrait signifier n’importe lequel de ces termes. Souvent, les gens disent « ouvrir un shell », mais ce qu’ils veulent réellement dire, c’est ouvrir un terminal. Cependant, vous pouvez également accomplir la tâche désignée via une console virtuelle.
L'expression correcte à utiliser est « fenêtre de terminal » pour la plupart des utilisateurs. Vous ouvrez une fenêtre graphique et exécutez des commandes. L'expression « CLI » est également valide car elle peut désigner n'importe quelle interface de commande (y compris un mini-tampon Emacs). Cependant, si quelqu'un vous demande d'ouvrir une console, c'est une demande très spécifique, et vous devez donc faire attention à la raison.
Maintenant que vous connaissez la différence entre les différents termes, vous pourriez être intéressé par l'apprentissage du terminal Linux en tant que débutant.
