infra / linux-bash
Arborescence et navigation
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).
| Dossier | Contient | Exemple concret |
|---|---|---|
/etc | Fichiers de configuration | /etc/nginx/nginx.conf |
/home | Données personnelles des utilisateurs | /home/ned/projets/ |
/var | Données qui changent (logs, cache) | /var/log/syslog |
/tmp | Fichiers temporaires, effacés au reboot | /tmp/upload_a1b2.tmp |
/opt | Logiciels tiers installés à part | /opt/mon-app/ |
/usr | Programmes 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.
# 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ésRésumé
/est la racine unique ; tout le reste (disques, partitions) s'y monte.pwd,cd,lssont les trois commandes de navigation les plus utilisées au quotidien.cd -etTab(complétion) font gagner un temps considérable.
Exercices pratiques
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.