• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 21/06/2022

Adoptez l’arborescence des systèmes Linux

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

L'arborescence standard d'un système Linux peut vous paraître assez bizarre. Nous allons la parcourir et identifier les principaux objectifs des répertoires qui la composent.

Comprenez l’arborescence Linux

Ce document référence l'objectif primaire de tous les répertoires standard du système Linux pour faciliter leur exploitation.

Mais pourquoi a-t-on besoin de cette norme ? 

Le respect de ce standard permet :

  1. aux administrateurs d'anticiper les répertoires contenant les informations recherchées, quelle que soit la distribution utilisée. 

  2. aux développeurs système d'utiliser une arborescence commune et connue pour déployer, installer ou configurer les programmes qu'ils éditent. 

Et quand on exploite plusieurs milliers de machines ou produit du code de manière industrielle, ce n’est pas du luxe !

Prenons quelques exemples pour illustrer cette notion :

  • Les répertoires contenant des informations stockées sur un équipement mais utilisées par d'autres équipements seront identifiés par le mot-clé "shareable" (partageables en français). Par exemple, le répertoire /home contient traditionnellement les répertoires personnels des comptes utilisateurs du système, et ces données peuvent être partagées entre utilisateurs sur le même serveur, voire entre utilisateurs sur un serveur différent.

  • Les répertoires contenant des fichiers qui ne peuvent pas ou ne doivent pas être partagés entre plusieurs équipements seront marqués "unshareable" (non partageables en français). Nous pouvons citer ici /boot qui contient notamment le noyau Linux exploité sur l'équipement.

  • Les répertoires contenant des données qui ne peuvent pas changer d'elles-mêmes, ou sans l'intervention de l'administrateur, avec nécessité d'une élévation de privilèges sont marqués "static". On peut à nouveau citer ici /boot bien entendu, mais également /etc, par exemple, qui contient traditionnellement les fichiers de configuration du système et des services.

  • Les répertoires qui ne sont pas marqués statiques sont marqués "variable" (variables). On peut retrouver ici le répertoire  /home  évidemment, mais également /var/www pour les sources d'un site web par exemple.

Tous les exemples de répertoires cités ici sont adressés de manière absolue, c'est-à-dire à partir de la racine du système /

La norme FHS adresse ces recommandations à partir d'un système monté sur la racine /. L'administrateur peut quant à lui adresser les répertoires et les fichiers de manière relative à un emplacement courant. Pour cela, chaque répertoire sous la racine /possède deux fichiers spéciaux nommés . pour se  désigner soi-même, et .. pour désigner son parent dans l'arborescence.

Ainsi, la commande suivante permet de vous déplacer :

  • dans /home;

  • puis dans ..(donc retour à/) ;

  • puis à nouveau dans /home;

  • puis dans . (c'est-à-dire /home à ce moment-là) ;

  • puis dans .. (donc retour à /) ;

  • et finalement dans /home.

seb@thor:~$ cd /home/../home/./../home/
seb@thor:/home$

Bon, ce n'est certes pas la commande la plus utile, on est d'accord… Mais elle illustre bien le rôle de ces deux fichiers dans l'adressage relatif/absolu.

Qu'en est-il de son implantation sur les systèmes Linux aujourd'hui ?

Voyons cela tout de suite !

Découvrez les principaux répertoires de l’arborescence

Le répertoire /root

Nous verrons plus loin dans ce cours comment utiliser les privilèges de ce compte à partir d'un autre compte. C’est tout à fait conseillé, afin notamment d'obtenir des traces d'exécution détaillées.

Chaque fois que j'ai rencontré des cas d'exploitation du répertoire/root, les administrateurs stockaient dans ce répertoire des données dites “sensibles”, inaccessibles des autres utilisateurs comme :

  • des fichiers sources,

  • des fichiers d'authentification,

  • des données applicatives…

Tous ces cas d'utilisation peuvent être corrigés en utilisant correctement les droits et l'arborescence des systèmes de fichiers Linux.

OK ! Alors qu'en est-il du répertoire/home? N'est-il pas non plus mentionné dans la FHS ?

Le répertoire /home

Oui ! Souvenez-vous un peu plus haut dans le cours du fichier /home/user/.bash_history!

Bon soyons clairs, le répertoire /home a beau être facultatif, il est installé sur quasiment toutes les distributions et c'est très bien comme ça !

Le répertoire  /usr

Résumons un peu la logique de tous ces répertoires contenant des commandes :

  • /bin: ce sont les commandes critiques pour le bon fonctionnement du système, quel que soit son objectif. Elles sont lancées par le système et par l'administrateur ;

  • /sbin: ce sont les commandes uniquement à destination de l'administrateur pour la gestion du système.

  • /usr/bin: ce répertoire contient majoritairement les commandes à destination de tous les utilisateurs du système, privilégiés ou non.

  • /usr/sbin: ce sont des commandes à nouveau à destination unique de l'administrateur, mais non critiques pour le bon fonctionnement du système.

Maintenant il existe aussi un répertoire /usr/local/bin! Ce dernier de la famille va contenir tous les binaires qui sont compilés manuellement par l'administrateur après l'installation du système.

Le répertoire/usr est très important, il est marqué "shareable" et "static", ce qui implique que d'un système à l'autre, les éléments contenus dans ce répertoire sont censés fonctionner exactement de la même manière.

Le répertoire  /var

Il y a quelques sous-répertoires de/var qu'il est important de mentionner :

  • /var/log: répertoire contenant l'arborescence de toutes les traces systèmes et applicatives. C'est dans ce répertoire qu'il est possible de consulter les traces des historiques de démarrage du système, de connexion des comptes utilisateurs, d'activité des services réseaux (SSH, HTTPD, SMTP, etc.) ainsi que les traces du noyau. Généralement les applications installées sur le système disposent de leur propre sous-répertoire (/var/log/apache2par exemple).

  • /var/run: répertoire contenant toutes les données relatives aux processus en cours d'exécution, les sémaphores, les données applicatives, les fichiers numéro de processus, etc.

  • /var/spool: répertoire contenant des données stockées de manière temporaire entre processus. Souvent, ce répertoire est utilisé pour stocker des données relatives à des actions ou tâches à effectuer dans un futur proche par les processus en cours d'exécution.

  • /var/mail: c'est le répertoire de stockage des messageries électroniques locales des comptes utilisateurs du système.

Certains programmes vont stocker par défaut leurs données temporaires dans l'arborescence/var. Ainsi, le serveur web Apache HTTPD par exemple, lorsqu'il est installé via les packages des distributions majeures est configuré avec un docroot(répertoire contenant par défaut les sources des sites web) pointant vers/var/www.

Ce qui fait que :

  • certains sous-répertoires de/var seront marqués variablesunshareable  (par exemple/var/log)

  • alors que d'autres seront marqués variablesshareable(comme/var/mail ou /var/www par exemple).

Identifiez le rôle des systèmes de fichiers virtuels de Linux

Traditionnellement, il existe aussi sur les systèmes Linux des arborescences un peu particulières. Elles correspondent à une organisation des informations maintenues en temps réel par le noyau Linux, sous la forme d'une arborescence.

Imaginez la vitrine d'un magasin : le noyau met à disposition beaucoup d'informations : elles sont visibles (certaines accessibles uniquement en lecture seule). Mais pour certaines d'entre elles, il est possible de rentrer dans la boutique pour les manipuler.

Il est ainsi possible de changer certaines variables du noyau, et donc certains comportements du système global en modifiant le contenu de ces fichiers “virtuels” placés dans ces arborescences.

Ces arborescences n'existent pas sur périphérique physique de type bloc, et l'analyse indépendante du disque d'un système Linux ne les fera pas apparaître. Elles existent uniquement parce que le noyau vous les propose gracieusement.

Le répertoire  /proc

Cette arborescence contient toutes les informations concernant le processus ! Et il y en a beaucoup…

Pour lister le contenu de cette arborescence, lancez la commande suivante :ls /proc 

Le contenu de cette arborescence /proc. on y voit de nombreuses informations, des fichiers et des répertoires que l'on va voir plus en détails dans la suite du chapitre.
Le contenu de cette arborescence /proc

Vous pouvez remarquer que /proc présente aussi des fichiers et des répertoires. Je vous propose d'observer un peu plus dans le détail quelques fichiers intéressants. 

Par exemple,/proc/cpuinfo contient les informations sur le(s) processeur(s) maintenues par le noyau. Pour consulter ce fichier, utilisez la commande cat telle que :

seb@thor:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 94
model name : Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz
...

Et pourtant, lorsque vous lancez la commande file sur ce même fichier :

seb@thor:~$ file /proc/cpuinfo
/proc/cpuinfo: empty

Ces fichiers étant virtuels, ils ont une taille de 0.

D'autres fichiers sont intéressants à relever dans cette arborescence :

  • /proc/version contient la version exacte du noyau en exécution, 

  • /proc/meminfo, les informations détaillés sur la mémoire vive gérée par le noyau,

  • /proc/uptime, le temps d'exécution cumulé,

  • /proc/cmdline, les paramètres passés au démarrage du noyau, etc.

/proc contient également beaucoup de répertoires, dont la grande majorité porte des noms à base de chiffres. En effet, tous les processus en exécution sur le système sont identifiés par un numéro unique géré par le noyau. 

Ainsi ce dernier met à disposition les informations concernant chaque processus dans le répertoire portant son numéro associé.

Observons par exemple le contenu du répertoire /proc/1qui est le premier processus du noyau :

seb@thor:~$ cat /proc/1/cmdline
/lib/systemd/systemd--system--deserialize18

Vous obtenez ici le premier processus lancé par le noyau :systemd, le programme d'initialisation principal de Linux (le résultat de cette commande peut varier en fonction des distributions).

  • /sys: cette seconde arborescence fonctionne sur le même principe que sa petite sœur/proc. Elle présente des informations maintenues en temps réel par le noyau. À une différence fondamentale près : certains éléments de cette arborescence sont accessibles en écriture aux comptes privilégiés du système et notamment les variables systèmes du noyau dans le répertoire kernel.

Cette arborescence contient les informations sur les périphériques gérés par le noyau, notamment :

  • les périphériques de type bloc ou caractères dans les répertoires /sys/block ou /sys/dev,

  • les drivers dans /sys/devices,

  • les différents systèmes de fichiers dans /sys/fs,

  • les modules du noyau dans /sys/module.

Le répertoire/sys/kernel contient une arborescence de fichiers représentant des variables du noyau accessibles en écriture et permettant de modifier le comportement à chaud du système. Par exemple, le répertoire/sys/kernel/debug contient des fichiers permettant d'activer des fonctions de traces et de débogage du noyau.

Sur les distributions principales de Linux, le répertoire/proc/sys/est également accessible en écriture sur certains paramètres. En effet, d'un point de vue historique, seule l'arborescence/proc existait./sys a été ajoutée à partir des versions 2.6 du noyau, notamment pour différencier la gestion des informations concernant les périphériques.

En résumé

  • L'arborescence des systèmes Unix/Linux est normalisée par la FHS (Filesystem Hierarchy Standard)

  • Certains répertoires possèdent des caractéristiques shareable/unshareable et/ou static/variable en fonction des données qu'ils contiennent

  • Vous pouvez adresser un répertoire et/ou un fichier de manière absolue ou relative

  • Les répertoires/root et /home sont facultatifs 

  • Linux maintient en temps réel les arborescences virtuelles /proc et /sys

Dans le chapitre suivant, nous allons voir comment consulter des fichiers pour administrer votre serveur. C'est parti !

Exemple de certificat de réussite
Exemple de certificat de réussite