Chapitre 5. Le système de fichiers de Linux: ext2fs (EXTended 2 FileSystem)

Table des matières
5.1. Tout est fichier
5.2. Les liens
5.3. Tubes « anonymes  » et tubes nommés
5.4. Les fichiers « spéciaux  » : fichiers mode bloc et caractère
5.5. Les liens symboliques et la limitation des liens « en dur  »
5.6. Les attributs des fichiers

Le Guide de l'utilisateur a introduit les concepts de propriété des fichiers et les droits d'accès, mais pour vraiment comprendre le système de fichiers de Linux, il faut redéfinir la notion même de fichier. Une raison en est que :

5.1. Tout est fichier

Ici, « tout  » veut dire vraiment tout. Un disque dur, une partition sur un disque dur, un port parallèle, une connexion à un site web, une carte Ethernet, tous ces éléments sont des fichiers. Même les répertoires sont des fichiers. Linux reconnaît plusieurs types de fichiers, en plus des fichiers réguliers et des répertoires. Notez que par type de fichier ici, nous ne faisons pas référence au type du contenu du fichier : pour Linux et pour tout système Unix, un fichier, qu'il soit une image GIF, un fichier binaire ou autre, est juste une suite d'octets. La différenciation des fichiers en fonction de leur contenu est laissé aux applications.

Si vous vous souvenez, quand vous tapez ls -l, le caractère avant les droits d'accès représente le type du fichier. Nous avons déjà vu deux types de fichiers : les fichiers réguliers (-) et les répertoires (d). Vous pouvez aussi tomber sur les suivants si vous vous baladez dans l'arborescence et listez le contenu des répertoires :

  1. Fichiers en mode caractère Ces fichiers sont soit des fichiers spéciaux du système (comme /dev/null, que nous avons déjà vu), ou des périphériques (ports série ou parallèle), qui ont en commun la particularité que leur contenu (s'ils en ont) n'est pas conservé en mémoire[1]. De tels fichiers sont identifiés par la lettre 'c'.

  2. Fichiers en mode bloc Ces fichiers sont des périphériques, et à l'opposé des fichiers en mode caractère, leur contenu est sauvegardé en mémoire. Les fichiers entrant dans cette catégorie sont, par exemple, les disques durs, les partitions sur un disque dur, les lecteurs de disquettes et de CD-ROM, et ainsi de suite. Les fichiers /dev/hda, /dev/sda5 sont des exemples de fichiers en mode bloc. Sur la sortie d'un ls -l, ces fichiers sont identifiés par la lettre 'b'.

  3. Liens symboliques Ces fichiers sont très courants, et très utilisés dans la procédure de démarrage de Linux-Mandrake (voyez le chapitre Les fichiers de démarrage : init System V). Comme leur nom l'indique, leur but est de lier des fichiers de façon symbolique, ce qui veut dire que de tels fichiers peuvent ou non pointer sur un fichier existant. Ceci est expliqué plus loin dans ce chapitre. Ils sont très souvent appelés soft links en anglais, et sont identifiés par la lettre 'l'.

  4. Tubes nommés Au cas où vous vous le demanderiez, oui, ils sont très similaires aux tubes utilisés par le shell, mais avec la particularité que ceux-ci ont un nom. Lisez la suite pour en savoir plus. Toutefois, ils sont très rares, et il est peu probable que vous en voyiez un durant votre voyage dans l'arborescence. Juste au cas où, la lettre qui les identifie est 'p'.

  5. Sockets C'est le type de fichier pour toutes les connexions réseau. Mais seules quelques-unes[2] d'entre elles portent des noms. Pour compliquer les choses, il existe plusieurs types de sockets, mais cela est bien au-delà de l'objectif de ce livre. Des tels fichiers sont identifiés par la lettre 's'.

Voici un exemple de chacun de ces fichiers :

$ ls -l /dev/null /dev/sda  /etc/rc.d/rc3.d/S20random /proc/554/maps \
  /tmp/ssh-fg/ssh-510-agent
crw-rw-rw-    1 root     root       1,   3 mai  5  1998 /dev/null
brw-rw----    1 root     disk       8,   0 mai  5  1998 /dev/sda
lrwxrwxrwx    1 root     root           16 déc  9 19:12 /etc/rc.d/rc3.d/S20random 
-> ../init.d/random*
pr--r--r--    1 fg       fg              0 déc 10 20:23 /proc/554/maps|
srwx------    1 fg       fg              0 déc 10 20:08 /tmp/ssh-fg/ssh-510-agent=
$

On devrait ajouter que ext2fs, comme tous les autres systèmes de fichiers Unix, stocke les fichiers, quel que soit leur type, dans une table des i-nœuds. Une particularité est qu'un fichier n'est pas identifié par son nom, mais par un numéro d'i-nœud. En fait, certains fichiers n'ont pas de noms. Les noms sont juste une conséquence d'une notion plus large :

Notes

[1]

On emploie parfois le néologisme barbare « bufferisé  », qui vient de l'anglais buffered, c'est-à-dire gardé en mémoire dans des tampons (buffers).

[2]

On emploiera « socket  » au féminin en français.