TP2 – Arborescence de fichiers et terminal de commandes

Introduction

Dans ce TP, vous apprendrez à manipuler les dossiers et fichiers à l'aide de commandes textuelles tapées dans un terminal de commandes. Il s'agit de la méthode de prédilection des informaticiens professionnels.

Arborescence de dossiers et fichiers

Définitions

Un fichier est une suite de données structurées, portant un nom et codée sur un support de stockage (disque, clé USB, CDROM, ...).

Les fichiers sont stockés dans une structure arborescente de dossiers (ou répertoires) dont l'origine est appelé la racine.

La nature arborescente vient du fait qu'un dossier peut contenir des sous-dossiers qui eux-même contiennent des sous-sous-dossiers.

Un système de fichiers est la manière dont un ensemble de dossiers et fichiers informatiques sont regroupés et rangés sur un support de stockage.

Pour identifier chaque dossier et fichier sans ambiguïté, malgré des noms éventuellement similaires, on a recours à la notion de chemins dans l'arborescence.

Ces chemins sont l'énumération des dossiers qu'il faut traverser successivement dans l'arborescence en partant d'un point donné de l'arborescence, pour atteindre un dossier ou fichier de destination.

Dans un chemin, les noms des dossiers sont séparés par un caractère : ' /' sous Linux, Android et iOS et ' \' sous Windows.

On distingue :

  • les chemins absolus qui partent d'une racine nommée de l'arborescence (racine de l'arborescence " /" ou racine d'un utilisateur " ~") ;
  • les chemins relatifs qui partent du dossier courant vers un dossier de destination dans l'arborescence.

Trois abbréviations ont un sens spécial pour décrire un chemin (" .", " ..", " ~") :

  • " ." indique le dossier courant ;
  • " .." indique le dossier parent ;
  • " ~" indique la racine de l'utilisateur courant ;
  • " ~durand" indique la racine de l'utilisateur durand.

Deux caractères servent de joker pour décrire un chemin (" ?", " *") :

  • " ?" indique un caractère quelconque ;
  • " *" indique une suite de caractères quelconque.

Exemples :

Les deux images ci-dessous représentent la même arborescence :

arborescence dans une fenêtre graphique arborescence dans un terminal

On y voit que de nombreux dossiers et fichiers portent le même nom. Il est pourtant possible de désigner chacun d'entre eux de manière unique avec des chemins.

Trouvez à quel fichier ou dossier se rapportent les chemins suivants (attention des chemins sont invalides, trouvez-en la raison !) :

Chemins absolus :
  • /Disque/Marie/Chimie/Octobre/devoir.tex
  • /Disque/Marie/Physique/devoir.tex
  • /Disque/Marie/Phys*/
  • /Disque/Pierre/Chimie/Octobre/devoir.???
  • /Disque/Pierre/Physique/Octobre/devoir.tex (invalide !)
  • /Disque/Pierre/Maths (invalide !)
  • /Disque/Pierre/C??? (invalide !)
Chemins relatifs :
  • En partant du dossier /Disque/Marie/ :
    • Chimie/Septembre/devoir.tex
    • Physique/
  • En partant du dossier /Disque/Pierre/Chimie/Septembre :
    • ./devoir.tex (' .' signifie "dossier courant")
    • ../Octobre/ (' ..' signifie "dossier parent")
    • ../../Physique/devoir.tex (on remonte de deux niveaux)

Principales commandes pour manipuler une arborescence de fichiers

Vous avez certainement l'habitude de manipuler les fichiers et dossiers à la souris par l'intermédiaire d'un gestionnaire de fichiers. Vous allez maintenant voir une autre manière d'interagir avec l'arborescence à l'aide de commandes textuelles dans un terminal de commandes.

Quand on lance un terminal, il nous place dans notre répertoire racine (" ~"). La commande cd ( change directory) permet de se déplacer dans l'arborescence.

Les principales commandes sont :

Commande Abbrév. de Signification
ls ou ls chemin list Liste le contenu du dossier courant ou indiqué par le chemin
mkdir chemin_dossier make directory Crée un dossier indiqué par chemin
cd chemin_dossier change directory Se déplace dans le dossier indiqué par chemin
cd ~ ou cd change directory Se déplace dans la racine de l'utilisateur courant
cd - change directory Se déplace dans le dossier précédent
pwd print working directory Affiche le chemin vers le dossier courant
rmdir chemin_dossier remove directory Supprime le dossier indiqué par le chemin. Celui-ci doit être vide.
cp [-r] chemin_source chemin_destination copy Copie un dossier ou fichier indiqué par chemin_source vers un dossier ou fichier indiqué par chemin_destination. L'option " -r" (comme "récursif") doit être utilisé quand on copie un dossier. Équivalent du "copier/coller" dans une interface graphique.
mv chemin_source chemin_destination move Déplace un dossier ou fichier indiqué par chemin_source vers un dossier ou fichier indiqué par chemin_destination. Équivalent du "couper/coller" dans une interface graphique.
mv fichier1 fichier2 ou mv dossier1 dossier2 move Renomme un fichier fichier1 en fichier2 ou un dossier dossier1 en dossier2. Équivalent du "renommer" dans une interface graphique.
rm [-rf] chemin remove Supprime un fichier ou dossier indiqué par chemin. l'option " -r" (pour "récursif") est nécessaire pour supprimer un dossier, et l'option " -f" (pour "force") oblige la suppression sans confirmation (à utiliser avec prudence !).
ln -s chemin_destination nom_raccourci link Crée un lien appelé nom_raccourci vers un dossier ou fichier désigné par chemin_destination. Permet d'accéder au fichier ou au dossier désigné sans qu'il soit réellement présent (données non dupliquées).

Exercice 1 – Construction d'une arborescence en lignes de commande

Dans cet exercice, nous allons représenter le plan de l'habitation ci-dessous par une arborescence de dossiers et fichiers.

Les pièces et les parties de la propriété seront des dossiers et les objets à l'intérieur de ces lieux seront des fichiers.

Création de la propriété

Félicitations, vous avez décidé de construire votre première maison !

Tapez les commandes ci-dessous pour créer une première partie de la maison. Les lignes commençant par un ' #' sont des commentaires qu'il ne faut pas écrire dans le terminal.

# Ouvrez un terminal.
# Configuration pour la première utilisation du terminal :
cp /home/IntroSysEx/.bashrc ~
bash
# Créons l'emplacement de la propriété
mkdir ~/Documents/L1/ISE/TP2/Propriété
# Oups, par défaut mkdir ne peut créer qu'un niveau de dossier à la fois.
# Par chance, l'option '-p' permet de créer autant de sous-dossiers que nécessaire.
# D'ailleurs, le manuel pour la commande mkdir le confirme :
man mkdir  # cherchez l'option '-p' et quittez avec la touche 'q'
# Deuxième tentative de création de la propriété
mkdir -p ~/Documents/L1/ISE/TP2/Propriété
# Déplaçons-nous dans notre nouvelle propriété
cd ~/Documents/L1/ISE/TP2/Propriété
# Plaçons-y un jardin
mkdir Jardin
# Admirons-le
ls
# et maintenant une allée et une terrasse
mkdir Allée Terrasse
ls
# D'après le plan, nous pouvons passer du jardin au Salon-Séjour
# Déplaçons-nous dans le Jardin
cd Jardin
# Créons le Salon-Séjour et déplaçons-nous y :
mkdir Salon-Séjour ; cd Salon-Séjour
# Créons d'un coup les trois pièces attenantes au Salon-Séjour
mkdir Cuisine WC Dégagement
# et enfin l'arrière cuisine :
mkdir Cuisine/"Arrière cuisine"
# Les accès depuis le Salon-Séjour
tree ./
# sortons de la maison en revenant sur nos pas de deux niveaux
cd ../../
# Créons le local piscine sur la terrasse
mkdir ./Terrasse/Local_piscine
# Admirons le travail accompli dans la propriété :
tree ./
.
├── Allée
├── Jardin
│   └── Salon-Séjour
│       ├── Cuisine
│       │   └── Arrière cuisine
│       ├── Dégagement
│       └── WC
└── Terrasse
    └── Local_piscine

9 directories, 0 files
# Seulement l'intérieur de la maison :
tree ./Jardin/Salon-Séjour
./Jardin/Salon-Séjour/
├── Cuisine
│   └── Arrière cuisine
├── Dégagement
└── WC

4 directories, 0 files

Circulation dans votre propriété

Le déplacement d'une pièce à l'autre se fera en indiquant des chemins dans l'arborescence.

ASTUCE : La touche TAB du clavier complète le nom des dossiers et fichiers lors de la saisie de chemins dans le terminal. Cela enlève toute faute de syntaxe et permet de s'assurer de leur existence. À utiliser systématiquement !

Complétez les commandes suivantes pour se déplacer dans les différentes pièces.

# Partons du dossier Propriété
cd ~/Documents/L1/ISE/TP2/Propriété
# Déplaçons-nous dans le dossier Salon-Séjour
cd Jardin/Salon-Séjour
# Déplacez-vous dans l'arrière cuisine
cd ___
# Revenez dans la cuisine
cd ..
# Passez aux WC
cd ___
# Sortez prendre l'air sur la terrasse
cd ___

Création de raccourcis entre les pièces

D'après le plan, nous pouvons passer de l'allée vers l'arrière cuisine. Pour simuler ce passage, nous utilisons un « lien symbolique » qui permet d'aller d'un endroit de l'arborescence à un autre endroit :

# Déplacez-vous dans l'allée
cd ___
ls -l
# Création d'un lien symbolique vers l'arrière cuisine :
ln -s ../Jardin/Salon-Séjour/Cuisine/"Arrière cuisine"
ls -l
tree .
cd ./"Arrière cuisine"
# Maintenant que vous êtes dans l'arrière cuisine, déplacez-vous dans la cuisine !
cd ___
# Comme vous le voyez, un lien symbolique fonctionne comme si on recopiait une sous-arborescence,
# et non pas comme une téléportation d'un endroit à l'autre d'une arborescence.
# Ainsi, il n'est pas possible de "remonter" dans la cuisine directement,
# il faut ressortir par l'allée et passer par le jardin et le salon pour aller dans la cuisine.
# Créez un lien qui permet de passer de l'arrière cuisine vers la terrasse
cd ___
ln -s ___ Terrasse
# Affichez l'état actuel de votre propriété :
cd ___
tree ___
Propriété
├── Allée
│   └── Arrière cuisine -> ../Jardin/Salon-Séjour/Cuisine/Arrière cuisine
├── Jardin
│   └── Salon-Séjour
│       ├── Cuisine
│       │   └── Arrière cuisine
│       │       └── Terrasse -> ../../../../Terrasse/
│       ├── Dégagement
│       └── WC
└── Terrasse
    └── Local_piscine

11 directories, 0 files

Aménagement de la propriété

Occupons-nous maintenant de faire les premiers aménagements en plaçant des objets dans les différents lieux de la propriété : une voiture dans l'allée, une piscine sur la terrasse et des arbres dans le jardin. Ces objets seront copiés depuis le dossier Centre_commercial/ qui se trouve dans le dossier /home/IntroSysEx/TP2/

#Déplacez-vous dans le dossier Centre_commercial
cd ___
# Visualisez les objets qui s'y trouvent
eog *.png &
# Copiez la piscine sur la terrasse de votre propriété
cp piscine.png ____Terrasse
# Copiez les arbres dans le jardin
cp ___ ___
# Déplacez-vous dans l'allée de la propriété
cd ___
# Collez-y la voiture qui se trouve dans le centre commercial
cp ___ ___
# Votre propriété actuellement :
cd ___
tree .
.
├── Allée
│   ├── Arrière cuisine -> ../Jardin/Salon-Séjour/Cuisine/Arrière cuisine
│   └── voiture.png
├── Jardin
│   ├── arbres.png
│   └── Salon-Séjour
│       ├── Cuisine
│       │   └── Arrière cuisine
│       │       └── Terrasse -> ../../../../Terrasse/
│       ├── Dégagement
│       └── WC
└── Terrasse
    ├── Local_piscine
    └── piscine.png

11 directories, 3 files

Déménagement du mobilier

Un camion de déménagement amène les meubles !

Celui-ci est représenté par l'archive Camion_déménagement.tgz que vous parquerez dans l'entrée de la propriété.

# Déplacez-vous dans l'allée et vérifiez que le camion est bien là
cd ___ ; ls
# Ouvrez le camion en décompressant l'archive
tar xvfz Camion_déménagement.tgz
# Supprimez l'archive
___ Camion_déménagement.tgz
# Vérifiez que le camion est bien ouvert
ls
# Montez à bord et visualisez son contenu
cd Camion_déménagement ; ls
# Les déménageurs commencent à faire leur office.
# Pour les voir vider le camion en vitesse, faites un copier-coller de la longue commande suivante :
mv c* l* ../Arrière\ cuisine; mv W* f* t*1* ../../Jardin/Salon-Séjour/; mv  t* d* ../../Terrasse/; cd ../A*/T*; mv d* Local_piscine/; cd ../../../; cd J*/S*; mv W*g Cuisine/; mv t* WC/; mv f* Dégagement/;
# (ce sont des pros, ils font ça vite en utilisant un langage condensé)
# Le problème, c'est qu'ils ont mis les meubles n'importe où dans la maison !
# Déplacez-vous dans le dossier racine de la propriété
cd ___
# Visualisez l'état de bazar dans la maison :
tree .
.
├── Allée
│   ├── Arrière cuisine -> ../Jardin/Salon-Séjour/Cuisine/Arrière cuisine
│   ├── Camion_déménagement
│   └── voiture.png
├── Jardin
│   ├── arbres.png
│   └── Salon-Séjour
│       ├── Cuisine
│       │   ├── Arrière cuisine
│       │   │   ├── canapé.png
│       │   │   ├── litA.png
│       │   │   ├── litB.png
│       │   │   ├── litC.png
│       │   │   ├── litD.png
│       │   │   └── Terrasse -> ../../../../Terrasse/
│       │   └── WC.png
│       ├── Dégagement
│       │   └── fauteuils.png
│       └── WC
│           └── table1.png
└── Terrasse
    ├── Local_piscine
    │   └── double lavabo.png
    ├── piscine.png
    └── table2.png

12 directories, 13 files

Si vous n'avez pas exactement cette arborescence, modifiez-là pour arriver dans cet état.

Si on ne peut même plus faire confiance aux professionnels... Il va falloir faire le boulot soit même.

Mais avant de ranger les meubles à leur place, il faut agrandir la maison !

Extension de la maison

À vous de créer les pièces manquantes en suivant la même logique et en observant le plan de la maison.

Vous placerez donc dans l'arborescence les dossiers suivants : Chambre1 et Chambre2 avec leur Douche, Chambre3 et sa Salle de Bain et la Chambre4.

Créez des lien de la chambre4 vers la Salle de Bain ainsi que de la Chambre3 vers le Jardin.

Rangement de la maison

On adore tous ranger sa maison !

À l'aide commandes, rangez les meubles dans les bonnes pièces jusqu'à obtenir la même organisation que sur le plan.

Départ du camion de déménagement

Le camion est vide, il peut partir...

Complétez les commandes suivantes :

# Déplacez-vous dans l'allée
cd ___/Allée
# Le camion doit être vide
ls Camion_déménagement
# Effacez ce camion
___ Camion_déménagement
# Il ne reste plus que la voiture dans l'allée
ls

Votre déménagement est terminé. À vous de profiter d'un peu de repos au bord de la piscine.

Exercice 2 – Construction d'une arborescence à la souris !

À titre de comparaison, refaites l'exercice 1 sans utiliser le terminal, uniquement avec le gestionnaire de fichiers.

Quels sont les avantages et inconvénients des deux méthodes ?


À la fin du TP, avant de sortir, n'oubliez pas de fermer la session (ne pas arrêter l'ordinateur).