2.6 Systèmes de fichiers

Objectif du TP

On va essayer de comprendre ce qu’est un système de fichiers, pourquoi / est appelé la racine, et en quoi le montage conditionne l’accès aux données et à l’état du système.

Rappels

Un système Unix/Linux présente une seule arborescence, accessible à partir de /. Contrairement à Windows, il n’existe pas de notion de lecteur (c: ou d:).

Arborescence

1) Une arborescence est une organisation hiérarchique de fichiers et de répertoires, structurée à partir d’un point d'entrée unique: la racine notée /. 2) Un fichier ou un répertoire occupe une position unique dans cette arborescence, et peut être localisé par son chemin d’accès en partant de la racine. Par exemple: /dossier-A/dossier-2/fichier3.txt

Répertoire de travail

À l’ouverture d’une session Unix, le système crée un environnement d’exécution pour l’utilisateur authentifié. Le shell, lancé dans cette session, est un processus qui hérite de cet environnement. Cet environnement inclut un répertoire de travail initial, correspondant au répertoire personnel défini dans /etc/passwd. Ce répertoire est utilisé par le shell pour résoudre les chemins relatifs lors de l’exécution des commandes.

1. Navigation dans l’arborescence Unix

Rappel

/ est le point d’entrée de l’arborescence Unix (la racine). Un chemin commençant par / désigne explicitement le chemin d'un fichier depuis la racine.

Commençons par quelques manipulations:

pwd

La commande pwd (print working directory) affiche le dossier dans lequel shell est en train d'être exécuté. On pourrait dire que pwd retourne le répertoire où l’on se trouve, mais c’est une explication un peu rapide. En réalité, vous n’êtes pas « dans un dossier » ( vous êtes assis sur une chaise...). Par contre le shell est un processus qui s’exécute avec un contexte, et ce contexte inclut un répertoire de travail. C’est ce répertoire de travail que la commande pwd affiche. Bon, après si vous avez rien compris "retourne le répertoire on l'on se trouve", ça ira quand même.

cd /
pwd

Le nouveau répertoire courant est maintenant la racine soit/.

cd /etc
pwd

Ici, le chemin commence par /, ce qui signifie que l’on part de la racine, puis que l’on descend dans le dossier etc. Comme le dossier etc est bien présent à cet emplacement, le changement de répertoire se fait sans erreur. Essayez ceci:

cd /
cd etc
pwd

On arrive encore dans /etc. Pourtant, on n’a pas tapé /etc, seulement etc.

Pourquoi ça marche ? Parce que le répertoire etc est recherché par défaut dans le répertoire de travail ($PWD), ici la racine /. Et comme il existe bien un dossier nommé etc à cet emplacement, la commande aboutit sans erreur.

On n’a donc pas utilisé un chemin absolu pour atteindre un dossier, mais un chemin relatif : relatif à quoi ? et bien au répertoire de travail.

cd /home
pwd

Constat : on arrive dans /home.
Raison : le chemin commence par / → le répertoire home est explicitement recherché à la racine. Sans surprise ça marche, on l'a déjà vu.

cd /etc
cd home

Constat : erreur.
cd home est interprété comme un chemin relatif (pas / au début). Comme on l'a vu il sera recherché dans le répertoire de travail, soit /etc, où il n’existe pas. La commande ne peut pas aboutir sans passer par un chemin absolu.

cd /home
pwd

Notez que l'on aurait pu faire autrement. Retournons dans le répertoire /etc. Maintenant vous avez du vous en rendre compte dans l’arborescence UNIX, le répertoire home est situé à un niveau au dessus de etc. Donc si l'on souhaitait tout de meme utilisé un chemin relatif pour y accéder on peut utiliser les caractères ... Les 2 points indiquent au SHELL de remonter d'un niveau l'arborescence depuis le répertoire de travail

cd /etc
cd ..
cd home
pwd

Et si on est été encore plus fainéant, on peut même faire de cette manière

cd /etc
cd ../home
pwd

../home indique à SHELL que dans le répertoire parent, il y a un dossier home, ce qui est exact, donc notre commande aboutie.

On peut même faire encore plus fort.

cd /home/alice
pwd
cd ../../etc
pwd

cd ../../etc indique que l'on souhaite se rendre dans le dossier etc, qui se trouve 2 niveaux au dessus de notre répertoire de travail.

À retenir

  • L’arborescence Unix est organisée à partir d’un point d’entrée unique : /, appelé la racine.

  • Un chemin absolu commence par / : il indique le chemin complet à suivre depuis la racine pour atteindre un emplacement dans l’arborescence.

  • Un chemin relatif est interprété à partir du répertoire de travail du shell.

  • Le répertoire de travail est le contexte dans lequel le shell s’exécute.

  • Les caractères .. permettent de remonter d’un niveau dans l’arborescence (../.. pour 2 niveaux, ../../.. pour 3 niveaux, et ainsi de suite).

2. Notion de système de fichiers

Un disque ne stocke que des données brutes. Pour pouvoir les exploiter sous forme de fichiers et de répertoires, le système d’exploitation s’appuie sur un système de fichiers.

Un système de fichiers comme ext4 définit comment les données brutes doivent être structurées sur le disque afin de pouvoir localiser et récupérer des fichiers, des répertoires, leurs droits, et leurs métadonnées.

Dans la pratique, un système de fichiers ext4 s’applique sur un espace de stockage bien identifié, comme une partition ou un volume logique. Cette opération, appelée formatage, est dite destructive, car elle efface les informations qui permettent au système de localiser et d’interpréter les données, même si celles-ci peuvent encore être présentes physiquement.

df -T
Filesystem           Type       1K-blocks      Used Available Use% Mounted on
devtmpfs             devtmpfs       10240         0     10240   0% /dev
shm                  tmpfs         236900         0    236900   0% /dev/shm
/dev/sda3            ext4         6924276    161736   6389500   2% /
tmpfs                tmpfs          94760       128     94632   0% /run
/dev/sda1            ext4          277631     37102    221073  14% /boot
tmpfs                tmpfs         236900         0    236900   0% /tmp

Comment lire ce truc ? Prenons cette ligne:

/dev/sda3            ext4         6924276    161736   6389500   2% /
  • Filesystem : /dev/sda3 désigne la partition utilisée.
  • Type : ext4 est le type de système de fichiers appliqué sur cette partition.
  • Les colonnes 1K-blocks, Used et Available indiquent respectivement la taille totale, l’espace utilisé et l’espace disponible (elles ne sont pas étudiées ici).
  • Use% : 2% correspond au taux d’occupation de la partition.
  • Mounted on : / indique que cette partition est accessible à partir de / c'est à dire la racine de l’arborescence , comme vu précédemment

À propos du système de fichiers ext4

ext4 (Fourth Extended Filesystem) est le système de fichiers natif de Linux. ext4 est un système de fichiers journalisé, ce qui permet de limiter les pertes de données en cas d’arrêt brutal (coupure de courant, crash).

Analysons une autre ligne: /dev/sda1 ext4 277631 37102 221073 14% /boot

Que voyons nous ? - /dev/sda1 est une partition distincte. - Elle utilise également le système de fichiers ext4. - Elle n’est pas montée à la racine /, mais sur le répertoire /boot.

Le répertoire /boot est ici ce que l'on appelle un point de montage.

Qu’est-ce qu’un point de montage ?

Un point de montage est un répertoire de l’arborescence Unix sur lequel un système de fichiers est attaché. Lorsque une partition est montée son contenu devient accessible à partir de ce répertoire et s’intègre à l’arborescence existante.

A retenir

Sous Linux, il n’existe pas de notion de « lecteur disque » comme sous Windows. Les partitions sont attachée à une arborescence unique par un point de montage Le système de fichiers d’une partition devient accessible à partir de son point de montage, dès l’instant qu'il est monté.

Note

Des outils plus avancés comme lsblk (paquet util-linux) permettent une vue plus lisible des disques et partitions, mais ils ne sont pas installés par défaut sur Alpine.

3. Des répertoires gérés par le système

Observation du répertoire /proc:

ls /proc

/proc fait partie de l’arborescence, mais il ne correspond pas à des fichiers stockés sur disque. Ce répertoire expose principalement des informations sur les processus en cours d’exécution.
Chaque répertoire portant un numéro correspond à un PID (identifiant de processus). Autrement dit : - quand un processus démarre, un répertoire apparaît dans /proc, - quand il s’arrête, ce répertoire disparaît. - Le contenu de /proc reflète donc l’état du système à un instant donné, et non un stockage permanent.

Observation du répertoire /sys:

ls /sys

/sys expose l’état du matériel et des composants du système, pas des données stockées sur disque. - Chaque répertoire représente un élément du système (disque, carte réseau, périphérique, etc.). - Les fichiers permettent de consulter (et parfois modifier) cet état.

Ces informations sont fournies directement par le noyau, et ne sont pas lues depuis un disque ou une partition.

Conclusion

Au cours de ce TP, on a pu observer que l’arborescence Unix n’est pas une simple organisation de dossiers, mais le fruits de montage de systèmes de fichiers sur des points précis.

Vous avez vu que : - un disque ne fournit que des données brutes, - un système de fichiers comme ext4 est nécessaire pour structurer ces données en fichiers et répertoires, - une partition définit l’espace sur lequel ce système de fichiers s’applique, - un point de montage permet d’intégrer ce système de fichiers dans l’arborescence unique, à partir de /.

Vous avez également constaté que tout ce qui apparaît dans l’arborescence ne provient pas forcément d’un système de fichier : des répertoires comme /proc et /sys sont générés par le noyau et exposent l’état du système, des processus et du matériel.

En résumé, sous Linux, l’accès aux données et à l’état du système dépend entièrement du montage des systèmes de fichiers.
Comprendre cette mécanique est indispensable pour administrer, diagnostiquer et sécuriser un système Unix/Linux.