Je me retrouve à utiliser ces termes de manière interchangeable sans connaître la différence.
Quelle est la différence réelle entre tous ces termes?
Oui, il y a beaucoup de confusion sur ces termes. Je vais essayer, mais à condition que ce soit vraiment de la sémantique et que les termes soient utilisés de manière interchangeable dans le langage courant:
"Shell" est le terme utilisé pour tout programme qui en exécute d'autres. Il s'enroule autour d'un autre programme, d'où son nom. Ainsi, par exemple, Windows Explorer est un shell, même si très peu de gens l'appelleraient un. Dans toutes les langues et plates-formes que j'ai utilisées, n'importe quel programme peut être un Shell.
EDIT: Je n'ai pas défini de "terminal". Il tire son nom d'être le point final de communication avec l'utilisateur. Plus précisément, il s'agissait du dispositif de machine à écrire utilisé pour la communication avec l'utilisateur final. Aujourd'hui, il est plutôt plus général et peut signifier un pseudo-terminal (pts sous Linux ps -ef
), qui est une session basée sur des caractères gérée par une interface graphique. Sous Windows, cela s'appellerait une "fenêtre de console".
"Console" signifie quelque chose de spécifique, mais différent, sous Windows et UNIX. Sous UNIX à l'origine, c'était le tty (TeleTYpewriter, un VDU était un "téléscripteur en verre")) qui était physiquement branché sur la machine, pas même via un dongle (je remonte loin avec UNIX C'est le terminal qui a envoyé et reçu les messages de démarrage et de fermeture, ainsi que les alertes telles que PANIC. Les scripts bash et Korn Shell peuvent s'exécuter en tant que pseudo-démons sans TTY/console.
Le terme "console" est souvent confondu avec les "entrées standard", "sorties standard" et "erreurs standard" plus précises (stdin, stdout, stderr, de C). Ceux-ci sont parfois appelés flux et sont par défaut dirigés vers un terminal sur la plupart des systèmes. Sous UNIX, ce sont les trois premiers descripteurs de fichiers, sous Windows les trois premiers descripteurs de fichiers, 0, 1, 2 sur les deux. Un programme peut les diriger vers n'importe quel système de fichiers auquel il a un accès approprié, mais ce n'est généralement pas le cas - il les hérite souvent de son processus parent (tous les systèmes d'exploitation ne l'ont pas fait par le passé).
Sous Windows, un programme "Console" est un programme qui a une fenêtre de console, souvent appelée à tort "boîte DOS". Ainsi, cmd.exe est un programme de console, tout comme Perl.exe, ainsi que python.exe (mais pas pythonw.exe).
Une invite de commande est l'invitation à taper qui est affichée par un Command Line Interpreter, ou CLI. Par convention sur UNIX, il se termine par un $ pour tous les utilisateurs sauf root, qui se termine par un #. csh ne respecte pas cette convention et utilise un%. Généralement, l'invite sur une CLI Windows se termine par un>. Dans tous les cas, ceux-ci peuvent être modifiés par l'utilisateur.
Je crois que le raccourci et le titre de la fenêtre pour cmd.exe sous Windows ont le libellé "Invite de commandes" car il donne accès à une invite de commandes. J'ai un livre Microsoft Press appelé "Windows Command-Line" qui dit "La ligne de commande est ... accessible via la fenêtre de commande shell". Ainsi, même Microsoft mélange leurs termes.
Ainsi, cmd.exe est un shell et une CLI, et un programme de console. sqlplus est une CLI mais pas un Shell, sous Windows c'est un programme de console. L'Explorateur Windows est un shell mais pas une CLI ou un programme de console. Bash et Korn Shell sont tous deux des shells qui ont une CLI et peuvent être exécutés à partir d'une console, mais pas exclusivement.