<?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>