Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 411 minIntermédiaire

L'arborescence Linux (FHS), les fichiers et les liens

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • dire ce que contient chaque dossier de la racine ;
  • savoir où chercher une configuration, un journal ou des données ;
  • reconnaître les types de fichiers dans ls -l ;
  • distinguer un lien physique d'un lien symbolique.

3 exercices corrigés1 schéma

L'arborescence Linux est l'organisation unique de tous les fichiers du système, à partir d'une racine /, selon une norme commune aux distributions : le FHS (Filesystem Hierarchy Standard). Ce chapitre dit ce que contient chaque dossier principal, où chercher une configuration, un journal ou des données, explique les types de fichiers, les liens physiques et symboliques, et ce qui change avec Debian 13.

Une seule arborescence

Sous Windows, chaque disque ou partition a sa lettre : C:\, D:\. Sous Linux, il n'y a qu'un seul arbre, qui part de /. Un deuxième disque, une clé USB ou un partage réseau ne reçoivent pas de lettre : on les monte dans un dossier de l'arbre, par exemple /srv/journaux ou /mnt/usb (chapitre 13). Pour l'utilisateur, c'est un dossier comme un autre.

/la racine : un seul arbre, les disques sont montés dans des dossiers/etcconfiguration : ssh/, nginx/, passwd, fstab/homedossiers des utilisateurs : /home/clambert/rootdossier personnel de root/vardonnées variables : log/, lib/, cache/, www//srvdonnées servies : www/suivi, journaux//usrprogrammes des paquets : bin/, sbin/, lib/, share//usr/localajouts de l'administrateur (scripts maison)/optlogiciels livrés en bloc par un éditeur/tmpfichiers temporaires, en mémoire (tmpfs) sous Debian 13/bootnoyau, initramfs, GRUB ; /boot/efi : partition EFI/devpériphériques : sda, null, tty1/proc /sysfichiers virtuels créés par le noyau/rundonnées d'exécution, vidées à chaque démarrage/mnt /mediamontages temporaires et supports amovibles/bin /sbin /libliens vers /usr/bin, /usr/sbin, /usr/lib
Les dossiers de la racine d'un serveur Debian 13 et ce qu'on y trouve

Le rôle de chaque dossier

DossierContenuExemple chez Sorbier
/etcLa configuration du système et des services, en fichiers texte/etc/nginx/sites-available/suivi, /etc/ssh/sshd_config
/homeLes dossiers personnels des utilisateurs/home/clambert
/rootLe dossier personnel de root (pas dans /home, pour rester accessible si /home est sur un autre disque)
/varLes données variables : journaux (/var/log), données des services (/var/lib), files d'attente (/var/spool), cache des paquets (/var/cache/apt)/var/log/nginx/access.log, /var/lib/mysql
/srvLes données servies par la machine (sites, dépôts, fichiers échangés)/srv/www/suivi, /srv/journaux
/usrLes programmes et bibliothèques installés par les paquets : /usr/bin (commandes), /usr/sbin (commandes d'administration), /usr/lib, /usr/share (documentation, données)/usr/sbin/nginx
/usr/localCe que l'administrateur installe à la main, hors paquets (scripts maison)/usr/local/bin/archive-journaux
/optLes logiciels livrés en bloc par un éditeur/opt/zabbix… selon l'éditeur
/bootLe noyau (vmlinuz-…), l'image de démarrage (initrd.img-…) et GRUB
/devLes périphériques, sous forme de fichiers spéciaux/dev/sda, /dev/null
/proc, /sysDes systèmes de fichiers virtuels : le noyau y expose les processus et le matériel/proc/cpuinfo, /proc/meminfo
/runDonnées d'exécution, effacées à chaque démarrage (fichiers PID, sockets)/run/sshd.pid
/tmpFichiers temporaires, accessibles à tous
/mnt, /mediaPoints de montage temporaires (/mnt) et supports amovibles (/media)

Deux réflexes à prendre : une configuration se cherche dans /etc, un journal dans /var/log (ou avec journalctl, chapitre 10). Et la documentation d'un paquet s'installe dans /usr/share/doc/<paquet>, souvent avec des exemples de configuration.

Les fichiers de /etc à connaître

Une poignée de fichiers de /etc reviennent dans presque toutes les interventions. Ce sont des fichiers texte : cat pour les lire, sudoedit pour les modifier, après une copie de sauvegarde.

FichierContenuChapitre
/etc/os-releaseNom et version de la distribution (. /etc/os-release; echo $PRETTY_NAME)1
/etc/debian_versionVersion précise de Debian (par exemple 13.1)2
/etc/hostname, /etc/hostsNom de la machine, résolution locale de quelques noms11
/etc/resolv.confServeurs DNS utilisés11
/etc/network/interfacesConfiguration réseau (ifupdown)11
/etc/passwd, /etc/shadow, /etc/groupComptes, mots de passe hachés, groupes5
/etc/sudoers, /etc/sudoers.d/Règles de sudo5
/etc/fstabSystèmes de fichiers montés au démarrage13
/etc/apt/sources.list, /etc/apt/sources.list.d/Dépôts de paquets8
/etc/ssh/sshd_config, /etc/ssh/sshd_config.d/Configuration du serveur SSH12
/etc/systemd/system/Unités systemd de l'administrateur et surcharges9
/etc/cron.d/, /etc/crontabTâches planifiées du système15
/etc/login.defs, /etc/adduser.confRègles de création des comptes (plages d'UID, umask)5

Beaucoup de logiciels suivent la même organisation : un fichier principal livré par le paquet (nginx.conf, sshd_config), et un dossier en .d/ où l'administrateur dépose ses propres fichiers, lus en plus du principal (conf.d/, sshd_config.d/, sudoers.d/). Écrire dans le dossier .d/ plutôt que modifier le fichier principal évite qu'une mise à jour du paquet ne remplace ou ne bloque ta configuration.

Ce qui change avec Debian 13 pour /tmp

Sur une installation neuve de Debian 13, /tmp est un système de fichiers en mémoire (tmpfs), limité par défaut à la moitié de la mémoire vive, et vidé à chaque redémarrage. De plus, les fichiers de /tmp non utilisés depuis 10 jours sont supprimés automatiquement, et ceux de /var/tmp (qui, lui, survit aux redémarrages) après 30 jours.

console
clambert@srv-web:~$ findmnt /tmp
TARGET SOURCE FSTYPE OPTIONS
/tmp   tmpfs  tmpfs  rw,nosuid,nodev,size=1004084k,nr_inodes=1048576,inode64

Conséquence pratique : un programme ne doit jamais garder dans /tmp un fichier dont il aura besoin après un redémarrage, ni y écrire de très gros fichiers (ils consomment de la mémoire). Pour revenir à un /tmp sur disque, l'administrateur tape sudo systemctl mask tmp.mount et redémarre. Un serveur mis à niveau depuis Debian 12 garde l'ancien comportement de nettoyage, grâce au fichier /etc/tmpfiles.d/tmp.conf créé par la mise à niveau.

Les types de fichiers

« Sous Linux, tout est fichier » : un document, un dossier, un disque, un terminal, un canal entre deux processus. Le premier caractère de ls -l indique le type :

CaractèreTypeExemple
-Fichier ordinaire/etc/hostname
dDossier (directory)/etc/nginx
lLien symbolique/bin → usr/bin
bPériphérique en mode bloc (disque)/dev/sda
cPériphérique en mode caractère (terminal, /dev/null)/dev/tty1
sSocket (canal de communication local)/run/systemd/journal/socket
pTube nommé (named pipe)

L'extension d'un fichier (.conf, .sh) n'a aucune valeur pour le système : c'est une convention pour les humains. Un script s'exécute parce qu'il a le droit d'exécution, pas parce qu'il finit par .sh. file et stat donnent la nature et les métadonnées d'un fichier.

Inodes, liens physiques et liens symboliques

Sur le disque, un fichier est un inode : une fiche qui porte son type, ses droits, son propriétaire, sa taille, ses dates et l'emplacement de ses données, mais pas son nom. Le nom est rangé dans le dossier, qui associe des noms à des numéros d'inode. ls -i affiche ces numéros.

  • Un lien physique (hard link, ln source lien) est un deuxième nom pour le même inode. Les deux noms sont parfaitement équivalents ; les données ne disparaissent qu'à la suppression du dernier nom. Un lien physique ne peut ni désigner un dossier, ni traverser vers un autre système de fichiers.
  • Un lien symbolique (symlink, ln -s cible lien) est un petit fichier qui contient le chemin de sa cible. Il peut pointer vers un dossier ou un autre disque ; si la cible est supprimée ou déplacée, le lien est cassé.

nginx en fait un usage typique sur Debian : les sites sont décrits dans sites-available, et on active un site en créant un lien symbolique dans sites-enabled :

console
clambert@srv-web:~$ sudo ln -s /etc/nginx/sites-available/suivi /etc/nginx/sites-enabled/suivi
clambert@srv-web:~$ ls -l /etc/nginx/sites-enabled/
lrwxrwxrwx 1 root root 32  4 nov.  09:41 suivi -> /etc/nginx/sites-available/suivi

Pour désactiver le site, on supprime le lien (sudo rm /etc/nginx/sites-enabled/suivi) : la configuration reste intacte dans sites-available. Les droits rwxrwxrwx d'un lien symbolique ne comptent pas : ce sont ceux de la cible qui s'appliquent.

Exercices

Exercice 1 sur 3 Où chercher ? Réussi À revoir

Dans quel dossier cherches-tu :

  1. le fichier qui liste les comptes utilisateurs ;
  2. les journaux d'accès du serveur web ;
  3. le programme ip ;
  4. les fichiers du site de suivi des livraisons ;
  5. le script d'archivage écrit par Moussa Diallo ;
  6. le modèle du processeur de la machine.
Voir la réponseMasquer la réponse de l'exercice 1
  1. /etc/passwd.
  2. /var/log/nginx/ (access.log, error.log).
  3. /usr/sbin/ip (accessible aussi par /sbin/ip, lien de la fusion de /usr) ; which ip le confirme.
  4. /srv/www/suivi : les données servies par la machine vont dans /srv. Le paquet nginx de Debian propose /var/www/html pour sa page par défaut ; les deux se rencontrent.
  5. /usr/local/bin/ : les programmes installés à la main, hors paquets.
  6. /proc/cpuinfo (ou la commande lscpu).

Tu avais trouvé ?

Exercice 2 sur 3 Liens physiques et symboliques Réussi À revoir

On exécute dans /tmp/essai :

bash
echo "version 1" > config.txt
ln config.txt copie-physique
ln -s config.txt lien-symbolique
rm config.txt

Que donnent ensuite cat copie-physique et cat lien-symbolique ? Pourquoi ?

Voir la réponseMasquer la réponse de l'exercice 2
  • cat copie-physique affiche version 1. copie-physique est un second nom du même inode : supprimer config.txt retire un nom, mais l'inode et ses données restent tant qu'un nom existe.
  • cat lien-symbolique affiche une erreur cat: lien-symbolique: Aucun fichier ou dossier de ce nom. Le lien contient le chemin config.txt, qui n'existe plus : il est cassé. ls -l l'affiche encore, avec sa flèche vers une cible absente.

Tu avais trouvé ?

Exercice 3 sur 3 Un fichier temporaire perdu Réussi À revoir

Un script de srv-web prépare chaque nuit un export dans /tmp/export-livraisons.csv, qu'un second script envoie le lendemain matin. Depuis l'installation de srv-web sous Debian 13, l'envoi échoue chaque lundi, après le redémarrage hebdomadaire du dimanche. Explique et corrige.

Voir la réponseMasquer la réponse de l'exercice 3

Sous Debian 13, /tmp est un tmpfs en mémoire : il est vidé à chaque redémarrage. L'export du samedi soir disparaît au redémarrage du dimanche, d'où l'échec du lundi. Les fichiers qu'on doit retrouver après un redémarrage se rangent ailleurs : dans /var/tmp (conservé, nettoyé après 30 jours) ou, mieux, dans un dossier de l'application comme /var/lib/suivi/exports, créé avec les bons droits. Le dossier /tmp ne sert qu'aux fichiers de travail éphémères.

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Utilisateurs, groupes et sudo sous LinuxRevoir le sommaire du cours