La structure des répertoires
Vous avez peut-être déjà vu ces cars de touristes chinois, ornés du sigle publicitaire Visit Europe in six days. Le but du jeu de cette formule touristique consiste apparemment à parcourir une moyenne de mille kilomètres par jour pour avoir tout juste le temps de prendre en photo le sourire exténué des compatriotes devant Big Ben, le Vésuve, la maison natale de Mozart et les champs de lavande de Saint-Rémy-de-Provence.
C'est un peu dans le même esprit que nous allons entreprendre une première visite sommaire du système, maintenant que nous savons nous déplacer dans les répertoires. Un système Linux comme celui que nous venons d'installer est composé de milliers de répertoires et de sous-répertoires (29841 très exactement), contenant des dizaines voire même des centaines de milliers de fichiers (276100 très exactement). Si cette idée vous est insupportable, songez à la découverte d'une grande ville. Mettez-vous dans la peau d'un touriste qui vient passer une semaine à Marseille. La ville est constituée de centaines de rues avec des milliers d'immeubles et des centaines de milliers de gens. Est-ce que ça vous empêchera d'aller vous balader sur la Canebière ou de boire un café au Vieux Port ? Non ? Bon.
Où suis-je ?
Parmi les questions que peuvent se poser les utilisateurs de Windows qui viennent de passer à Linux, voici les plus fréquentes :
“Lorsque je viens de me connecter au système, où est-ce que je me retrouve ?”
“Où sont mes fichiers et mes documents ?”
“Où est mon lecteur
C:
?”
Une structure en arborescence
Comme la plupart des systèmes d'exploitation modernes, Linux enregistre tous ses fichiers dans une structure organisée de façon hiérarchique, en arborescence. Imaginez votre système Linux comme un de ces grands classeurs de dossiers qu'on voit dans les bureaux. Ce genre de meuble se subdivise en tiroirs, chaque tiroir pouvant contenir une série de classeurs qui renferment des documents ou d'autres classeurs à leur tour. La métaphore est rudimentaire, mais elle vous aidera à vous faire une première idée.
Le principe des poupées russes
Une métaphore autrement parlante viendra compléter votre vision du système de fichiers : celle des poupées russes. Vous connaissez certainement le principe des poupées gigognes qui s'emboîtent les unes dans les autres. Dans un système Linux comme dans d'autres systèmes, chaque répertoire peut ainsi contenir d'autres répertoires, contenant eux-mêmes des sous-répertoires, jusqu'à ce qu'on arrive au bout de la hiérarchie.
Home sweet home
En partant de votre répertoire personnel, montez d'un cran (cd ..
) dans le
répertoire /home
. Vous y verrez le répertoire correspondant à l'utilisateur
initial :
$ cd ..
$ pwd
/home
$ ls -l
total 4
drwx------. 15 microlinux microlinux 4096 15 sept. 09:28 microlinux
Pour illustrer le rôle du répertoire /home
, nous allons créer trois nouveaux
utilisateurs :
$ sudo useradd -c "Jean Mortreux" jmortreux
$ sudo useradd -c "Marion Chabaud" mchabaud
$ sudo useradd -c "Wafaa Chenaoui" wchenaoui
Les répertoires personnels correspondants se trouvent ici :
$ ls -l
total 4
drwx------. 3 jmortreux jmortreux 78 17 sept. 07:48 jmortreux
drwx------. 3 mchabaud mchabaud 78 17 sept. 07:48 mchabaud
drwx------. 15 microlinux microlinux 4096 15 sept. 09:28 microlinux
drwx------. 3 wchenaoui wchenaoui 78 17 sept. 07:48 wchenaoui
Nous verrons la gestion des utilisateurs un peu plus loin.
Remonter à la racine : /
Partant du répertoire /home
, si vous montez encore d'un cran (cd ..
), vous
vous retrouvez à la racine du système de fichiers, symbolisée par une barre
oblique /
:
$ cd ..
$ pwd
/
$ ls -l
total 24
dr-xr-xr-x. 2 root root 6 2 oct. 2024 afs
lrwxrwxrwx. 1 root root 7 2 oct. 2024 bin -> usr/bin
dr-xr-xr-x. 6 root root 4096 11 sept. 10:04 boot
drwxr-xr-x. 21 root root 3780 17 sept. 07:45 dev
drwxr-xr-x. 151 root root 8192 17 sept. 07:48 etc
drwxr-xr-x. 6 root root 74 17 sept. 07:48 home
lrwxrwxrwx. 1 root root 7 2 oct. 2024 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 2 oct. 2024 lib64 -> usr/lib64
drwx------. 2 root root 6 20 mai 22:10 lost+found
drwxr-xr-x. 2 root root 6 2 oct. 2024 media
drwxr-xr-x. 2 root root 6 2 oct. 2024 mnt
drwxr-xr-x. 2 root root 6 2 oct. 2024 opt
dr-xr-xr-x. 226 root root 0 17 sept. 07:45 proc
dr-xr-x---. 6 root root 4096 12 sept. 09:48 root
drwxr-xr-x. 50 root root 1300 17 sept. 07:45 run
lrwxrwxrwx. 1 root root 8 2 oct. 2024 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 2 oct. 2024 srv
dr-xr-xr-x. 13 root root 0 17 sept. 07:45 sys
drwxrwxrwt. 15 root root 340 17 sept. 07:47 tmp
drwxr-xr-x. 12 root root 144 20 mai 22:12 usr
drwxr-xr-x. 20 root root 4096 20 mai 22:19 var
Le répertoire /bin
Historiquement, le répertoire /bin
(pour binaries ou « binaires ») contient des
commandes simples pour tous les utilisateurs et, plus précisément, toutes les
commandes dont le système a besoin pour démarrer correctement. Sur notre
système AlmaLinux, /bin
est un lien symbolique pointant vers /usr/bin
.
Nous aborderons les liens symboliques un peu plus loin.
Le répertoire /boot
/boot
est l'endroit où un système Linux range tout ce qu'il lui faut pour
démarrer (to boot signifie « démarrer » en anglais) :
-
Le fichier
vmlinuz-5.14.0-xxxx.el9_y.x86_64
est le noyau de votre machine. Vous pouvez en avoir un seul ou toute une collection dans ce répertoire, ce que nous verrons également plus loin. En revanche, vous n'en utiliserez jamais qu'un seul à la fois. -
Le noyau (ou kernel) est la partie du système d'exploitation qui est la plus près de votre matériel. C'est précisément ce fichier qui est chargé, dès que GRUB (GRand Unified Bootloader, le chargeur de démarrage) passe la main au système. GRUB est en quelque sorte un logiciel ayant pour seule tâche de démarrer le noyau. Les fichiers utilisés par GRUB se trouvent dans
/boot/grub2
. Si cela ne vous évoque pas grand-chose pour l'instant, ne vous tracassez pas.
Accès refusé
C'est tout à fait normal que vous n'ayez pas accès à /boot/grub2
en tant
que simple utilisateur. Le chargeur de démarrage fait partie des composants
vitaux de votre système et un utilisateur « commun des mortels »
n'a rien à y faire. Pour l'instant, contentez-vous de savoir que ces
fichiers existent et qu'ils sont rangés par ici.
Le répertoire /dev
Le répertoire /dev
(comme device, qui signifie « périphérique »)
est peuplé d'une multitude de fichiers qui symbolisent chacun un périphérique
de votre machine. Repérez par exemple /dev/sda
qui symbolise votre premier
disque dur, avec les partitions correspondantes /dev/sda1
et
/dev/sda2
:
Le répertoire /etc
L'étymologie de /etc
est controversée. C'est un de ces cas de figure assez
fréquents dans la vie quotidienne où l'acceptation erronée a pris le dessus
pour devenir monnaie courante1.
La tradition veut que ETC
signifie Editable Text Configuration,
c'est-à-dire « configuration éditable en mode texte ». Voyons ce que
cela signifie concrètement.
Dans le répertoire /etc
, repérez le fichier passwd
et affichez son
contenu :
$ cd /etc
$ ls -l passwd
-rw-r--r--. 1 root root 2374 17 sept. 07:48 passwd
[microlinux@sandbox etc]$ cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
...
microlinux:x:1000:1000:Microlinux:/home/microlinux:/bin/bash
jmortreux:x:1001:1001:Jean Mortreux:/home/jmortreux:/bin/bash
mchabaud:x:1002:1002:Marion Chabaud:/home/mchabaud:/bin/bash
wchenaoui:x:1003:1003:Wafaa Chenaoui:/home/wchenaoui:/bin/bash
-
La fin du fichier contient visiblement la configuration des utilisateurs standards du système.
-
Les mots de passe des utilisateurs sont stockés dans un endroit sécurisé.
La configuration d'un système Linux – qu'il s'agisse d'un simple poste de travail ou d'un cluster de calcul du CERN ou de la NASA – est stockée dans de simples fichiers texte humainement lisibles. Il est donc possible de configurer le système en éditant ces fichiers avec un éditeur de texte comme seul outil.
Une base obscure
En comparaison, un système Windows n'offre pas cette transparence. Sur ce dernier, les opérations du système sont retranscrites sous forme de graffitis écrits dans une obscure base de registre, illisible pour un humain.
Si vous êtes curieux, jetez un œil à quelques autres fichiers de ce répertoire,
sans vous laisser intimider par leurs noms barbares : DIR_COLORS
, hostname
,
hosts
, group
, fstab
ou profile
. Ne vous inquiétez pas si vous n'y
comprenez pas grand-chose. Retenez simplement que ce sont des fichiers au
format texte simple.
Les répertoires /lib
et /lib64
Les bibliothèques partagées par les programmes de /bin
et /sbin
se trouvent
dans /lib
et /lib64
(comme libraries, « bibliothèques » en
français).
Qu'est-ce qu'une bibliothèque ?
Un programme n'est pas forcément un bloc monolithique. Il se sert d'un ensemble de fonctions qui se situent dans une bibliothèque partagée. Ces fichiers ne s'exécutent pas directement. Ils contiennent du code que l'on ne veut pas réécrire chaque fois qu'un programme doit exécuter une fonction similaire (par exemple ouvrir une fenêtre Enregistrer sous ou calculer un cosinus).
Dans un système Windows, ce sont tous ces fichiers .DLL
(Dynamic Link
Library, c'est-à-dire « bibliothèque de liens dynamiques ») que
vous trouverez dans le répertoire C:\WINDOWS\SYSTEM\
. Sur votre système
Linux, ce sont tous les fichiers .so
(comme shared object qui signifie
« objet partagé »).
Si vous vous rendez dans le répertoire /lib/modules
, vous y trouverez un ou
plusieurs répertoires du genre 5.14.0-xxxx.el9_y.x86_64
. Vous remarquerez un
air de parenté avec le nom du noyau vmlinuz-5.14.0-xxxx.el9_y.x86_64
.
Effectivement, tous les fichiers contenus dans ce répertoire appartiennent au noyau. Ce sont là les « modules », l'équivalent de ce que les utilisateurs de Windows ou macOS connaissent sous la désignation de pilotes (drivers ou « gestionnaires de périphérique ») : des petits bouts de code que l'on charge dans le noyau pour lui permettre de gérer tel ou tel périphérique.
Entrez au hasard dans un des répertoires 5.14.0-xxxx.el9_y.x86_64
, puis
continuez dans l'arborescence kernel/drivers/net/ethernet
. Dans la liste de
répertoires qui s'affiche, vous reconnaîtrez peut-être vaguement des noms de
fabricants : atheros
, broadcom
, intel
, realtek
, etc.
Jetez un œil dans quelques-uns de ces répertoires et observez les différents
fichiers .ko.xz
qu'ils contiennent. Chacun correspond à un certain type de
matériel, plus précisément à une série de cartes réseau.
-
Ainsi,
8139cp.ko.xz
et8139too.ko.xz
dans le répertoirerealtek
correspondent à une carte réseau équipée d'une puce (chip) Realtek 8139. -
De manière similaire, les fichiers commençant par
al
etatl
dans le répertoireatheros
correspondent à des cartes réseau Atheros,e1000.ko.xz
ete1000e.ko.xz
dans l'arborescenceintel
gèrent les cartes réseau Intel et ainsi de suite.
Dans la plupart des cas, le nom du module permet de deviner quel matériel lui correspond.
Les répertoires /mnt
et /media
Les répertoires /media
et /mnt
constituent par convention les points de
montage de votre système.
Le répertoire /run
Le répertoire /run
est un ajout relativement récent à la hiérarchie sous
Linux, dont un des rôles est de prendre la relève de /media
.
Dans un système Linux, lorsque vous insérez un périphérique amovible comme un disque dur externe, une clé USB, un CD-Rom ou un DVD, il doit être « monté ». Cela signifie que le système de fichiers du périphérique doit être intégré à l'arborescence du système. Les données sont ensuite accessibles en dessous du répertoire qui constitue ce qu'on appelle le « point de montage ». Avant d'enlever le périphérique, celui-ci doit être « démonté », c'est-à-dire que l'on indique au système de fichiers que les données du périphérique amovible ne doivent plus être englobées.
-
Sur un serveur Linux dépourvu d'environnement graphique, les opérations de montage et de démontage s'effectuent de manière traditionnelle, en tapant une série de commandes.
-
Les distributions « poste de travail » modernes gèrent les périphériques amovibles de manière complètement transparente, c'est-à-dire que le montage s'effectue automatiquement.
Le montage et le démontage constituent un des concepts auquel un habitué des
systèmes Windows peut être complètement étranger. Pour l'instant, retenez
simplement que les répertoires /media
et /run
vous donnent accès aux
données des périphériques amovibles que le système gère automatiquement, par
exemple sur un poste de travail. Quant à /mnt
, c'est le point de montage
« historique » que l'on conserve pour les systèmes de fichiers montés
manuellement, comme c'est le cas sur les serveurs.
Les répertoires /proc
et /sys
Les répertoires /proc
et /sys
contiennent un système de fichiers virtuel
qui documente à la volée le noyau et les différents processus du système. Tout
ce qu'il faut retenir ici, c'est que certains fichiers contenus dans ces
répertoires nous fourniront des informations précieuses sur le système, comme
par exemple :
-
le modèle et la fréquence du processeur (
/proc/cpuinfo
) -
la mémoire vive et la quantité utilisée (
/proc/meminfo
) -
la synchronisation d'une grappe de disques RAID (
/proc/mdstat
)
Qu'est-ce qu'un système de fichiers virtuel ?
C'est un système de fichiers volatile, dont il ne reste pas la moindre trace dès que vous éteignez la machine.
Le répertoire /root
/root
, c'est le répertoire personnel de... l'utilisateur root
! Il
n'est donc pas étonnant que vous n'y ayez pas accès en tant qu'utilisateur
normal. « Et pourquoi pas /home/root
? » penserez-vous peut-être.
L'administrateur serait-il réticent de se retrouver ainsi à pied d'égalité avec
les basses castes des utilisateurs communs ? Oui, en quelque sorte, mais
pour une simple raison technique.
Dans les installations de grande envergure, il arrive assez souvent qu'un
système Linux soit réparti sur plusieurs partitions d'un disque, voire sur
plusieurs disques et, dans certains cas, le système sur lequel vous travaillez
peut être « distribué » sur plusieurs machines, qui ne sont
d'ailleurs pas forcément dans la même pièce, ni dans le même bâtiment. Au
démarrage, le système se charge d'assembler les pièces pour vous présenter un
tout cohérent. Imaginez maintenant qu'il y ait un problème avec le disque ou
la machine contenant le répertoire /home
. Si le répertoire personnel de
root
était en dessous de /home
, il serait inaccessible. root
ne pourrait
plus s'identifier et, par conséquent, ne pourrait plus rien faire sur la
machine.
Gare aux confusions !
La langue anglaise désigne la racine du système de fichiers /
par root
directory. Gare à la confusion issue de l'homophonie avec /root
directory !
Le répertoire /sbin
Le répertoire /sbin
(system binaries, autrement dit « binaires
système ») renferme une série d'exécutables pour l'administrateur. Ces
outils servent à partitionner et formater des disques, configurer des
interfaces réseau et bien d'autres choses encore. Certaines de ces commandes
peuvent être invoquées par les utilisateurs du « commun des
mortels ». À titre d'exemple, la commande suivante affiche la
configuration réseau de votre machine :
Cependant, pour la plupart, ces utilitaires représentent l'équivalent numérique d'une tronçonneuse. Dans les mains d'un expert, ils permettent d'abattre de la besogne très rapidement. Mettez un utilisateur lambda aux commandes et attendez-vous à un massacre.
Tout comme /bin
, /sbin
est un lien symbolique qui pointe vers
l'arborescence /usr
:
Nous y venons, justement.
Le répertoire /usr
L'arborescence sous /usr
(Unix System Resources ou Unix Specific
Resources2), renferme traditionnellement tout ce qui n'est pas nécessaire
au fonctionnement minimal du système. Vous serez peut-être surpris d'apprendre
que cela représente la part du lion. Sur notre installation, /usr
contient
près de 85 % de la totalité du système. Vous constaterez que certains
répertoires ou liens symboliques rencontrés à la racine du système sont
également présents ici : /usr/bin
, /usr/lib
ou encore /usr/sbin
.
Comment on fait pour compter tous ces fichiers ?
Étant donné que la question revient souvent, je me permets d'anticiper un peu
pour vous montrer comment je m'y suis pris pour compter le nombre de fichiers
en dessous de /usr
, ou pour afficher l'espace disque occupé par les
arborescences respectives. Invoquez les trois commandes suivantes sans vous
préoccuper des détails pour l'instant :
$ du -sh / 2> /dev/null
7,8G /
$ sudo find /usr -type f 2> /dev/null | wc -l
164628
$ du -sh /usr 2> /dev/null
6,6G /usr
Le système occupe 7.8 Go d'espace disque. Il compte un total de 164 628
fichiers en dessous de /usr
, et cette arborescence occupe 6.6 Go sur mon
disque dur.
Sur notre poste de travail, l'arborescence /usr
compte déjà près de
165 000 fichiers. Avec un système d'une telle complexité, il est important
que chaque chose ait une place bien définie pour que l'on s'y retrouve :
-
/usr/sbin
comporte d'autres commandes pour l'administrateur ; -
/usr/bin
renferme la majorité des exécutables pour les utilisateurs ; -
/usr/lib
et/usr/lib64
contiennent les bibliothèques partagées de ces derniers.
Quel est le rôle des liens symboliques (ou raccourcis) /bin
, /lib
, /lib64
et /sbin
à la racine du système ? Traditionnellement, les systèmes Linux
opéraient la distinction et rangeaient dans ces répertoires le nombre
relativement limité d'applications et de bibliothèques qui étaient nécessaires
au démarrage ou au dépannage du système. Tout ce qui n'était pas vital
stricto sensu pour le démarrage avait sa place dans /usr
. Or, depuis
quelques années, on observe une tendance croissante à faire fi de cette
distinction et à fusionner /bin
et /usr/bin
, /lib
et /usr/lib
et ainsi
de suite, d'où la série de liens symboliques.
Vous venez de Windows
Sous Linux, /usr/bin
représente à peu de choses près l'équivalent du
répertoire C:\Program Files
de Windows.
Le répertoire /tmp
/tmp
est le répertoire temporaire du système, comme son nom le suggère. C'est
l'endroit destiné à recevoir les données que vous considérez d'une certaine
manière comme volatiles, c'est-à-dire celles dont vous n'avez plus besoin après
un redémarrage de la machine.
Le répertoire /var
L'arborescence en dessous de /var
contient toute une série de fichiers
variables :
-
Les journaux – ou logfiles – se situent dans
/var/log
. Ce sont des fichiers au format texte « crachés » à la volée par différents composants d'un système en marche. -
Un serveur de courrier électronique dépose les messages pour les utilisateurs dans
/var/spool/mail
. -
Et lorsque vous installez un serveur web sur votre machine, les pages de vos sites sont stockées en dessous de
/var/www
.
Pour aller plus loin
Lisez la page de manuel qui décrit en détail la structure (ou hiérarchie) de votre système :
-
Utilisez les touches fléchées pour naviguer dans la documentation.
-
La touche Q (quit) permet de quitter le manuel en ligne.