tuteurs.ens.fr/unix/exercices/solutions/unix_deb-sol.tml

388 lines
10 KiB
Text
Raw Normal View History

<?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<69>s des exercices sur les commandes Unix
<EFBFBD>l<EFBFBD>mentaires</h1>
<p>&icone.note; Les paragraphes signal<61>s par cette ic<69>ne sont des
explications plus techniques pour donner une r<>ponse exacte <20> certaines
questions. Si vous <20>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<43>ez un fichier <code>premiertexte</code> contenant une ou
deux phrases</strong>.
<p>
Pour cr<63>er un fichier et <20>crire du texte dedans, il faut l'<27>diter avec un
<EFBFBD>diteur de votre choix. Nous proposons <code>nano</code> aux d<>butants. Il
faut donc taper </p>
<pre>
<span class="prompt">bireme ~ $</span><3E>nano premiertexte
</pre>
<p><strong>Utilisation de <code>nano</code></strong><3E>: le prompt
affichant le nom de la machine dispara<72>t; vous avez <20> la place une page
blanche o<> vous pouvez taper du texte. Le nom du fichier que vous <20>ditez
et le nom de l'<27>diteur sont affich<63>s en haut.
La liste des commandes disponibles est <20>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<EFBFBD> <code>nano</code> vous demande si vous voulez enregistrer le texte).
</p></li>
<li> <strong>Visualisez le contenu de <code>premiertexte</code> sans
l'<27>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<6C>e l<> o<> vous vous
trouvez). Pour lire le contenu de <code>premiertexte</code>, il faut taper
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>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><3E>?</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<6E>re modification, etc. Vous tapez
donc<EFBFBD>: </p>
<pre>
<span class="prompt">bireme ~ $</span><3E>ls -l
</pre>
<p>
Cette commande sans arguments vous donne la liste de tous vos fichiers. Si
vous voulez conna<6E>tre les caract<63>ristiques de <code>premiertexte</code> et rien
d'autre, tapez
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>ls -l premiertexte
</pre>
<p>
La config conscrits propose l'alias <code>ll</code> pour
<code>ls<6C>-l</code>.
</p></li>
<li> <strong><3E>ditez <code>PREMIERTEXTE</code>. Que
constatez-vous<75>?</strong>
<p>
Pour <20>diter <code>PREMIERTEXTE</code>, vous tapez
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>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<61>: Unix est <em>case
sensitive</em>, c'est-<2D>-dire sensible <20> la <em>casse</em> des
caract<EFBFBD>res<EFBFBD>: majuscules et minuscules ne sont pas interchangeables. C'est
pourquoi <code>premiertexte</code> et <code>PREMIERTEXTE</code> sont deux
fichiers diff<66>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<65>e
<code>double</code></strong>
<p>
C'est la commande <code>cp</code> (<em>copy</em>) qui sert <20> faire une copie
d'un fichier, en indiquant le nom du fichier <20> copier puis nom du nouveau
fichier. Il faut donc taper<65>: </p>
<pre>
<span class="prompt">bireme ~ $</span><3E>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<6C>-l</code> sans argument, vous affichez le
contenu du r<>pertoire en entier. Si vous voulez limiter l'affichage aux deux
fichiers souhait<69>s, tapez
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>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 <20> renommer un
fichier. Pour renommer <code>double</code>, il faut donc taper<65>:
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>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<66>rence y a-t-il entre
<code>mv<6D>double<6C>introduction</code> et
<code>cp<63>double<6C>introduction</code><3E>?</strong>
<p>
<code>mv</code> (<em>move</em>) renomme un fichier<65>: seul son nom est
modifi<EFBFBD>, son contenu reste inchang<6E> et aucun autre fichier n'est cr<63><72>.
<code>double</code> dispara<72>t au profit de <code>introduction</code>.
</p>
<p>
<code>cp</code> (<em>copy</em>) fait une copie du premier fichier<65>: un
nouveau fichier est cr<63><72>, son contenu est identique <20> celui du fichier
d'origine, mais leurs noms sont diff<66>rents. <code>double</code> et
<code>introduction</code> existent de fa<66>on parall<6C>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<43>ez un r<>pertoire <code>essai/</code></strong>
<p>
Il faut taper
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>mkdir essai
</pre>
<p class="continue">(<em>make directory <20>essai<61></em>) </p>
<p>
Vous pouvez v<>rifier en tapant <code>ls</code> que le r<>pertoire a bien <20>t<EFBFBD>
cr<EFBFBD><EFBFBD>.
</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 <20> d<>placer des fichiers, ainsi
qu'<27> les renommer<65>: </p>
<pre>
<span class="prompt">bireme ~ $</span><3E>mv double essai/
</pre>
<p>
Le slash (<code>/</code>) n'est pas obligatoire, c'est en fait un agr<67>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<72>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<65>e
<code>copie</code>, et placez-la <20>galement dans
<code>essai/</code>.</strong>
<p>
On peut faire <20>a de plusieurs fa<66>ons<6E>:
</p>
<ul>
<li> Faire la copie dans le r<>pertoire courant, puis d<>placer cette copie dans
le sous-r<>pertoire <code>essai/</code><3E>:
<pre>
<span class="prompt">bireme ~ $</span><3E>cp premiertexte copie
<span class="prompt">bireme ~ $</span><3E>mv copie essai/
</pre></li>
<li> Faire directement la copie dans le sous-r<>pertoire
<code>essai/</code><3E>:
<pre>
<span class="prompt">bireme ~ $</span><3E>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<76>:
<pre>
<span class="prompt">bireme ~/essai $</span><3E>cp ../premier texte ../copie
<span class="prompt">bireme ~/essai $</span><3E>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<6E>:</p>
<pre>
<span class="prompt">bireme ~/essai $</span><3E>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<70>:
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>ls essai
</pre>
<p class="continue">
pour avoir une liste de ce que contient <code>essai</code>. Le r<>sultat
ressemblera <20> <20>a<EFBFBD>:</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>ls essai
copie double
</pre>
<p class="continue">
Et si vous vous trouvez alors dans <code>essai/</code>, le r<>sultat sera le
suivant<EFBFBD>:</p>
<pre>
<span class="prompt">bireme ~/essai $</span><3E>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<64>tuire <code>essai/</code>. Que se
passe-t-il<69>? Que faut-il faire pour d<>truire un
r<EFBFBD>pertoire<EFBFBD>?</strong>
<p> C'est la commande <code>rmdir</code> (<em>remove directory</em>) qui
sert <20> d<>truire les r<>pertoires. Cependant, on ne peut d<>truire un
r<EFBFBD>pertoire qu'<27> condition qu'il soit enti<74>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<65>: </p>
<pre>
<span class="prompt">bireme ~/essai $</span><3E>rm double copie
</pre>
<p>
Vous pouvez aussi vous servir de certains caract<63>res sp<73>ciaux; ici, c'est
<code>*</code> (<28>toile) qui est utile. <20><>toile<6C> signifie <20>Tout cha<68>ne de
caract<EFBFBD>res ne commen<65>ant pas par un point<6E>. Donc, pour effacer d'un seul coup
tous les fichiers du r<>pertoire, vous pouvez taper<65>:
</p>
<pre>
<span class="prompt">bireme ~/essai $</span><3E>rm *
</pre>
<div class="attention">
<h1>&icone.attention;<3B>Attention<6F>&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<72>-i</code>; l'option <code>-i</code> est l'option <20>interactive<76>,
qui demande confirmation. </p>
<p>
Soyez donc prudents<74>: 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<73>matiquement mise.
</p>
</div></li>
<li> <strong>D<>truisez <code>essai/</code></strong>
<p>
Revenez dans le r<>pertoire p<>re (<code>cd<63>..</code>) et tapez<65>:
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>rmdir essai/
</pre>
(<em>remove directory <20>essai<61></em>)
</li>
</ol>
<div class="metainformation">
Auteur<75>: <20>milia Robin, Jo<4A>l Riou. Derni<6E>re modification le <date value="$Date: 2007-07-17 10:03:38 $"/>.
</div>
</body>
</html>