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

288 lines
6.6 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="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é des exercices sur les répertoires
(<code>mkdir</code>, <code>rmdir</code>, <code>cd</code>)</h1>
<p>
Ces exercices sont des questions de cours : 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 à se déplacer dans
les pages de man... et la commande servant à 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éez trois répertoires en une seule ligne de
commande</strong></a>.
<p>
Si vous voulez cré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>  ?</strong> </a>
<p>Vous créez chez vous un répertoire appelé <code>mkdir</code>.</p>
</li>
<li><a name="mk4"> <strong>Vous voulez détruire un répertoire
<code>bla/</code>... mais ça ne marche pas.</strong> </a>
<p>
<code>ls</code> vous dit qu'il est vide, et pourtant vous ne réussissez pas à
l'effacer : c'est qu'il n'est pas vide. Il doit y avoir des fichiers
cachés, commenç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és.
</p></li>
<li><a name="mk5"> <strong>Est-ce que <code>mkdir</code> peut prendre des
options ?</strong> </a>
<p>
Oui, une : l'option <code>-p</code>, dont on va parler tout de suite.
</p></li>
<li><a name="mk6"> <strong>À quelle condition est-ce que la ligne de commande
«<code>mkdir Rapport/annexes</code>» peut fonctionner et créer effectivement
ce sous-répertoire ? </strong> </a>
<p>
Il faut que le répertoire <code>Rapport</code> existe, pour que l'on puisse y
cré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éer à la fois un répertoire et un sous-répertoire de ce
ré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éé, et dans ce répertoire un
sous-répertoire <code>annexes</code>.
</p></li>
<li><a name="mk8"> <strong> Comment créer un répertoire en spécifiant des
droits ? </strong> </a>
<p>
On utilise l'option <code>-m</code> (<em>mode</em>) de <code>mkdir</code>.
Par exemple :
</p>
<pre>
<span class="bireme ~ $">bireme ~ $</span> mkdir -m 700 Mail
<span class="bireme ~ $">bireme ~ $</span> ls -ld 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 :</strong></a>
<pre> rmdir -p toto/tata/tutu/</pre>
<p>
Cette commande efface toute la hiérarchie des répertoires, à 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é mais pas
<code>toto/</code>, et le programme s'arrête.
</p></li>
<li><a name="mk10"> <strong>Création récursive sans message d'erreur
</strong> </a>
<p>
On achè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éé si <code>toto/</code> existe
déjà; et si <code>toto/</code> n'existe pas, ce répertoire et son
sous-répertoire sont créé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 : apprendre à se servir de <code>.</code> et
<code>..</code> («point» et «point point»). <code>..</code> désigne le
ré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ès utile avec des
commandes comme <code>mv</code> ou <code>cp</code>, où il signifie en fait
«ici».
</p>
<p class="centre">
<a name="arbo">
<img src="exocd.gif" alt="[Exemple d'arborescence]" />
</a>
</p>
<ol>
<li><a name="cd1"> <strong>Dans quel répertoire vous trouvez-vous quand vous
vous loguez ?</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 êtes, affichez les droits de
<code>~/Mail/</code></strong> </a>
<p>
Il y a un petit piè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> :
</p>
<pre>
<span class="prompt">bireme ~ $</span> ls -ld 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'êtes pas dans votre répertoire principal ?</strong> </a>
<p>
Strictement rien ! Ça n'a aucune importance.
</p></li>
</ol>
<div class="metainformation">
Auteur : Émilia Robin, Joël Riou. Dernière modification le 2002-12-08.
</div>
</body>
</html>