Bap: Remplacement de unix/shell.html par unix/shell/
This commit is contained in:
parent
200b0479a8
commit
aaf4f2e59a
1 changed files with 0 additions and 220 deletions
220
unix/shell.tml
220
unix/shell.tml
|
@ -1,220 +0,0 @@
|
||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<!DOCTYPE html
|
|
||||||
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
|
||||||
"tuteurs://DTD/tml.dtd">
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Shell</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<h1>Présentation du shell</h1>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Le mot <em>shell</em> 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 <code>pine</code> ou <code>mutt</code>, <code>forum</code>,
|
|
||||||
<code>cc</code>, <code>mozilla</code>, etc.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
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.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Cette page vous donnera les rudiments pour exploiter les deux
|
|
||||||
principales fonctionnalités du shell :
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li> l'usage interactif, reposant sur les <strong>lignes de
|
|
||||||
commandes</strong> ;</li>
|
|
||||||
<li> la conception de <strong>scripts</strong> (programmes écrits en
|
|
||||||
shell). </li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
<h2><a name="etats">Les deux états du shell</a>
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Le shell, comme le normalien, ne connaît que deux états :
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li> le travail ;</li>
|
|
||||||
<li> l'inactivité.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
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.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Quand le shell est inactif, il affiche une <em>invite</em>
|
|
||||||
(<em>prompt</em> en anglais), qui ressemble à cela :
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
<span class="prompt">chaland ~ $</span>
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Un curseur, parfois clignotant, indique que le shell attend que vous lui
|
|
||||||
tapiez des instructions.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2><a name="path">Comment le shell trouve-t-il les commandes ?</a>
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<h3>L'ordre de recherche</h3>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
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 ?
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Prenons un cas simple. Je tape la commande <code>bonjour</code> à
|
|
||||||
l'invite (<em>prompt</em>) du shell. Il va chercher à plusieurs endroits
|
|
||||||
ce que j'entends par là :
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<ol>
|
|
||||||
<li> d'abord, il va se demander si <code>bonjour</code> 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 ;</li>
|
|
||||||
<li> ensuite, il va lire le contenu d'une variable, qui s'appelle
|
|
||||||
<code>PATH</code>, et qui indique le « chemin » où trouver les
|
|
||||||
commandes que l'on appelle. Par exemple, si la variable PATH contient
|
|
||||||
les répertoires :
|
|
||||||
<ul>
|
|
||||||
<li> <code>/usr/bin</code> </li>
|
|
||||||
<li> <code>/bin</code> et </li>
|
|
||||||
<li> <code>/home/toto/bin</code>,</li>
|
|
||||||
</ul>
|
|
||||||
alors le shell va chercher successivement les commandes :
|
|
||||||
<ul>
|
|
||||||
<li> <code>/usr/bin/bonjour</code>,</li>
|
|
||||||
<li> <code>/bin/bonjour</code> et </li>
|
|
||||||
<li> <code>/home/toto/bin/bonjour</code> ;</li>
|
|
||||||
</ul></li>
|
|
||||||
<li> enfin, s'il ne trouve la commande dans aucun des répertoires
|
|
||||||
référencés par le <code>PATH</code>, il va renvoyer un message d'erreur
|
|
||||||
en disant que désolé, il ne voit pas ce que l'on entend par
|
|
||||||
<code>bonjour</code>. Exemple :
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
<span class="prompt">chaland ~ $</span> bonjour
|
|
||||||
bonjour: Command not found</pre> </li>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
<p> La <a href="#variables">variable</a> <code>PATH</code> consiste en
|
|
||||||
une liste de répertoires séparés par des
|
|
||||||
« <code>:</code> ». Si vous voulez voir à quoi ressemble votre
|
|
||||||
PATH, tapez :
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
<span class="prompt">chaland ~ $</span> echo $PATH</pre>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3><a name="builtins">Les commandes internes</a></h3>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Certaines commandes du shell ne sont pas des programmes mais des
|
|
||||||
commandes <em>internes</em> (<em>builtins functions</em>). Comme nous
|
|
||||||
l'avons vu, elles sont directement reconnues et exécutées par le shell.
|
|
||||||
Un exemple de commande interne est <code>cd</code> ; elle modifie
|
|
||||||
le répertoire courant du shell.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="attention">
|
|
||||||
<p>
|
|
||||||
Attention : si vous créez un script (c'est-à-dire un programme
|
|
||||||
écrit en langage shell) qui utilise <code>cd</code>, 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.</p>
|
|
||||||
|
|
||||||
<p> Exemple : je crée un script <code>aller</code> qui contient les
|
|
||||||
lignes suivantes : </p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
#! /bin/sh
|
|
||||||
cd $*</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Nous aurons alors :
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
<span class="prompt">chaland ~ $</span> aller toto
|
|
||||||
<span class="prompt">chaland ~ $</span> cd toto
|
|
||||||
<span class="prompt">chaland ~/toto $</span></pre>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h2><a name="prog">Quels programmes utilisent le langage du shell ?</a></h2>
|
|
||||||
|
|
||||||
<h3>Les scripts shell</h3>
|
|
||||||
<p>
|
|
||||||
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.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Le script <code>.profile</code></h3>
|
|
||||||
<p>
|
|
||||||
Il existe un script spécial, qui est exécuté au moment où on se connecte. Ce
|
|
||||||
script est contenu dans le fichier <code>$HOME/.profile</code>. C'est ce
|
|
||||||
fichier qui vous dit s'il y a de nouveaux messages dans forum, si vous avez
|
|
||||||
du courrier, etc.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
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.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h3>Le script <code>.xinitrc</code></h3>
|
|
||||||
<p> Il existe encore le script <code>.xinitrc</code>, qui lance X ;
|
|
||||||
X est le gestionnaire de fenêtres classique sous Unix.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Créer ses propres scripts</h3>
|
|
||||||
<p>
|
|
||||||
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.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="metainformation">
|
|
||||||
Basé sur un polycopié de Roberto Di Cosmo, Xavier Leroy et Damien
|
|
||||||
Doligez.
|
|
||||||
Modifications : Nicolas George, Baptiste Mélès.
|
|
||||||
Dernière modification le <date value="$Date: 2005-05-31 11:02:00 $"
|
|
||||||
/>.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Loading…
Reference in a new issue