La différence entre le terminal, la console et le shell

Table des matières

Quand on s’aventure dans le monde informatique, on rencontre souvent les termes “terminal”, “console” et “shell”, qui semblent être utilisés de façon plus ou moins interchangeable. Est-ce que c’est vraiment le cas ? Et sinon, quelle est la différence entre tous ces termes ?

Pour pouvoir comprendre les subtilités de ces termes, on va devoir retourner à l’aube même de l’informatique.

Le terminal

Le terminal, c’est simplement une extrémité, un “terminus” d’un réseau informatique. C’est un appareil physique doté d’une entrée et d’une sortie.

Les tous premiers ordinateurs, dépourvus d’écran, utilisaient un téléscripteur comme périphérique d’entrée-sortie. Le téléscripteur (en anglais “teletypewriter”, souvent abrégé “TTY”) était donc le premier terminal. A la place d’un écran, il y avait un rouleau de papier. On saisissait les instructions sur le clavier qui étaient alors imprimées sur le papier et en même temps envoyées à l’ordinateur pour traitement. Puis, l’ordinateur tapait automatiquement son résultat sur la même feuille de papier.

Sur certains modèles de téléscripteur, les caractères tapés pouvaient aussi être mémorisés par perforation d’une bande de papier. Les premiers programmes informatiques étaient stockés et exécutés de cette façon.

https://www.codequoi.com//images/terminal-shell-console/ASR-33*at_CHM.agr*-1024x768.jpg does not exist

Aujourd’hui, les ordinateurs personnels, les postes de travail, les smartphones ou les tablettes tactiles ont largement remplacé les téléscripteurs. Un terminal au sens propre désigne donc avant tout une machine physique dotée de périphériques entrée-sortie, située à l’extrémité d’un réseau informatique.

La console

Vers le milieu du XXe siècle, un meuble doté d’un écran et d’un clavier remplace progressivement le téléscripteur. On appelait cette machine le “pupitre de commande” ou la “console système”.

Console IBM 360/85 de la NSA en 1971. Cette console est aussi appelée un terminal.
Console IBM 360/85 de la NSA, janvier 1971. Source.

La console est, par définition, un terminal dans le sens propre du terme. Suite à cette évolution en informatique, le terme “console” désignera maintenant l’appareil et le mot “terminal” décrira le logiciel à l’intérieur de cette console.

Désormais, les termes “terminal” et “console” sont à toutes fins pratiques, interchangeables.

L’émulateur de terminal

De nos jours, le terme “terminal” fait très souvent référence au logiciel qui nous permet de taper des lignes de commande pour interagir avec le système d’exploitation. Ce logiciel est en réalité un émulateur de terminal, un terminal ou une console virtuelle. C’est une simulation d’un terminal informatique physique qui permet entre autres d’ouvrir plusieurs fenêtres et d’utiliser plusieurs terminaux sur un seul ordinateur.

L'émulateur de terminal GNOME Terminal sous Ubuntu.
L’émulateur de terminal GNOME Terminal sous Ubuntu.

Tout comme les téléscripteurs d’autrefois, les systèmes Unix appellent parfois l’émulateur de terminal “TTY”. Le terminal virtuel fonctionne pratiquement de la même manière : on tape une commande qui est relayée au système d’exploitation, et le résultat apparaît dans la même fenêtre.

Typiquement, on peut ouvrir une fenêtre de terminal avec la combinaison de touches ctrl + alt + T. Il existe de nombreux émulateurs de terminal différents. Par exemple, sous Linux : GNOME Terminal, xterm, Terminator, st, Konsole, etc. Sous MacOS : iTerm, iTerm2, kitty, ZOC, etc.

Cependant, un terminal n’est pas très malin. Il ne traite pas les instructions lui-même, il ne scanne aucun fichier et n’exécute aucun programme. Sa seule et unique fonction est de récupérer l’entrée et d’afficher la sortie. En effet, le système traite le terminal comme un fichier spécial, un fichier de périphérique via lequel il peut recevoir des instructions et afficher des résultats.

Pour pouvoir interpréter et exécuter les commandes qu’on fournit au terminal, le système d’exploitation a besoin d’un autre programme : un shell.

Le shell

D’habitude, on décrit un système d’exploitation Unix à l’aide de la métaphore de la noix. La couche de bas niveau du système s’appelle le noyau (“kernel” en anglais). C’est la partie comestible, et donc utile, de la noix. Elle est protégée par une couche de haut niveau, la coque (“shell” en anglais) de la noix. Pour accéder au noyau qui contient la partie utile du système, il faut obligatoirement passer par la coque.

Le shell, c’est donc le logiciel qui fournit l’interface utilisateur du système d’exploitation. Ce logiciel peut prendre deux formes :

  • CLI : une interface en ligne de commande (“command line interface” en anglais) dans un environnement textuel où l’utilisateur interagit avec le système en tapant des commandes que le shell interprète et exécute.
  • GUI : une interface graphique (“graphical user interface” en anglais) qui fournit un environnement graphique comme un bureau ou un écran d’accueil où l’utilisateur interagit avec le système typiquement en cliquant sur les éléments présentés.

En ligne de commande, c’est donc le shell qui interprète et traite les commandes saisies dans le terminal et qui lui fournit un résultat à imprimer.

La grande majorité des distributions Unix ont Bash comme shell par défaut. Il y a cependant beaucoup d’autres shells, comme par exemple sh, zsh, ksh, tsch, ash, dash et fish. Certains ont des différences en termes de syntaxes, d’autres ont la même syntaxe mais des caractéristiques et fonctionnalités en plus ou en moins.

Puisque tous ces shells ne sont que différentes façons de communiquer avec le noyau du système d’exploitation, ils sont interchangeables. On peut facilement installer et utiliser un shell différent de celui que notre système d’exploitation utilise par défaut.

Conclusion

Lorsqu’on communique avec un système d’exploitation en ligne de commande, on fait donc appel à trois choses :

  • à la console ou au terminal, c’est à dire à la machine physique au terminus d’un réseau informatique,
  • à un terminal, un logiciel d’entrée-sortie qui transmet les commandes de l’utilisateur et affiche un résultat,
  • et au shell, un logiciel qui fait l’interface entre l’utilisateur et le noyau central du système d’exploitation, pour interpréter et exécuter les commandes demandées.

Sources et lectures supplémentaires

  • Scott Hanselman, What’s the difference between a console, a terminal, and a shell?[ hanselman.com]
  • Chris Hoffman, What’s the Difference Between Bash, Zsh, and Other Linux Shells? [ HowToGeek.com]
  • Wikipédia, Téléscripteur [ Wikipédia]
  • Wikipédia, Interface système [ Wikipédia]

Commentaires

Articles connexes

Envoyer et intercepter un signal en C

À force d’être confrontés à des segfaults ou a des erreurs de bus, on se sera déjà familiarisé avec l’idée d’un signal informatique.

Lire la suite

Programmation réseau via socket en C

Dans ce monde informatique ultra-connecté, il est crucial de savoir comment envoyer et recevoir des données à distance, grâce aux sockets.

Lire la suite

Pipe : une méthode de communication inter-processus

Par défaut, il est difficile de faire communiquer deux processus entre eux.

Lire la suite