Retrouvez cet article dans : Linux Pratique Hors série 8
Entre le cœur de votre machine UNIX, le kernel, et vous, utilisateur, se trouve le shell. Le shell est un programme qui sert d'interface de dialogue entre l'utilisateur et le système, une sorte de « coquille » (d'où son nom anglais) autour du noyau. Le dialogue se fait par les commandes, que l'utilisateur saisit. Le rôle du shell est alors de lire la commande, de l'interpréter, de l'exécuter et éventuellement d'en donner le résultat.
Vous l'aurez compris, le shell, ce n'est ni plus ni moins que le mode texte, la bonne vieille ligne de commande, qui, pour certains, rappelle les temps anciens, avant que les applications graphiques rendent a priori plus aisée l'utilisation d'un PC. Pourquoi a priori ? Parce que le shell est un instrument puissant, comme on va le voir, qui permet de réaliser des tâches qu'on ne peut même pas espérer concevoir en mode graphique. Et puis aussi parce que la ligne de commande est plus pratique parfois qu'une interface graphique dont il faut explorer les multiples recoins avant de trouver ce qu'on cherche.
Chaque utilisateur du système possède un shell par défaut, dont l'identité est précisée dans le fichier de configuration /etc/passwd. Le shell est démarré automatiquement dès que vous vous loguez, et pour cause : sans lui vous ne pourriez exécuter aucune commande ! C'est d'ailleurs lui qui vous invite à passer ces dernières si vous démarrez une console, grâce à ce qu'on appelle le prompt, qui se présente sous la forme suivante (la syntaxe du prompt peut varier selon le shell utilisé) :
Si vous êtes un utilisateur normal :
nom_utilisateur@nom_machine:~$ ou encore nom_machine:nom_utilisateur:$
Si vous agissez en tant que root :
root@nom_machine:/home/nom_utilisateur# ou encore nom_machine:/home/nom_utilisateur:#
On notera d'ailleurs que la différence de symbole entre $ et # permet de savoir rapidement si vous êtes logué en tant que root ou non.
Une fois votre commande tapée, c'est au shell que revient la responsabilité d'interpréter et d'exécuter celle-ci. On parle d'usage interactif du shell, parce que l'utilisateur dialogue (interagit) avec le système. Le prompt offre de multiples possibilités. Vous pouvez naviguer dans vos répertoires par exemple :
ordino:moi$ ls Documents/GRECO/ Agony.jpg View_of_Toledo.jpg The_adoration_of_the_Shepherds.jpg the_miracle_of_christ_healing_the_blind.jpg ordino:moi$
Dans ce cas précis, le résultat de votre commande est affiché : vous visualisez l'ensemble du contenu du répertoire /home/moi/Documents/GRECO. Une fois la commande exécutée, le prompt réapparaît et vous pouvez en passer d'autres.
Vous pouvez aussi lancer des programmes, en tapant le nom du programme, puis [Entrée] :
ordino:moi$ xedit
Dans ce cas, le shell ne rendra la main que lorsque le processus en cours sera achevé : en d'autres termes, le prompt ne réapparaît pas. Cela peut être ennuyeux d'ailleurs si vous voulez lancer d'autres commandes sans ouvrir une autre console. Dans ce cas, il faut ajouter une esperluette à la fin de la ligne de commande, et le prompt revient :
ordino:moi$ xedit & ordino:moi$
Mais le shell ne se résume pas au prompt. Il a également pour fonction d'être utilisé comme langage de programmation. Il peut en effet se révéler fastidieux d'avoir à passer la même suite de commandes que vous utilisez régulièrement, surtout si celle-ci est longue. Vous avez alors la possibilité de créer ce qu'on appelle un « script shell » ou « fichier de script », où ces commandes sont conservées. Vous n'avez alors plus qu'à rappeler le nom du fichier pour exécuter le programme.
Bien connaître son shell revient donc à optimiser les possibilités de son système. Un script shell vous permettra par exemple d'automatiser des tâches de sauvegarde, de démarrer automatiquement votre programme préféré, etc.
Et puis, il faut tout de même rectifier une erreur : il n'y a pas UN mais DES shells, en raison de l'évolution constante des systèmes UNIX. Bourne shell, C shell, Korn shell, Tenex C shell, etc. sont autant de shells qui se ressemblent beaucoup en tant qu'interfaces de dialogue, et dont les différences sont surtout liées à leurs possibilités de programmation. Le plus connu reste toutefois le Bourne Again shell (dont le nom est abrégé en bash), pour la bonne et simple raison qu'il est installé par défaut sur la plupart des distributions GNU/Linux.
Retrouvez cet article dans : Linux Pratique Hors série 8

