Retour au cours

infra / linux-bash

Arborescence et navigation

Leçon 21 exercice

Explication

D'abord, oublie les lettres de lecteur. Sous Windows, tu as l'habitude de voir chaque disque avec sa propre lettre (C:, D:...). Sous Linux, ce système n'existe pas : il n'y a qu'un seul arbre de fichiers, et sa racine s'appelle /. Savoir naviguer dans cet arbre est la compétence la plus utilisée au quotidien, avant même de savoir écrire un script.

Ce que vous allez apprendre

  • Comprendre pourquoi Linux n'a qu'une seule racine (/) et pas de lettres de lecteur comme Windows
  • Situer les dossiers clés du FHS (/etc, /home, /var, /tmp) et savoir ce qui va où
  • Distinguer un chemin absolu (/var/log) d'un chemin relatif (../logs) et savoir quand utiliser lequel
  • Naviguer efficacement avec cd, pwd, cd - et la complétion par tabulation
  • Éviter le piège classique des scripts qui cassent selon leur dossier de lancement

Dans quel contexte ?

Un développeur vient de se connecter en SSH sur un serveur Ubuntu qu'il ne connaît pas, pour comprendre pourquoi le service mon-app ne démarre pas. Il ne sait rien de cette machine : il doit deviner où se trouvent les logs (/var/log/mon-app/), où est la configuration (/etc/mon-app/config.yml) et où est installée l'application elle-même (/opt/mon-app/). Sans connaître la convention FHS, il perdrait un temps précieux à chercher au hasard.

Un disque externe, une clé USB ou un espace de stockage supplémentaire ne créent jamais de nouvelle racine sous Linux. Ils viennent se "greffer" (on dit "monter") à un endroit précis de cet arbre unique. C'est un changement de mentalité important si tu viens de Windows, mais une fois assimilé, il simplifie beaucoup les choses.

Une fois cette idée acquise, il faut savoir où ranger quoi

Si chaque distribution Linux rangeait ses fichiers n'importe où, aucun logiciel ne fonctionnerait de façon prévisible d'une machine à l'autre. C'est pour ça qu'une convention existe, le FHS (Filesystem Hierarchy Standard).

DossierContientExemple concret
/etcFichiers de configuration/etc/nginx/nginx.conf
/homeDonnées personnelles des utilisateurs/home/ned/projets/
/varDonnées qui changent (logs, cache)/var/log/syslog
/tmpFichiers temporaires, effacés au reboot/tmp/upload_a1b2.tmp
/optLogiciels tiers installés à part/opt/mon-app/
/usrProgrammes et bibliothèques du système/usr/bin/python3

Elle est simple à retenir par petits blocs. Connaître ces emplacements permet de te repérer sur n'importe quel serveur Linux, même la toute première fois que tu t'y connectes.

Prérequis

Cette leçon suppose que tu sais déjà ouvrir un terminal et taper une commande simple (voir la leçon précédente sur le shell). Aucune autre connaissance n'est nécessaire.

Maintenant, comment décrire un emplacement précis ?

Il existe deux façons d'indiquer où se trouve un fichier. La première, le chemin absolu, part toujours de la racine (/var/log) et fonctionne depuis n'importe où dans le système.

La seconde, le chemin relatif, part de l'endroit où tu te trouves actuellement (logs, ../). Son sens change selon ton répertoire courant : c'est justement ce qui en fait une source d'erreurs fréquente.

Piège fréquent

Un script qui utilise des chemins relatifs, comme cd logs && rm *.tmp, peut fonctionner parfaitement lancé depuis /opt/mon-app/, puis supprimer les mauvais fichiers — ou planter — lancé depuis un autre dossier. La règle de prudence : en cas de doute, préfère toujours un chemin absolu dans un script destiné à tourner automatiquement (via cron, par exemple).

Le réflexe à prendre pour aller vite

cd - retourne instantanément au dossier précédent, très utile pour faire des allers-retours entre deux emplacements sans retaper le chemin complet à chaque fois. La touche Tab complète automatiquement un nom de fichier ou de dossier, et appuyée deux fois, elle liste toutes les possibilités quand plusieurs fichiers commencent pareil.

Maintenant que tu as la carte du territoire dans lequel le shell navigue, la prochaine leçon sur la manipulation de fichiers (créer, copier, déplacer, supprimer) sera beaucoup plus naturelle : sans une bonne maîtrise de pwd, cd et ls, chaque commande de cette prochaine leçon serait beaucoup plus laborieuse.

Commandes & code

Arborescence et navigation

Linux organise tout sous une racine unique /, contrairement à Windows.

bash
# Structure standard (FHS - Filesystem Hierarchy Standard)
# /bin  -> binaires essentiels        /etc  -> fichiers de configuration
# /home -> répertoires utilisateurs   /var  -> données variables (logs, cache)
# /tmp  -> fichiers temporaires       /usr  -> programmes et libs installés
# /opt  -> logiciels tiers            /root -> home de root
# /proc -> pseudo-fs, infos noyau/process en temps réel
# /dev  -> fichiers spéciaux des périphériques

pwd                        # affiche le répertoire courant (print working directory)

cd /var/log                # chemin absolu
cd logs                    # chemin relatif
cd ..                      # remonte d'un niveau
cd ../..                   # remonte de deux niveaux
cd -                       # retourne au répertoire précédent
cd ~                       # retourne au home
cd                          # équivalent à cd ~
cd ~autre_user              # home d'un autre utilisateur

ls                          # liste le contenu
ls -l                        # format long (permissions, taille, date)
ls -la                       # inclut les fichiers cachés (.dotfiles)
ls -lh                        # tailles lisibles par un humain (K/M/G)
ls -lt                        # trié par date de modification décroissante
ls -lS                         # trié par taille décroissante
ls -R                           # récursif
ls -d */                        # liste uniquement les dossiers

tree -L 2                        # arborescence sur 2 niveaux (paquet "tree")

# Chemins spéciaux utiles dans les scripts
.                # répertoire courant
..               # répertoire parent
~                # home de l'utilisateur courant
-                # répertoire précédent (avec cd)

# Compléter un chemin sans le taper en entier : touche Tab
# Tab une fois = complète si non ambigu, Tab deux fois = liste les possibilités

Résumé

  • / est la racine unique ; tout le reste (disques, partitions) s'y monte.
  • pwd, cd, ls sont les trois commandes de navigation les plus utilisées au quotidien.
  • cd - et Tab (complétion) font gagner un temps considérable.

Exercices pratiques

1 disponible
1

Mission : localiser une panne sans connaître le serveur

Objectif : Utiliser le FHS et la distinction chemin absolu/relatif pour diagnostiquer un service en échec sur une machine jamais vue.

Contexte

Tu viens de te connecter en SSH sur un serveur Ubuntu de production que tu ne connais pas. Le service mon-app refuse de démarrer. Tu n'as accès à aucune documentation : tu dois t'appuyer uniquement sur les conventions du système pour retrouver les bons fichiers.

Réponds aux questions dans l'ordre : chacune s'appuie sur la précédente.

Résoudre l’exercice →