tuteurs.ens.fr/unix/exercices/solutions/unix_deb-sol.tml
Marc Mezzarobba c7f4bbad36 Passage en UTF-8, 2 : lignes <?xml encoding?>
Last-change: ignore this commit
2009-09-27 15:45:57 +02:00

387 lines
10 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<!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
<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 <date value="$Date: 2007-07-17 10:03:38 $"/>.
</div>
</body>
</html>