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

290 lines
6.6 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>R<>pertoires</title>
</head>
<body>
<h1>Corrig<69> des exercices sur les r<>pertoires
(<code>mkdir</code>, <code>rmdir</code>, <code>cd</code>)</h1>
<p>
Ces exercices sont des questions de cours<72>: les solutions se trouvent
toutes dans les pages de man des commandes en question. On suppose donc
connues les commandes de <code>less</code>, qui servent <20> se d<>placer dans
les pages de man... et la commande servant <20> chercher un mot. Testez les
commandes sur des fichiers et r<>pertoires d'essai pour vous faire la main et
comprendre ce qui se passe.</p>
<h2><a name="mkdir"><code>mkdir, rmdir</code></a></h2>
<ol>
<li><a name="mk1"> <strong>Cr<43>ez trois r<>pertoires en une seule ligne de
commande</strong></a>.
<p>
Si vous voulez cr<63>er trois r<>pertoires <code>bla</code>, <code>ble</code> et
<code>bli</code>, tapez
</p>
<pre>
mkdir bla ble bli
</pre></li>
<li><a name="mk2"> <strong>Effacez ces trois r<>pertoires en une seule ligne
de commande</strong> </a>.
<p>
Il faut taper
</p>
<pre>
rmdir bla ble bli
</pre></li>
<li><a name="mk3"> <strong>Que se passe-t-il si vous tapez <code>mkdir
mkdir</code> <20>?</strong> </a>
<p>Vous cr<63>ez chez vous un r<>pertoire appel<65> <code>mkdir</code>.</p>
</li>
<li><a name="mk4"> <strong>Vous voulez d<>truire un r<>pertoire
<code>bla/</code>... mais <20>a ne marche pas.</strong> </a>
<p>
<code>ls</code> vous dit qu'il est vide, et pourtant vous ne r<>ussissez pas <20>
l'effacer<65>: c'est qu'il n'est pas vide. Il doit y avoir des fichiers
cach<EFBFBD>s, commen<65>ant par un point, que vous ne voyez pas avec <code>ls</code>
sans option. Il faut taper
</p>
<pre>
ls -a
</pre>
<p class="continue">
et effacer les fichiers trouv<75>s.
</p></li>
<li><a name="mk5"> <strong>Est-ce que <code>mkdir</code> peut prendre des
options ?</strong> </a>
<p>
Oui, une<6E>: l'option <code>-p</code>, dont on va parler tout de suite.
</p></li>
<li><a name="mk6"> <strong><3E> quelle condition est-ce que la ligne de commande
<EFBFBD><code>mkdir Rapport/annexes</code><3E> peut fonctionner et cr<63>er effectivement
ce sous-r<>pertoire<72>? </strong> </a>
<p>
Il faut que le r<>pertoire <code>Rapport</code> existe, pour que l'on puisse y
cr<EFBFBD>er un sous-r<>pertoire.
</p></li>
<li><a name="mk7"> <strong>Y a-t-il une option de <code>mkdir</code> qui
permette de cr<63>er <20> la fois un r<>pertoire et un sous-r<>pertoire de ce
r<EFBFBD>pertoire ?</strong> </a>
<p>
Oui, c'est l'option <code>-p</code>. Quand vous tapez
</p>
<pre>mkdir -p Rapport/annexes
</pre>
<p class="continue">
un r<>pertoire <code>Rapport</code> est cr<63><72>, et dans ce r<>pertoire un
sous-r<>pertoire <code>annexes</code>.
</p></li>
<li><a name="mk8"> <strong> Comment cr<63>er un r<>pertoire en sp<73>cifiant des
droits<EFBFBD>? </strong> </a>
<p>
On utilise l'option <code>-m</code> (<em>mode</em>) de <code>mkdir</code>.
Par exemple<6C>:
</p>
<pre>
<span class="bireme ~ $">bireme ~ $</span><3E>mkdir<69>-m<>700<30>Mail
<span class="bireme ~ $">bireme ~ $</span><3E>ls<6C>-ld<6C>Mail
drwx------ 2 robin litt95 2048 Jun 2 15:27 Mail/
</pre></li>
<li><a name="mk9"> <strong> Quel est l'effet de la commande
suivante<EFBFBD>:</strong></a>
<pre> rmdir -p toto/tata/tutu/</pre>
<p>
Cette commande efface toute la hi<68>rarchie des r<>pertoires, <20> condition qu'ils
soient vides; si par exemple <code>tutu/</code> est vide mais
<code>toto/</code> ne l'est pas, <code>tutu/</code> sera effac<61> mais pas
<code>toto/</code>, et le programme s'arr<72>te.
</p></li>
<li><a name="mk10"> <strong>Cr<43>ation r<>cursive sans message d'erreur
</strong> </a>
<p>
On ach<63>ve avec ceci le tour de l'option <code>-p</code>... Si donc on tape
</p>
<pre>
mkdir -p toto/tutu/
</pre>
<p class="continue">
le sous-r<>pertoire <code>tutu/</code> est cr<63><72> si <code>toto/</code> existe
d<EFBFBD>j<EFBFBD>; et si <code>toto/</code> n'existe pas, ce r<>pertoire et son
sous-r<>pertoire sont cr<63><72>s. Il n'y a pas de message d'erreur.
</p></li>
</ol>
<h2><a name="cd"><code>cd</code></a></h2>
<p>
But de l'exercice<63>: apprendre <20> se servir de <code>.</code> et
<code>..</code> (<28>point<6E> et <20>point point<6E>). <code>..</code> d<>signe le
r<EFBFBD>pertoire p<>re du r<>pertoire courant, et <code>.</code> d<>signe le r<>pertoire
courant. <code>..</code> sert beaucoup avec <code>cd</code>, pour remonter
d'un niveau dans une arborescence; <code>.</code> est tr<74>s utile avec des
commandes comme <code>mv</code> ou <code>cp</code>, o<> il signifie en fait
<EFBFBD>ici<EFBFBD>.
</p>
<p class="centre">
<a name="arbo">
2003-09-20 13:11:58 +02:00
<img src="../exocd.png" alt="[Exemple d'arborescence]" />
</a>
</p>
<ol>
<li><a name="cd1"> <strong>Dans quel r<>pertoire vous trouvez-vous quand vous
vous loguez<65>?</strong> </a>
<p>
Vous vous trouvez dans votre r<>pertoire personnel, dans <code>~</code> (tilde).
</p></li>
<li><a name="cd2"> <strong>Allez directement dans
<code>~/Rapport/docs/afaire/</code></strong> </a>
<p>
Taper
</p>
<pre>
cd Rapport/docs/afaire
</pre></li>
<li><a name="cd3"> <strong>De l<>, passez dans
<code>~/Rapport/docs/fait/</code></strong> </a>
<pre>
cd ../fait
</pre></li>
<li><a name="cd4"> <strong>Revenez dans <code>~/Rapport/</code></strong>
</a>
<p>
Taper
</p>
<pre>
cd ../..
</pre>
<p class="continue">
ou
</p>
<pre>
cd ~/Rapport
</pre></li>
<li><a name="cd5"> <strong>Sans changer de r<>pertoire, regardez avec
<code>less</code> le contenu de <code>~/www/index.html</code></strong>
</a>
<p>
Il faut taper
</p>
<pre>
less ~/www/index.html
</pre>
<p class="continue">
ou
</p>
<pre>
less ../www/index.html
</pre>
</li>
<li><a name="cd6"> <strong>Passez dans <code>~/Rapport/docs/</code></strong>
</a>
<pre>
cd docs/
</pre>
</li>
<li><a name="cd7"> <strong>En restant l<> o<> vous <20>tes, affichez les droits de
<code>~/Mail/</code></strong> </a>
<p>
Il y a un petit pi<70>ge dans cette question. En effet, si vous tapez</p>
<pre>
ls -l Mail/
</pre>
<p>
vous allez obtenir le contenu du r<>pertoire <code>Mail/</code>, mais pas le
statut du r<>pertoire lui-m<>me. Il faut donc utiliser l'option <code>-d</code>
de <code>ls</code><3E>:
</p>
<pre>
<span class="prompt">bireme ~ $</span><3E>ls<6C>-ld<6C>Mail
drwx------ 2 toto litt98 512 Apr 2 19:02 /users/98/litt/toto/Mail/
</pre>
</li>
<li><a name="cd8"> <strong>Revenez dans votre r<>pertoire principal</strong>
</a>
<p>
Taper <code>cd</code>, sans arguments.
</p>
</li>
<li><a name="cd9"> <strong>Que se passe-t-il si vous vous d<>loguez alors que
vous n'<27>tes pas dans votre r<>pertoire principal<61>?</strong> </a>
<p>
Strictement rien<65>! <20>a n'a aucune importance.
</p></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>