Le mot shell signifie « coquille » en anglais. Il
s'agit du programme que vous utilisez régulièrement sur les machines
Unix de l'ENS (que ce soient les Sun, les PC sous FreeBSD ou autres
dérivés d'Unix), et qui interprète les commandes. Par exemple, vous y
tapez pine
ou mutt
, forum
,
cc
, mozilla
, etc.
Mais quel rapport avec une coquille ? Eh bien, dans une coquille vous pouvez mettre de l'eau, pour la porter ensuite à votre bouche ; vous pouvez y mettre du sable avant de le verser dans des bocaux ; en somme, une coquille est un récipient qui permet de manipuler toutes sortes de contenus. Il en va de même du shell. C'est un outil en mode texte qui permet l'exploitation d'un grand nombre de ressources de l'ordinateur.
Cette page vous donnera les rudiments pour exploiter les deux principales fonctionnalités du shell :
Le shell, comme le normalien, ne connaît que deux états :
Le shell, une fois lancé, est inactif : il attend qu'on lui donne des ordres. Quand on lui en donne un, il l'exécute ; et quand il a terminé, il retourne à son état d'inactivité, en attente d'un nouveau commandement.
Quand le shell est inactif, il affiche une invite (prompt en anglais), qui ressemble à cela :
chaland ~ $
Un curseur, parfois clignotant, indique que le shell attend que vous lui tapiez des instructions.
J'ai l'habitude de taper des commandes dans le shell, et je vois qu'il réagit. Mais comment comprend-il ce que je veux faire ?
Prenons un cas simple. Je tape la commande bonjour
à
l'invite (prompt) du shell. Il va chercher à plusieurs endroits
ce que j'entends par là :
bonjour
n'est pas une de
ses commandes intégrées ; si c'est le cas, il l'exécute
directement, sinon il passe à l'étape suivante ;PATH
, et qui indique le « chemin » où trouver les
commandes que l'on appelle. Par exemple, si la variable PATH contient
les répertoires :
/usr/bin
/bin
et /home/toto/bin
,/usr/bin/bonjour
,/bin/bonjour
et /home/toto/bin/bonjour
;PATH
, il va renvoyer un message d'erreur
en disant que désolé, il ne voit pas ce que l'on entend par
bonjour
. Exemple :
chaland ~ $ bonjour
bonjour: Command not found
La variable PATH
consiste en
une liste de répertoires séparés par des
« :
». Si vous voulez voir à quoi ressemble votre
PATH, tapez :
chaland ~ $ echo $PATH
Certaines commandes du shell ne sont pas des programmes mais des
commandes internes (builtins functions). Comme nous
l'avons vu, elles sont directement reconnues et exécutées par le shell.
Un exemple de commande interne est cd
; elle modifie
le répertoire courant du shell.
Attention : si vous créez un script (c'est-à-dire un programme
écrit en langage shell) qui utilise cd
, il ne modifie pas
le répertoire courant du shell qui lance ce script, mais celui d'un
shell qui est créé à l'occasion de l'exécution de ce script, et qui
meurt à la fin de cette exécution.
Exemple : je crée un script aller
qui contient les
lignes suivantes :
#! /bin/sh cd $*
Nous aurons alors :
chaland ~ $ aller toto chaland ~ $ cd toto chaland ~/toto $
La répétition de commandes complexes en ligne de commande du shell est rapidement fastidieuse ; aussi est-il très pratique de connaître les bases de la programmation de scripts shell. Les scripts servent à automatiser ou systématiser des tâches.
.profile
Il existe un script spécial, qui est exécuté au moment où on se connecte. Ce
script est contenu dans le fichier $HOME/.profile
. C'est ce
fichier qui vous dit s'il y a de nouveaux messages dans forum, si vous avez
du courrier, etc.
Ce fichier est normalement mis à jour automatiquement par les scripts de la config conscrits. Il est néanmoins possible de le modifier pour changer des options.
.xinitrc
Il existe encore le script .xinitrc
, qui lance X ;
X est le gestionnaire de fenêtres classique sous Unix.
Le nombre de scripts possibles est illimité ; vous pouvez en créer autant que vous voulez, selon vos besoins : c'est ainsi que l'on personnalise son système et qu'on l'adapte à ses exigences, plutôt que l'inverse.