Dès le début de ce livre, j'ai fait la distinction entre les deux environnements très différents disponibles sous Linux :
- l'environnement console ;
- l'environnement graphique.
La plupart du temps, sur sa machine, on a tendance à utiliser l'environnement graphique, qui est plus intuitif. Cependant, la console est aussi un allié très puissant qui permet d'effectuer des actions habituellement difficiles à réaliser dans un environnement graphique.
Je vous avais dit qu'il y avait plusieurs environnements graphiques disponibles (Unity, KDE, XFCE…) mais qu'il n'y avait qu'une seule console. J'ai menti.
Il existe plusieurs environnements console : les shells
La différence est moins tape-à-l'œil que dans le mode graphique (où l'on voit tout de suite que les menus ne sont pas à la même place, par exemple).
La console a toujours un fond noir et un texte blanc, je vous rassure (quoique ça se personnalise, ça). En revanche, les fonctionnalités offertes par l'invite de commandes peuvent varier en fonction du
shell que l'on utilise.
Les différents environnements console sont appelés des shells, c'est ça ?
C'est ça, en effet. Voici les noms de quelques-uns des principaux shells qui existent.
- sh : Bourne Shell. L'ancêtre de tous les shells.
- bash : Bourne Again Shell. Une amélioration du Bourne Shell, disponible par défaut sous Linux et Mac OS X.
- ksh : Korn Shell. Un shell puissant assez présent sur les Unix propriétaires, mais aussi disponible en version libre, compatible avec bash.
- csh : C Shell. Un shell utilisant une syntaxe proche du langage C.
- tcsh : Tenex C Shell. Amélioration du C Shell.
- zsh : Z Shell. Shell assez récent reprenant les meilleures idées de bash, ksh et tcsh.
Il y en a quelques autres, mais vous avez là les principaux.
Que faut-il savoir ? Tout d'abord que l'ancêtre de tous les shells est le sh (
Bourne Shell). C'est le plus vieux et il est installé sur tous les OS basés sur Unix. Il est néanmoins pauvre en fonctionnalités par rapport aux autres shells.
Le bash (
Bourne Again Shell) est le shell par défaut de la plupart des distributions Linux mais aussi celui du terminal de Mac OS X. Il y a fort à parier que c'est celui que vous utilisez en ce moment sous Linux.
Le bash est une amélioration du sh.
Voici dans les grandes lignes comment ont évolué les shells. Chacun hérite de la plupart des fonctionnalités de son ancêtre (figure suivante).
À quoi peut bien servir le sh aujourd'hui alors, si bash est par défaut sous Linux ?
sh reste toujours plus répandu que bash. En fait, vous pouvez être sûrs que tous les OS basés sur Unix possèdent sh, mais ils n'ont pas tous forcément bash. Certains OS basés sur Unix, notamment les OS propriétaires (AIX et Solaris…), utilisent d'autres types de shells ; le ksh y est par exemple très répandu.
À quoi sert un shell ?
Le shell est le programme qui gère l'invite de commandes. C'est donc le programme qui attend que vous rentriez des commandes (comme l'illustre la figure suivante).
C'est aussi le programme qui est capable par exemple de :
- se souvenir quelles étaient les dernières commandes tapées (vous remontez dans votre historique en appuyant sur la flèche « Haut » ou en faisant une recherche avec un Ctrl + R) ;
- autocompléter une commande ou un nom de fichier lorsque vous appuyez sur Tab (figure suivante) ;
- gérer les processus (envoi en arrière-plan, mise en pause avec Ctrl + Z…) ;
- rediriger et chaîner les commandes (les fameux symboles >, <, |, etc.) ;
- définir des alias (par exemple ll signifie chez moi ls -lArth).
Bref, le shell fournit toutes les fonctionnalités de base pour pouvoir lancer des commandes.
Souvenez-vous : nous avions modifié un fichier
.bashrc dans un des premiers chapitres (celui où nous avons appris à utiliser Nano). Le
.bashrc est le fichier de configuration du bash que Linux vous fait utiliser par défaut. Chaque personne peut avoir son
.bashrc pour personnaliser son invite de commandes, ses alias, etc.
Installer un nouveau shell
Pour le moment, vous devriez avoir sh et bash installés sur votre système. Si vous voulez essayer un autre shell, comme ksh par exemple, vous pouvez le télécharger comme n'importe quel paquet :
Code : Console
Une fois installé, il faut demander à l'utiliser pour votre compte utilisateur. Pour cela, tapez :
Code : Console
chsh signifie
Change Shell.
On vous demandera où se trouve le programme qui gère le shell. Vous devrez indiquer
/bin/ksh pour ksh,
/bin/sh pour sh,
/bin/bash pour bash, etc.
Quelle importance a tout ceci lorsque l'on réalise un script shell ?
Si je vous parle de cela, c'est parce qu'un script shell
dépend d'un shell précis. En gros, le langage n'est pas tout à fait le même selon que vous utilisez sh, bash, ksh, etc.
Il est possible d'écrire des scripts sh par exemple. Ceux-là, nous sommes sûrs qu'ils fonctionnent partout car tout le monde possède un shell sh.
Il s’agit toutefois du plus vieux shell, or écrire des scripts en sh est certes possible mais n’est franchement ni facile, ni ergonomique.
Avec quel shell va-t-on écrire nos scripts, alors ?
Je propose d'étudier le bash dans ce cours car :
- on le trouve par défaut sous Linux et Mac OS X (cela couvre assez de monde !) ;
- il rend l'écriture de scripts plus simple que sh ;
- il est plus répandu que ksh et zsh sous Linux.
En clair, le bash est un bon compromis entre sh (le plus compatible) et ksh / zsh (plus puissants).