# Commandes Unix

# Corrigés des exercices sur les commandes Unix élémentaires

&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.

## Exercice 1 (`joe`, `less`, `ls`)

1. Créez un fichier `premiertexte` contenant une ou deux phrases.

   Pour créer un fichier et écrire du texte dedans, il faut l'éditer avec un éditeur de votre choix. Nous proposons `nano` aux débutants. Il faut donc taper

       bireme ~ $ nano premiertexte

   Utilisation de `nano` : 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 `Ctrl-O` pour enregistrer et `Ctrl-X` pour quitter.

   Vous pouvez maintenant taper ce que vous voulez et quitter en enregistrant (`Ctrl-X` puis répondre `y` au moment où `nano` vous demande si vous voulez enregistrer le texte).

2. Visualisez le contenu de `premiertexte` sans l'éditer

   C'est la commande `less` qui permet de faire cela (ou `more`, si `less` n'est pas installée là où vous vous trouvez). Pour lire le contenu de `premiertexte`, il faut taper

       bireme ~ $ less premiertexte

   Pour quitter `less` ou `more`, taper `q`.

3. Quelle est la taille de `premiertexte` ?

   C'est l'option `-l` de `ls` qui permet de savoir la taille d'un fichier, sa date de dernière modification, etc. Vous tapez donc :

       bireme ~ $ ls -l

   Cette commande sans arguments vous donne la liste de tous vos fichiers. Si vous voulez connaître les caractéristiques de `premiertexte` et rien d'autre, tapez

       bireme ~ $ ls -l premiertexte

   La config conscrits propose l'alias `ll` pour `ls -l`.

4. Éditez `PREMIERTEXTE`. Que constatez-vous ?

   Pour éditer `PREMIERTEXTE`, vous tapez

       bireme ~ $ joe PREMIERTEXTE

   Vous constatez qu'il s'agit d'un nouveau fichier, et que vous ne retrouvez pas le contenu de `premiertexte`. C'est normal : Unix est case sensitive, c'est-à-dire sensible à la casse des caractères : majuscules et minuscules ne sont pas interchangeables. C'est pourquoi `premiertexte` et `PREMIERTEXTE` sont deux fichiers différents.

## Exercice 2 (`cp`, `ls`, `mv`)

1. Faites une copie de `premiertexte` appelée `double`

   C'est la commande `cp` (copy) qui sert à faire une copie d'un fichier, en indiquant le nom du fichier à copier puis nom du nouveau fichier. Il faut donc taper :

       bireme ~ $ cp premiertexte double

2. Comparez leurs tailles

   Comme dans l'exercice 1, c'est l'option `-l` de `ls` qui va servir. En tapant `ls -l` sans argument, vous affichez le contenu du répertoire en entier. Si vous voulez limiter l'affichage aux deux fichiers souhaités, tapez

       bireme ~ $ ls -l premiertexte double

3. Renommez `double` en `introduction`

   C'est la commande `mv` (move) qui sert à renommer un fichier. Pour renommer `double`, il faut donc taper :

       bireme ~ $ mv double introduction

   En tapant `ls`, vous pouvez vérifier que le fichier `double` a disparu au profit d'un fichier `introduction`.

4. Quelle différence y a-t-il entre `mv double introduction` et `cp double introduction` ?

   `mv` (move) renomme un fichier : seul son nom est modifié, son contenu reste inchangé et aucun autre fichier n'est créé. `double` disparaît au profit de `introduction`.

   `cp` (copy) 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. `double` et `introduction` existent de façon parallèle.

## Exercice 3 (`mkdir`, `mv`, `cp`, `ls`, `cd`)

1. Créez un répertoire `essai/`

   Il faut taper

       bireme ~ $ mkdir essai

   (make directory «essai»)

   Vous pouvez vérifier en tapant `ls` que le répertoire a bien été créé.

2. Déplacez `double` dans `essai/`

   C'est `mv` (move) qui sert à déplacer des fichiers, ainsi qu'à les renommer :

       bireme ~ $ mv double essai/

   Le slash (`/`) n'est pas obligatoire, c'est en fait un agrément pour identifier plus vite les répertoires dans une liste de fichiers

   &icone.note; C'est l'option `-F` de `ls` qui fait apparaître ce symbole; vous avez en fait un alias de `ls` sur `ls -F`).

3. Faites une copie de `premiertexte` appelée `copie`, et placez-la également dans `essai/`.

   On peut faire ça de plusieurs façons :

   - Faire la copie dans le répertoire courant, puis déplacer cette copie dans le sous-répertoire `essai/` :

         bireme ~ $ cp premiertexte copie
         bireme ~ $ mv copie essai/

   - Faire directement la copie dans le sous-répertoire `essai/` :

         bireme ~ $ cp premier texte essai/copie

   - N'oublions pas le cas où nous ne serions pas dans le répertoire d'accueil, mais dans `essai/`. On pourrait d'abord faire la copie dans le répertoire père, puis amener cette copie là où on se trouve :

         bireme ~/essai $ cp ../premier texte ../copie
         bireme ~/essai $ mv ../copie .

     Ou plus simplement, on pourrait copier le fichier du répertoire père directement dans le répertoire courant :

         bireme ~/essai $ cp ../premiertexte copie

4. Affichez une liste de ce que contient `essai/`

   Si l'on est dans le répertoire personnel, on tape :

       bireme ~ $ ls essai

   pour avoir une liste de ce que contient `essai`. Le résultat ressemblera à ça :

       bireme ~ $ ls essai
       copie  double

   Et si vous vous trouvez alors dans `essai/`, le résultat sera le suivant :

       bireme ~/essai $ ls
       copie  double

## Exercice 4 (`rmdir`, `cd`, `rm`)

1. Essayez de drétuire `essai/`. Que se passe-t-il ? Que faut-il faire pour détruire un répertoire ?

   C'est la commande `rmdir` (remove directory) 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

       rmdir: essai: directory not empty

   Il faut donc vider le répertoire pour pouvoir le détruire.

2. Détruisez tout ce que contient `essai/`

   C'est la commande `rm` qui permet de détruire des fichiers. Il faut donc taper :

       bireme ~/essai $ rm double copie

   Vous pouvez aussi vous servir de certains caractères spéciaux; ici, c'est `*` (é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 :

       bireme ~/essai $ rm *

   # &icone.attention; Attention &icone.attention;

   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 alias de `rm` sur `rm -i`; l'option `-i` est l'option «interactive», qui demande confirmation.

   Soyez donc prudents : on a vite fait de confondre `mv` (move) et `rm` (remove), et l'option `-i` n'est pas systématiquement mise.

3. Détruisez `essai/`

   Revenez dans le répertoire père (`cd ..`) et tapez :

       bireme ~ $ rmdir essai/

   (remove directory «essai»)

Auteur : Émilia Robin, Joël Riou.