Qu’est-ce que le shell Bash et pourquoi est-il si important pour Linux?
Le shell Bash a plus de 30 ans et est toujours aussi performant. Que fait-il, d’où vient-il et pourquoi est-il toujours le shell le plus courant sur les systèmes Linux?
Sommaire
Qu’est-ce qu’une coque?
Lorsque vous ouvrez une fenêtre de terminal et tapez des commandes, quelque chose doit prendre ce que vous avez tapé, comprendre ce que vous vouliez et exécuter les tâches que vous avez demandées. Le logiciel qui fait cela est le shell. Un shell est un interpréteur de commandes. Il analyse ce que vous avez tapé et sélectionne les commandes, les noms de répertoires, les noms de fichiers et les noms de programmes afin de savoir ce que vous essayez d’accomplir.
Les gens utilisent souvent les expressions «fenêtres de terminal», «ligne de commande» et «shell» de manière interchangeable, mais ce sont trois choses distinctes. Une fenêtre de terminal est une représentation logicielle d’un terminal de téléscripteur physique. Il vous donne une connexion à l’ordinateur. Pour faire quelque chose d’utile, vous devez être capable de taper des instructions sur une ligne de commande. La ligne de commande est fournie par le shell et la fenêtre du terminal vous permet d’accéder au shell.
Les shells vous permettent également de regrouper une collection de commandes dans un fichier texte appelé script. Toutes les commandes du script sont exécutées pour vous chaque fois que vous exécutez le script. Les scripts offrent efficacité, répétabilité et commodité.
Le premier shell Unix était le shell Thompson, appelé sh
. Il a été écrit par Ken Thompson, qui est peut-être le membre le plus important des pères fondateurs d’Unix d’origine chez Bell Labs. Le shell Thompson a été utilisé comme shell Unix par défaut jusqu’à et y compris Unix version 6. Il a été remplacé par le shell Bourne dans la version 7 d’Unix en 1979.
Le Bourne Shell
Le shell Bourne, écrit par Stephen Bourne, était un remplacement amélioré pour le shell Thompson. Il a même commencé à utiliser la même commande que le shell Thompson, sh
, pour maintenir la compatibilité descendante avec les scripts existants. La rétrocompatibilité était importante, mais de nouvelles fonctionnalités ont été incluses, fournissant de nombreuses fonctionnalités que nous utilisons encore aujourd’hui.
Le shell Bourne était un shell interactif et un langage de script. Il a pris en charge l’exécution des tâches de premier plan et d’arrière-plan et le contrôle élémentaire des travaux. Des tuyaux et une redirection ont été ajoutés, ainsi que des améliorations dans la gestion des boucles.
Le shell contenait maintenant des commandes intégrées, ce qui signifie qu’il n’avait pas besoin de tout transmettre à des utilitaires externes, ce qui le rendait plus efficace. Le shell Bourne supportait même les «documents ici», une manière élégante d’automatiser l’envoi de données dans des commandes.
La coque Bourne a élevé la barre et est devenue la nouvelle norme.
La naissance de Bash
En 1984, lorsque le projet GNU a annoncé son intention de créer un clone Unix gratuit – écrit à partir de zéro et avec une nouvelle licence permissive – l’équipe avait besoin d’un shell. Lorsqu’un volontaire qui avait travaillé sur un shell pour le projet GNU a échoué à plusieurs reprises à fournir quoi que ce soit, Brian Fox a été chargé d’écrire un clone du shell Bourne.
Il a été surnommé le Bourne Again Shell, ou Bash. C’était en partie en hommage à Stephen Bourne et en partie en jeu de mots pour le plaisir. Après sa sortie en 1989, Chet Ramey a apporté quelques corrections de bogues à Bash. Il est finalement devenu un co-responsable du shell Bash. Aujourd’hui, il est toujours le mainteneur du projet Bash.
Linus Torvalds, le créateur du noyau Linux, a déclaré que les deux premiers programmes qu’il a exécutés sur son nouveau noyau en 1991 étaient Bash et gcc
, Le compilateur de GNU. L’association des utilitaires GNU avec le noyau Linux était mutuellement bénéfique. Le système d’exploitation GNU avait besoin d’un noyau, et le noyau Linux avait besoin de tout le reste qui constitue un clone Unix.
Parce que Bash est le shell GNU standard, il est devenu le shell standard sur toutes les distributions GNU / Linux. Linux a prospéré au point qu’il sous-tend maintenant une quantité étonnante du monde moderne. Le shell Bash a également surfé sur cette vague de succès.
Bash incorpore et améliore l’ensemble des fonctionnalités du shell Bourne, mais il s’est également inspiré d’autres shells, tels que le shell C (csh
) et le KornShell (ksh
). Par exemple, l’expansion du tilde « ~
« À la valeur détenue dans le $HOME
la variable d’environnement provient du shell C, et la fc
La commande qui appelle l’éditeur par défaut sur les commandes de l’historique des commandes provient de KornShell.
Bash a introduit des fichiers de configuration tels que les fichiers «.bashrc» et «.bash_profile». L’édition en ligne de commande sur Bash dépassait de loin les capacités des shells précédents. La manipulation des commandes précédemment exécutées dans l’historique des commandes était une version améliorée de la fonction «historique des coups» des shells C. L’expansion des accolades était une fonctionnalité qui manquait dans le shell Bourne qui a été implémenté dans Bash en tant que sur-ensemble de la fonctionnalité trouvée dans le shell C. Les tableaux ont été améliorés en supprimant leurs limites de taille. L’expansion des paramètres dans l’invite de commande permet aux utilisateurs de personnaliser leur invite Bash.
Le shell Bash vise à être conforme à la norme POSIX P1003.2 / ISO 9945.2 Shell and Utilities.
Pourquoi Bash est toujours important
Bash n’aurait pas pu durer aussi longtemps – plus de 30 ans – en tant que shell Linux par défaut s’il n’était pas à la hauteur de la tâche. En raison de sa longue durée de vie et de sa base d’utilisateurs massive, Bash est mature et très stable. Il existe de nombreuses coques alternatives disponibles, des vétérans comme le shell C et le KornShell aux coques plus récentes comme le shell Z (zsh
) et le shell interactif convivial (fish
). La coque Z et la coque Fish ont toutes deux des fonctionnalités que Bash n’a pas, ainsi que de meilleures façons de réaliser certaines des mêmes choses que Bash. Alors pourquoi Bash est-il toujours la coquille dominante?
De toutes les machines Linux que j’ai jamais été appelées à administrer, je ne me souviens pas d’une seule qui n’avait pas Bash comme shell. Machines Unix, oui, mais boîtes Linux, non. C’est Bash à chaque fois. Cette familiarité vous permet de vous mettre au travail rapidement et d’être efficace immédiatement. Vous connaissez déjà Bash, il n’y a donc pas de courbe d’apprentissage. Vous n’êtes pas bloqué par de minuscules différences de syntaxe qui vous font tourner en rond pour essayer de comprendre pourquoi quelque chose ne fonctionne pas. Temps passé à déterminer sur quoi doit se dérouler l’incantation cette shell est un temps mort, il est donc dans l’intérêt de l’entreprise cliente d’utiliser un shell bien connu et largement utilisé.
Utiliser un shell qui est – ou essaie très fort d’être – compatible POSIX est important pour de nombreuses distributions Linux, mais ce qui compte le plus, c’est la compatibilité avec les versions précédentes. Apporter des modifications qui pourraient casser des scripts existants n’est évidemment pas attrayant. Attrayant ou pas, parfois, il suffit de mordre la balle. Le 3 septembre 1967, la Suède est passée de la conduite à gauche à la conduite à droite. À 4 h 50, tout le trafic devait s’arrêter, se diriger lentement de l’autre côté de la route et s’arrêter une fois de plus. À 5 h 00, la circulation pourrait continuer, tout le monde conduisant maintenant à droite.
Bash sera-t-il un jour remplacé?
Ce qui peut sembler inconcevable maintenant peut en fait se produire plus tard. À moins que nous ne voulions nous accrocher à la croyance que nous utiliserons tous Bash jusqu’à la fin du monde, la vérité est probablement qu’un jour, Bash sera remplacé comme shell Linux par défaut – que ce soit toujours le shell standard GNU ou non. Ou peut-être que ce sera Bash, mais amélioré bien au-delà du shell que nous utilisons aujourd’hui. Mais tout ce qui remplace le Bash d’aujourd’hui devra soit être complètement (ou presque) rétrocompatible, soit valoir le bouleversement, quels qu’en soient les avantages.
Ce n’est pas sans précédent. Depuis la version 10.15 de macOS, Apple a abandonné Bash et a adopté le shell Z comme shell par défaut. Apple a des problèmes avec la licence publique générale GNU (GPL) v.3. Malheureusement, c’est la licence que Bash utilise. La dernière version de Bash publiée sous GPL v.2 était la version 3.2 de 2007. La version actuelle est la 5.1. Apple avait près de dix ans et demi de retard. La seule façon pour Apple d’inclure un shell à jour sans passer à la GPL v.3 était de passer à un shell complètement différent. Pour Apple, cela valait le bouleversement. (Cependant, vous pouvez toujours revenir à Bash sur macOS si vous le préférez!)
Il existe un monde de différence entre le poste de travail d’un utilisateur expérimenté et un serveur Linux métier que vous devez administrer à distance via une connexion SSH. Sur près de 1,5 million de serveurs hébergés Amazon EC2, plus de 93% utilisent Linux. Près de 75% des serveurs Web utilisent Linux. Des organisations comme Red Hat, Amazon et Google utilisent Linux en interne.
Il est difficile d’imaginer quels avantages une nouvelle coque pourrait offrir qui justifierait ce genre de bouleversement mondial. C’est pourquoi Bash est cimenté en place.
Même Microsoft propose désormais un moyen d’exécuter un shell Bash basé sur Linux sur Windows 10!