387 lines
10 KiB
XML
387 lines
10 KiB
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||
<!DOCTYPE html
|
||
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
||
"tuteurs://DTD/tml.dtd">
|
||
<html>
|
||
<head>
|
||
<title>Commandes Unix</title>
|
||
</head>
|
||
<body>
|
||
|
||
<h1>Corrigés des exercices sur les commandes Unix
|
||
élémentaires</h1>
|
||
|
||
|
||
<p>&icone.note; Les paragraphes signalés par cette icône sont des
|
||
explications plus techniques pour donner une réponse exacte à certaines
|
||
questions. Si vous êtes débutant, ce n'est pas nécessaire de les lire
|
||
maintenant.</p>
|
||
|
||
<h2><a name="debut1">Exercice 1 (<code>joe</code>, <code>less</code>,
|
||
<code>ls</code>)</a></h2>
|
||
|
||
|
||
<ol>
|
||
|
||
<li> <strong>Créez un fichier <code>premiertexte</code> contenant une ou
|
||
deux phrases</strong>.
|
||
|
||
<p>
|
||
Pour créer un fichier et écrire du texte dedans, il faut l'éditer avec un
|
||
éditeur de votre choix. Nous proposons <code>nano</code> aux débutants. Il
|
||
faut donc taper </p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> nano premiertexte
|
||
</pre>
|
||
|
||
<p><strong>Utilisation de <code>nano</code></strong> : le prompt
|
||
affichant le nom de la machine disparaît; vous avez à la place une page
|
||
blanche où vous pouvez taper du texte. Le nom du fichier que vous éditez
|
||
et le nom de l'éditeur sont affichés en haut.
|
||
La liste des commandes disponibles est écrite en bas. Vous pouvez faire
|
||
<code>Ctrl-O</code> pour enregistrer et <code>Ctrl-X</code> pour
|
||
quitter.</p>
|
||
|
||
<p>
|
||
Vous pouvez maintenant taper ce que vous voulez et quitter en
|
||
enregistrant (<code>Ctrl-X</code> puis répondre <code>y</code> au moment
|
||
où <code>nano</code> vous demande si vous voulez enregistrer le texte).
|
||
</p></li>
|
||
|
||
<li> <strong>Visualisez le contenu de <code>premiertexte</code> sans
|
||
l'éditer</strong>
|
||
|
||
|
||
<p>C'est la commande <code>less</code> qui permet de faire cela (ou
|
||
<code>more</code>, si <code>less</code> n'est pas installée là où vous vous
|
||
trouvez). Pour lire le contenu de <code>premiertexte</code>, il faut taper
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> less premiertexte
|
||
</pre>
|
||
|
||
<p>
|
||
Pour quitter <code>less</code> ou <code>more</code>, taper <code>q</code>.
|
||
</p></li>
|
||
|
||
<li> <strong>Quelle est la taille de
|
||
<code>premiertexte</code> ?</strong>
|
||
|
||
<p>
|
||
C'est l'option <code>-l</code> de <code>ls</code> qui permet de savoir la
|
||
taille d'un fichier, sa date de dernière modification, etc. Vous tapez
|
||
donc : </p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> ls -l
|
||
</pre>
|
||
|
||
<p>
|
||
Cette commande sans arguments vous donne la liste de tous vos fichiers. Si
|
||
vous voulez connaître les caractéristiques de <code>premiertexte</code> et rien
|
||
d'autre, tapez
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> ls -l premiertexte
|
||
</pre>
|
||
|
||
<p>
|
||
La config conscrits propose l'alias <code>ll</code> pour
|
||
<code>ls -l</code>.
|
||
</p></li>
|
||
|
||
<li> <strong>Éditez <code>PREMIERTEXTE</code>. Que
|
||
constatez-vous ?</strong>
|
||
|
||
<p>
|
||
Pour éditer <code>PREMIERTEXTE</code>, vous tapez
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> joe PREMIERTEXTE
|
||
</pre>
|
||
|
||
<p>
|
||
Vous constatez qu'il s'agit d'un nouveau fichier, et que vous ne retrouvez pas
|
||
le contenu de <code>premiertexte</code>. C'est normal : Unix est <em>case
|
||
sensitive</em>, c'est-à-dire sensible à la <em>casse</em> des
|
||
caractères : majuscules et minuscules ne sont pas interchangeables. C'est
|
||
pourquoi <code>premiertexte</code> et <code>PREMIERTEXTE</code> sont deux
|
||
fichiers différents.
|
||
</p>
|
||
</li>
|
||
</ol>
|
||
|
||
<h2> <a name="debut2">Exercice 2 (<code>cp</code>, <code>ls</code>,
|
||
<code>mv</code>)</a></h2>
|
||
|
||
|
||
<ol>
|
||
|
||
<li> <strong>Faites une copie de <code>premiertexte</code> appelée
|
||
<code>double</code></strong>
|
||
|
||
<p>
|
||
C'est la commande <code>cp</code> (<em>copy</em>) qui sert à faire une copie
|
||
d'un fichier, en indiquant le nom du fichier à copier puis nom du nouveau
|
||
fichier. Il faut donc taper : </p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> cp premiertexte double
|
||
</pre></li>
|
||
|
||
|
||
|
||
<li> <strong>Comparez leurs tailles</strong>
|
||
|
||
|
||
<p>
|
||
Comme dans l'exercice 1, c'est l'option <code>-l</code> de <code>ls</code> qui
|
||
va servir. En tapant <code>ls -l</code> sans argument, vous affichez le
|
||
contenu du répertoire en entier. Si vous voulez limiter l'affichage aux deux
|
||
fichiers souhaités, tapez
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> ls -l premiertexte double
|
||
</pre></li>
|
||
|
||
|
||
<li> <strong>Renommez <code>double</code> en
|
||
<code>introduction</code></strong>
|
||
|
||
<p>
|
||
C'est la commande <code>mv</code> (<em>move</em>) qui sert à renommer un
|
||
fichier. Pour renommer <code>double</code>, il faut donc taper :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> mv double introduction
|
||
</pre>
|
||
|
||
|
||
<p>
|
||
En tapant <code>ls</code>, vous pouvez vérifier que le fichier
|
||
<code>double</code> a disparu au profit d'un fichier
|
||
<code>introduction</code>.</p>
|
||
</li>
|
||
|
||
<li> <strong>Quelle différence y a-t-il entre
|
||
<code>mv double introduction</code> et
|
||
<code>cp double introduction</code> ?</strong>
|
||
|
||
<p>
|
||
<code>mv</code> (<em>move</em>) renomme un fichier : seul son nom est
|
||
modifié, son contenu reste inchangé et aucun autre fichier n'est créé.
|
||
<code>double</code> disparaît au profit de <code>introduction</code>.
|
||
</p>
|
||
|
||
<p>
|
||
<code>cp</code> (<em>copy</em>) fait une copie du premier fichier : un
|
||
nouveau fichier est créé, son contenu est identique à celui du fichier
|
||
d'origine, mais leurs noms sont différents. <code>double</code> et
|
||
<code>introduction</code> existent de façon parallèle.
|
||
</p>
|
||
</li>
|
||
|
||
</ol>
|
||
|
||
<h2> <a name="debut3">Exercice 3 (<code>mkdir</code>,
|
||
<code>mv</code>, <code>cp</code>, <code>ls</code>,
|
||
<code>cd</code>)</a></h2>
|
||
|
||
<ol>
|
||
|
||
<li> <strong>Créez un répertoire <code>essai/</code></strong>
|
||
|
||
<p>
|
||
Il faut taper
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> mkdir essai
|
||
</pre>
|
||
<p class="continue">(<em>make directory «essai»</em>) </p>
|
||
|
||
<p>
|
||
Vous pouvez vérifier en tapant <code>ls</code> que le répertoire a bien été
|
||
créé.
|
||
</p></li>
|
||
|
||
|
||
<li> <strong>Déplacez <code>double</code> dans <code>essai/</code></strong>
|
||
|
||
|
||
<p>C'est <code>mv</code> (<em>move</em>) qui sert à déplacer des fichiers, ainsi
|
||
qu'à les renommer : </p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> mv double essai/
|
||
</pre>
|
||
|
||
<p>
|
||
Le slash (<code>/</code>) n'est pas obligatoire, c'est en fait un agrément
|
||
pour identifier plus vite les répertoires dans une liste de fichiers
|
||
</p>
|
||
|
||
<p>&icone.note; C'est l'option <code>-F</code> de <code>ls</code> qui
|
||
fait apparaître ce symbole; vous avez en fait un alias de <code>ls</code>
|
||
sur <code>ls -F</code>). </p></li>
|
||
|
||
<li> <strong>Faites une copie de <code>premiertexte</code> appelée
|
||
<code>copie</code>, et placez-la également dans
|
||
<code>essai/</code>.</strong>
|
||
|
||
<p>
|
||
On peut faire ça de plusieurs façons :
|
||
</p>
|
||
|
||
<ul>
|
||
|
||
<li> Faire la copie dans le répertoire courant, puis déplacer cette copie dans
|
||
le sous-répertoire <code>essai/</code> :
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> cp premiertexte copie
|
||
<span class="prompt">bireme ~ $</span> mv copie essai/
|
||
</pre></li>
|
||
|
||
<li> Faire directement la copie dans le sous-répertoire
|
||
<code>essai/</code> :
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> cp premier texte essai/copie
|
||
</pre></li>
|
||
|
||
<li> N'oublions pas le cas où nous ne serions pas dans le répertoire
|
||
d'accueil, mais dans <code>essai/</code>. On pourrait d'abord faire la copie
|
||
dans le répertoire père, puis amener cette copie là où on se trouve :
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~/essai $</span> cp ../premier texte ../copie
|
||
<span class="prompt">bireme ~/essai $</span> mv ../copie .
|
||
</pre>
|
||
|
||
<p class="continue">Ou plus simplement, on pourrait copier le fichier du répertoire père
|
||
directement dans le répertoire courant :</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~/essai $</span> cp ../premiertexte copie
|
||
</pre></li>
|
||
</ul></li>
|
||
|
||
|
||
<li> <strong>Affichez une liste de ce que contient
|
||
<code>essai/</code></strong>
|
||
|
||
<p>
|
||
Si l'on est dans le répertoire personnel, on tape :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> ls essai
|
||
</pre>
|
||
|
||
<p class="continue">
|
||
pour avoir une liste de ce que contient <code>essai</code>. Le résultat
|
||
ressemblera à ça :</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> ls essai
|
||
copie double
|
||
</pre>
|
||
|
||
<p class="continue">
|
||
Et si vous vous trouvez alors dans <code>essai/</code>, le résultat sera le
|
||
suivant :</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~/essai $</span> ls
|
||
copie double
|
||
</pre></li>
|
||
</ol>
|
||
|
||
<h2><a name="debut4">Exercice 4 (<code>rmdir</code>, <code>cd</code>,
|
||
<code>rm</code>)</a></h2>
|
||
|
||
<ol>
|
||
|
||
<li> <strong>Essayez de drétuire <code>essai/</code>. Que se
|
||
passe-t-il ? Que faut-il faire pour détruire un
|
||
répertoire ?</strong>
|
||
|
||
<p> C'est la commande <code>rmdir</code> (<em>remove directory</em>) qui
|
||
sert à détruire les répertoires. Cependant, on ne peut détruire un
|
||
répertoire qu'à condition qu'il soit entièrement vide, c'est pourquoi le
|
||
programme vous répond
|
||
</p>
|
||
|
||
<pre>
|
||
rmdir: essai: directory not empty
|
||
</pre>
|
||
|
||
<p class="continue">
|
||
Il faut donc vider le répertoire pour pouvoir le détruire.</p></li>
|
||
|
||
<li> <strong>Détruisez tout ce que contient <code>essai/</code></strong>
|
||
|
||
<p>
|
||
C'est la commande <code>rm</code> qui permet de détruire des fichiers. Il faut
|
||
donc taper : </p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~/essai $</span> rm double copie
|
||
</pre>
|
||
|
||
|
||
<p>
|
||
Vous pouvez aussi vous servir de certains caractères spéciaux; ici, c'est
|
||
<code>*</code> (étoile) qui est utile. «Étoile» signifie «Tout chaîne de
|
||
caractères ne commençant pas par un point». Donc, pour effacer d'un seul coup
|
||
tous les fichiers du répertoire, vous pouvez taper :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~/essai $</span> rm *
|
||
</pre>
|
||
|
||
<div class="attention">
|
||
<h1>&icone.attention; Attention &icone.attention;</h1>
|
||
<p> Il se trouve que votre configuration est ainsi faite
|
||
que le programme demande confirmation avant d'effacer des fichiers . Cela
|
||
vient de ce qu'il y a un <em>alias</em> de <code>rm</code> sur
|
||
<code>rm -i</code>; l'option <code>-i</code> est l'option «interactive»,
|
||
qui demande confirmation. </p>
|
||
|
||
<p>
|
||
Soyez donc prudents : on a vite fait de confondre <code>mv</code>
|
||
(<em>move</em>) et <code>rm</code> (<em>remove</em>), et l'option
|
||
<code>-i</code> n'est pas systématiquement mise.
|
||
</p>
|
||
</div></li>
|
||
|
||
<li> <strong>Détruisez <code>essai/</code></strong>
|
||
|
||
<p>
|
||
Revenez dans le répertoire père (<code>cd ..</code>) et tapez :
|
||
</p>
|
||
|
||
|
||
<pre>
|
||
<span class="prompt">bireme ~ $</span> rmdir essai/
|
||
</pre>
|
||
(<em>remove directory «essai»</em>)
|
||
</li>
|
||
</ol>
|
||
|
||
|
||
<div class="metainformation">
|
||
Auteur : Émilia Robin, Joël Riou. Dernière modification le 2002-11-04.
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|
||
|