4.4. Structure du système de fichiers

Nous allons à présent nous intéresser à l'organisation du système de fichiers de Linux. Ce système de fichiers contient un certain nombre de répertoires et de fichiers standards, qui ont chacun une fonction bien définie. Cette structure standard permet de gérer tous les systèmes Linux de manière homogène : les programmes savent où trouver ce dont ils ont besoin. Ils sont donc portables d'un système à un autre, et les utilisateurs ne sont pas dépaysés lorsqu'ils changent de machine (en fait, cette structure est à peu près la même pour tous les systèmes Unix, ce qui donne encore plus de poids à l'argument précédent).

Cette organisation standard du système de fichiers a été conçue de telle manière que les données et les programmes sont placés chacun à leur place, et qu'ils puissent être facilement intégrés dans un réseau. L'intégration dans un réseau sous-entend que les fichiers des programmes peuvent être partagés par les différentes machines de ce réseau, ce qui permet d'économiser beaucoup de place. De plus, il est possible d'accéder à la plupart des ressources du système grâce à une interface uniforme. En particulier, il est possible d'accéder à tous les périphériques installés sur l'ordinateur par l'intermédiaire de fichiers spéciaux, et on peut récupérer des informations sur le système mises à disposition par le noyau simplement en lisant des fichiers générés par un pseudo système de fichiers. Le tableau suivant décrit les principaux éléments de l'arborescence du système de fichiers de Linux.

Tableau 4-2. Hiérarchie standard du système de fichiers

RépertoireSignification
/

Répertoire racine. Point de départ de toute la hiérarchie du système de fichiers. Le système de fichiers contenant ce répertoire est monté automatiquement par le noyau pendant l'amorçage du système. Ce système de fichiers est appelé système de fichiers racine (« root » en anglais).

/boot/

Répertoire contenant le noyau de Linux et ses informations de symboles. Ce répertoire est parfois le point de montage d'un système de fichiers de très petite taille, dédié au noyau. Dans ce cas, il est recommandé que le système de fichiers correspondant soit monté en lecture seule. On notera que sur certains systèmes, le noyau reste placé dans le répertoire racine. Cette technique n'est pas recommandée, car on ne peut pas monter en lecture seule la partition racine en utilisation normale du système.

/boot/vmlinuz

Noyau compressé de Linux. Les noyaux compressés se décompressent automatiquement lors de l'amorçage du système. Sur certains systèmes, le noyau est encore placé dans le répertoire racine du système de fichiers.

/boot/System.map

Fichier système contenant la liste des symboles du noyau. Ce fichier est utilisé par certains programmes donnant des renseignements sur le système. En particulier, il est utilisé par le programme « top » (programme qui indique la liste des principaux processus actifs) afin de donner le nom de la fonction du noyau dans lequel un processus se trouve bloqué lorsqu'il est en attente de la fin d'une opération que le noyau doit exécuter pour lui.

/dev/

Répertoire contenant tous les fichiers spéciaux permettant d'accéder aux périphériques. Comme on l'a vu, hormis les interfaces réseau, les périphériques sont généralement accessibles au travers de fichiers spéciaux. Ces fichiers permettent l'envoi et la réception des données vers les périphériques associés, et ce de manière uniforme. Tous ces fichiers spéciaux sont tous placés dans le répertoire /dev/. Généralement, le répertoire /dev/ est un système de fichiers virtuel (c'est-à-dire un système de fichiers qui est complètement géré en mémoire par le noyau), qui est rempli dynamiquement par le système en fonction du matériel installé. Le répertoire /dev/ ne contient donc que les fichiers spéciaux des périphériques pour lesquels le noyau dispose effectivement d'un pilote de périphérique chargé. Toutefois, il est également possible que ce répertoire soit effectivement pré-rempli avec les fichiers spéciaux de la plupart des périphériques existants sur le marché, même ceux qui ne sont pas physiquement présents dans la machine. Dans ce cas, les opérations sur les fichiers spéciaux des périphériques non installés seront tout simplement refusées par le noyau. Ce type de configuration se rencontre encore assez souvent sur des installations assez anciennes. Quoi qu'il en soit, quelle que soit la technique utilisée, ce répertoire doit être impérativement placé dans le système de fichiers racine.

/sbin/

Répertoire contenant les commandes systèmes nécessaires à l'amorçage et réservées à l'administrateur. Ce répertoire doit être impérativement placé dans le système de fichiers racine. En général, seul l'administrateur utilise ces commandes.

/bin/

Répertoire contenant les commandes systèmes générales nécessaires à l'amorçage. Ce répertoire doit être impérativement placé dans le système de fichiers racine. Tous les utilisateurs peuvent utiliser les commandes de ce répertoire.

/lib/

Répertoire contenant les bibliothèques partagées (« DLL » en anglais, pour « Dynamic Link Library ») utilisées par les commandes du système des répertoires /bin/ et /sbin/. Ce répertoire doit être impérativement placé dans le système de fichiers racine.

/lib64/

Sur les systèmes 64 bits basés sur une architecture x86_64 (processeurs AMD Athlon64 ou ultérieurs, ou processeurs Intel avec jeu d'instruction EMT64), répertoire équivalent au répertoire /lib/ pour les bibliothèques 64 bits natives. Ces machines étant capables d'exécuter des programmes 32 bits en plus des programmes natifs 64 bits, il est nécessaire de fournir deux jeux de bibliothèques pour les deux modes de fonctionnement. Normalement, le répertoire /lib/ devrait être utilisé pour les bibliothèques natives, mais il est d'usage de continuer à y placer les bibliothèques 32 bits pour des raisons de compatibilité ascendante, les programmes 32 bits cherchant naturellement leurs bibiliothèques dans ce répertoire.

/lib32/

Sur les systèmes 64 bits natifs basés sur une architecture x86_64 (processeurs AMD Athlon64 ou ultérieurs, ou processeurs Intel avec jeu d'instruction EMT64), répertoire des bibliothèques 32 bits si les bibliothèques 64 bits natives sont placées dans le répertoire /lib/. Attention, sur les systèmes qui utilisent ce type d'organisation, les paquetages 32 bits natifs ne peuvent pas être installés sans modification, car ils placeraient leurs bibliothèques 32 bits dans le répertoire /lib/, qui contient dans ce cas des bibliothèques 64 bits. Réaliser une installation de paquetages non modifiés dans ces conditions peut écraser les bibliothèques 64 bits natives et donc provoquer de graves dysfonctionnements.

/lib/modules/

Ce répertoire contient les modules additionnels du noyau. Les modules sont des composants logiciels du noyau, mais qui ne sont pas chargés immédiatement pendant la phase d'amorçage du système. Ils peuvent en revanche être chargés et déchargés dynamiquement, lorsque le système est en fonctionnement. Il est fortement recommandé que ce répertoire soit placé dans le système de fichiers racine.

/etc/

Répertoire contenant tous les fichiers de configuration du système. Ce répertoire doit être impérativement placé dans le système de fichiers racine.

/etc/X11/

Répertoire contenant les fichiers de configuration de l'environnement graphique XWindow.

/etc/rc.d/

Répertoire contenant les scripts de démarrage du système. Ces scripts sont exécutés lorsque le système démarre ou s'arrête, ainsi que lorsqu'il change de mode de fonctionnement. Il est également possible de les exécuter pour démarrer ou arrêter un service particulier. Dans certaines distributions, ces fichiers sont placés dans le répertoire /sbin/init.d/.

/etc/opt/

Répertoire contenant les fichiers de configuration des applications.

/tmp/

Répertoire permettant de stocker des données temporaires. En général, /tmp/ ne contient que des données très éphémères. Il est préférable d'utiliser le répertoire /var/tmp/. En effet, le répertoire /tmp/ ne dispose pas nécessairement de beaucoup de place disponible.

/usr/

Répertoire contenant les fichiers du système partageables en réseau et en lecture seule.

/usr/bin/

Répertoire contenant la plupart des commandes des utilisateurs et des logiciels installés.

/usr/sbin/

Répertoire contenant les commandes systèmes non nécessaires à l'amorçage. Ces commandes ne sont normalement utilisées que par l'administrateur système.

/usr/lib/

Répertoire contenant les bibliothèques partagées de tous les programmes de /usr/bin/ et /usr/sbin/ et les bibliothèques statiques pour la création de programmes.

/usr/lib64/

Sur les systèmes 64 bits basés sur une architecture x86_64 (processeurs AMD Athlon64 ou ultérieurs, ou processeurs Intel avec jeu d'instruction EMT64), répertoire équivalent au répertoire /usr/lib/ pour les bibliothèques 64 bits natives. La raison pour laquelle les bibliothèques 64 bits natives de ces systèmes n'est pas placée dans le répertoire /usr/lib/ est la même que pour les bibliothèques du répertoire /lib64/.

/usr/lib32/

Sur les systèmes 64 bits natifs basés sur une architecture x86_64 et utilisant le répertoire /usr/lib/ pour les bibliothèques 64 bits natives, répertoire contenant les bibliothèques 32 bits. Les mêmes précautions d'usage que celles indiquées pour le répertoire /lib32/ s'appliquent ici.

/usr/include/

Répertoire contenant les fichiers d'en-têtes du système pour le compilateur C/C++. Les fichiers de ce répertoire sont utilisés pour réaliser des programmes dans les langages de programmation C et C++.

/usr/X11/

Répertoire historique qui contenait l'environnement graphique X11 et ses applications sur les anciennes distributions. Dans les distributions récentes (environnement X11 basé sur X.org de version 7.0 ou plus), X11 est à présent directement installé dans le répertoire /usr/, et ce répertoire n'est plus conservé qu'à titre de compatibilité sous la forme de liens symboliques. Ce répertoire contient des sous-répertoires bin/, lib/ et include/, où se trouvent les exécutables de XWindow, les bibliothèques et les fichiers d'en-têtes pour créer des programmes pour XWindow en C et C++.

/usr/share/

Répertoire contenant l'ensemble des données et des fichiers partagés par les applications du système. C'est ici que sont par exemple stockées les polices de caractères, les sons et les images utilisés par les environnements de bureau, les fonds d'écran, les fichiers d'aide ou encore les associations de fichiers avec leurs extensions.

/usr/src/

Répertoire contenant les fichiers sources du noyau et des applications de la distribution. Normalement, ce répertoire ne doit contenir que le code source des applications dépendantes de la distribution que vous utilisez.

/usr/src/linux/

Sources du noyau de Linux. Il est vivement recommandé de conserver les sources du noyau de Linux sur son disque, afin de pouvoir changer la configuration du système à tout moment.

/usr/local/

Répertoire contenant les programmes d'extension du système indépendants de la distribution. Ce n'est toutefois pas le répertoire d'installation des applications, que l'on installera en général dans le répertoire /opt/. « local » ne signifie pas ici que les programmes qui se trouvent dans ce répertoire ne peuvent pas être partagés sur le réseau, mais plutôt que ce sont des extensions du système qu'on ne trouve donc que localement sur un site donné. Ce sont donc les extensions qui ne font pas partie de la distribution de Linux utilisée, et qui doivent être conservées lors des mises à jour ultérieures de cette distribution. Ce répertoire contient les sous-répertoires bin/, lib/, include/ et src/, qui ont la même signification que les répertoires du même nom de /usr/, à ceci près qu'ils ne concernent que les extensions locales du système, donc indépendantes de la distribution.

/var/

Répertoire contenant toutes les données variables du système. Ce répertoire contient les données variables qui ne pouvaient pas être placées dans le répertoire /usr/, puisque celui-ci est normalement accessible en lecture seule.

/var/tmp/

Répertoire contenant les fichiers temporaires. Il est préférable d'utiliser ce répertoire plutôt que le répertoire /tmp/.

/var/opt/

Répertoire contenant les données variables des applications.

/var/log/

Répertoire contenant les traces de tous les messages système. C'est dans ce répertoire que l'on peut consulter les messages d'erreurs du système et des applications.

/var/spool/

Répertoire contenant les données en attente de traitement. Les travaux d'impression en cours, les mails et les fax en attente d'émission, les travaux programmés en attente d'exécution sont tous stockés dans ce répertoire.

/var/locks/

Répertoire contenant les verrous sur les ressources système. Certaines ressources ne peuvent être utilisées que par une seule application (par exemple, un modem). Les applications qui utilisent de telles ressources le signalent en créant un fichier de verrou dans ce répertoire.

/var/cache/

Répertoire contenant les données de résultats intermédiaires des applications. Les applications qui doivent stocker des résultats intermédiaires doivent les placer dans ce répertoire.

/opt/

Répertoire historique contenant les applications qui ne font pas réellement partie du système d'exploitation. En particulier, sur les anciennes distributions, le gestionnaire de bureau KDE était installé dans le sous-répertoire /opt/kde/, mais à présent il est considéré comme partie intégrante du système et est donc installé directement dans le répertoire /usr/ sur les distributions récentes.

/home/

Répertoire contenant les répertoires personnels des utilisateurs. Il est fortement recommandé de placer ce répertoire dans un système de fichiers indépendant de ceux utilisés par le système. Cela permet de faire des sauvegardes plus facilement, et de faire les mises à jour du système de manière sûre, sans craindre de perdre les données des utilisateurs.

/root/

Répertoire contenant le répertoire personnel de l'administrateur. Il est donc recommandé que le répertoire personnel de l'administrateur soit placé en dehors de /home/ pour éviter qu'un problème sur le système de fichiers des utilisateurs ne l'empêche de travailler. Toutefois, il est important que l'administrateur puisse travailler même si les répertoires /root/ et /home/root/ ne sont pas présents. Dans ce cas, son répertoire personnel sera le répertoire racine.

/media/

Répertoire réservé au montage des systèmes de fichiers sur périphériques amovibles (CD-ROM, disquettes, etc.). Ce répertoire peut contenir plusieurs sous-répertoires pour chaque périphérique amovible, afin de permettre d'en monter plusieurs simultanément. Notez qu'il est assez courant de disposer de liens symboliques dans la racine référençant les principaux systèmes de fichiers, afin d'en simplifier l'accès. Par exemple, il est courant d'avoir un répertoire /floppy/ référençant le lecteur de disquette et un répertoire /cdrom/ référençant le lecteur de CD-ROM.

/mnt/

Répertoire réservé à l'administrateur pour le montage temporaire des systèmes de fichiers lors de leur maintenance (disques d'installation, disques durs externes qui ne doivent pas être manipulales par les utilisateurs, etc.). Ce répertoire peut contenir plusieurs sous-répertoires pour chaque périphérique hébergeant les systèmes de fichiers en question, afin de permettre d'en monter plusieurs simultanément. Notez que ce répertoire contenait historiquement les mêmes entrées que le répertoire /media/, qui a été introduit récemment afin de séparer les opérations de montage réalisées dans un but purement administratif des opérations de montage réalisées dans un contexte d'utilisation normale des systèmes de fichiers sur périphériques amovibles.

/lost+found/

Répertoire contenant les données récupérées lors de la réparation d'un système de fichiers endommagé. Ces données sont écrites par les utilitaires de vérification et de réparation des systèmes de fichiers lorsqu'ils trouvent des informations qui ne peuvent être rattachées à aucun fichier existant, ainsi, il est possible de récupérer ces informations si elles ne sont pas dans un état de détérioration trop avancé.

/proc/

Répertoire contenant le pseudo système de fichiers du noyau. Ce pseudo système de fichiers contient des fichiers permettant d'accéder aux informations sur le matériel, la configuration du noyau et sur les processus en cours d'exécution.

/sys/

Répertoire contenant le pseudo système de fichiers des gestionnaires de périphériques. Ce pseudo système de fichiers contient des fichiers permettant d'obtenir des informations sur l'ensemble des objets du noyau, en en particulier sur l'ensemble des périphériques de l'ordinateur. Ce système de fichiers est appelé à recevoir une bonne partie des informations exposées par le système de fichiers /proc/, dont le rôle se restreindra sans doute à fournir des informations plus générales et à réaliser la configuration des fonctions générales du système.

Note : Les informations données ici peuvent ne pas être correctes pour votre distribution. En effet, certaines distributions utilisent une structure légèrement différente. Les informations données ici sont conformes à la norme de hiérarchie de systèmes de fichiers version 2.3 (« FHS » en anglais). Vous pouvez consulter ce document pour une description exhaustive du système de fichiers de Linux.

Vous avez pu constater que les répertoires bin/, lib/, include/ et src/ apparaissent régulièrement dans la hiérarchie du système de fichiers. Cela est normal : les répertoires sont classés par catégorie d'applications et par importance. Les répertoires bin/ contiennent en général les programmes, et les répertoires lib/ les bibliothèques partagées par ces binaires. Cependant, les répertoires lib/ peuvent aussi contenir des bibliothèques statiques, qui sont utilisées lors de la création de programmes. En général, tous les systèmes Unix fournissent en standard un compilateur pour générer ces programmes. Dans le cas de Linux, ce compilateur est « gcc » (pour « GNU C Compiler »). La création d'un programme nécessite que l'on dispose des fichiers sources, qui contiennent le programme écrit dans un langage de programmation, des fichiers d'en-têtes, qui contiennent les déclarations de toutes les fonctions utilisables, et des fichiers de bibliothèques statiques, contenant ces fonctions. Ces différents fichiers sont stockés respectivement dans les répertoires src/, include/ et lib/. Les notions de sources et de compilation seront décrites en détail dans le Chapitre 7.