La structure des répertoires
Objectif : découvrir sommairement l'organisation d'un système Linux.
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.
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 utilisateur, 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 0
drwx------. 2 microlinux microlinux 83 23 avril 08:35 microlinux
Pour illustrer le rôle du répertoire /home
, nous allons créer trois nouveaux
utilisateurs :
$ sudo useradd -c "Nicolas Kovacs" nkovacs
$ sudo useradd -c "Jean Mortreux" jmortreux
$ sudo useradd -c "Agnès Debuf" adebuf
Les répertoires utilisateur correspondants se trouvent ici :
$ ls -l
total 0
drwx------. 2 adebuf adebuf 62 5 mai 07:53 adebuf
drwx------. 2 jmortreux jmortreux 62 5 mai 07:52 jmortreux
drwx------. 2 microlinux microlinux 83 23 avril 08:35 microlinux
drwx------. 2 nkovacs nkovacs 62 5 mai 07:52 nkovacs
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 32
lrwxrwxrwx. 1 root root 7 23 avril 08:18 bin -> usr/bin
dr-xr-xr-x. 4 root root 4096 23 avril 08:27 boot
drwxr-xr-x. 19 root root 3060 5 mai 07:49 dev
drwxr-xr-x. 75 root root 8192 5 mai 07:53 etc
drwxr-xr-x. 6 root root 70 5 mai 07:53 home
lrwxrwxrwx. 1 root root 7 23 avril 08:18 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 23 avril 08:18 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 11 avril 2018 media
drwxr-xr-x. 2 root root 6 11 avril 2018 mnt
drwxr-xr-x. 2 root root 6 11 avril 2018 opt
dr-xr-xr-x. 139 root root 0 5 mai 07:49 proc
dr-xr-x---. 2 root root 4096 23 avril 08:27 root
drwxr-xr-x. 24 root root 740 5 mai 07:49 run
lrwxrwxrwx. 1 root root 8 23 avril 08:18 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 11 avril 2018 srv
dr-xr-xr-x. 13 root root 0 5 mai 07:49 sys
drwxrwxrwt. 8 root root 4096 5 mai 07:49 tmp
drwxr-xr-x. 13 root root 4096 23 avril 08:18 usr
drwxr-xr-x. 19 root root 4096 23 avril 08:28 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 Oracle Linux, /bin
est un lien symbolique pointant vers /usr/bin
.
Nous aborderons les liens symboliques un peu plus loin.
$ ls /bin
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) :
$ ls /boot
Le fichier vmlinuz-3.10.0-xxxx.el7.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 respectivement
dans /boot/grub
et /boot/grub2
. Si cela ne vous évoque pas grand-chose pour
l'instant, ne vous tracassez pas.
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
:
$ ls /dev
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 courante.
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 1115 Oct 14 07:19 passwd
$ 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
...
microlinux:x:1000:1000:Microlinux:/home/microlinux:/bin/bash
nkovacs:x:1001:1001:Nicolas Kovacs:/home/nkovacs:/bin/bash
jmortreux:x:1002:1002:Jean Mortreux:/home/jmortreux:/bin/bash
adebuf:x:1003:1003:Agnès Debuf:/home/adebuf:/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.
Si vous êtes curieux, jetez un oeil à 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.
Le répertoire /lib
Les bibliothèques partagées par les programmes de /bin
et /sbin
se trouvent
dans /lib
(comme libraries, "bibliothèques" en français).
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
répertoire 3.10.0-xxxx.el7.x86_64
. Vous remarquerez un air de parenté avec le
nom du noyau vmlinuz-3.10.0-xxxx.el7.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 Mac OS X 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 dans le répertoire 3.10.0-xxxx.el7.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 oeil dans quelques-uns de ces répertoires et observez les différents
fichiers .ko
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
et 8139too.ko
dans le répertoire realtek
correspondent à
une carte réseau équipée d'une puce (chip) Realtek 8139.
De manière similaire, les fichiers commençant par al
et atl
dans le
répertoire atheros
correspondent à des cartes réseau Atheros, e1000.ko
et
e1000e.ko
dans l'arborescence intel
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, /media et /run
Les répertoires /media
et /mnt
constituent par convention les points de
montage de votre système. Le répertoire /run
est un ajout récent à la
hiérarchie sous Linux, dont un des rôles est de prendre la relève de /media
.
C'est ici que se trouvent vos disques D:
, E:
, F:
, etc.
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
que nous avons vu) -
la mémoire vive et la quantité utilisée (
/proc/meminfo
) -
la synchronisation d'une grappe de disques RAID (
/proc/mdstat
)
Quant au "système de fichiers virtuel", on peut le considérer comme 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 utilisateur 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 de sécurité.
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 d'utilisateur 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.
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.
$ /sbin/ip addr
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
Resources, aucun lien avec us(e)r), renferme précisément tout ce qui n'est
pas nécessaire au fonctionnement minimal du système. Vous serez d'ailleurs
peut-être surpris d'apprendre que cela représente la part du lion. Sur notre
installation serveur minimale, /usr
contient près de 90 % 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
.
Même sur notre installation minimale, l'arborescence /usr
compte déjà plus de
25 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.
Sous Linux,
/usr/bin
représente à peu de choses près l'équivalent du répertoireC:\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 :
-
des journaux
-
des boîtes aux lettres de messagerie
-
des sites web
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
É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 deux commandes suivantes sans vous
préoccuper des détails pour l'instant.
$ sudo find /usr -type f 2> /dev/null | wc -l
26330
$ du -sh /* 2> /dev/null
0 /bin
93M /boot
...
1.1G /usr
99M /var
Le système compte un total de 26 330 fichiers en dessous de /usr
, et
cette arborescence occupe 1.1 Go sur mon disque dur.
Installez le manuel en ligne :
$ sudo yum install man-pages man-pages-fr
Lisez la page de manuel qui décrit en détail la structure (ou hiérarchie) de votre système :
$ man hier
-
Utilisez les touches fléchées pour naviguer dans la documentation.
-
Le raccourci Q permet de quitter le manuel en ligne.
La rédaction de ces cours demande du temps et des quantités significatives de café espresso. Vous appréciez cette formation ? Offrez un café au formateur en cliquant sur la tasse.