2. Tout est fichier

Le Guide de démarrage a présenté les concepts de propriété des fichiers et les droits d'accès, mais pour vraiment comprendre le système de fichiers de UNIX® (cela s'applique aux systèmes de fichiers Linux), il faut redéfinir cette notion même de fichier.

Ici, « tout » veut vraiment dire tout : un disque dur, une partition sur ce disque dur, un port parallèle, une connexion à un site Web, une carte Ethernet, même les répertoires sont des fichiers pour Linux. Ainsi, mis à part les fichiers ordinaires et ces répertoires, d'autres types de fichiers sont donc reconnus. Mais ces types ne sont pas de l'ordre d'une différence de contenu puisque, pour GNU/Linux et pour tout système UNIX®, un fichier, qu'il soit une image PNG, un fichier binaire ou autre, n'est fondamentalement qu'une quantité d'octets. La différenciation des fichiers en fonction de leur contenu est du ressort des applications.

2.1. Les différents types de fichiers

Dans la sortie de la commande ls -l, le caractère qui apparaît avant l'énoncé des droits d'accès représente le type du fichier. Deux types de fichiers ont déjà été présentés : les fichiers ordinaires (-) et les répertoires (d). Il est possible que vous rencontriez également ceux qui suivent si vous explorez 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 (tel /dev/null, déjà mentionné) ou des périphériques (ports série ou parallèle) ; leur particularité commune étant en fait que leur contenu (s'il existe) n'est pas conservé en mémoire[26]. L'identification de ces fichiers se fait par la lettre c.

  2. Fichiers en mode bloc : ces fichiers sont des périphériques, et contrairement aux fichiers en mode caractère, leur contenu est, quant à lui, sauvegardé en mémoire. Les fichiers qui entrent dans cette catégorie peuvent être les disques durs, les partitions sur ces disques durs, les lecteurs de disquettes et de CD-ROM, etc. Les fichiers /dev/hda, /dev/sda5 sont d'autres exemples de ces fichiers en mode bloc. Sur la sortie d'un ls -l, ces fichiers seront 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 Mandrakelinux (voir le chapitre Chapitre 11, Les fichiers de démarrage : init sysv). Comme leur nom l'indique, leur raison d'être est de lier symboliquement d'autres fichiers, c'est-à-dire qu'ils pointent (ou non) sur un fichier existant. Ils sont très souvent appelés soft links en anglais, ce qui est une erreur. Ils sont identifiés par la lettre « l ».

  4. Tubes nommés : au cas où vous vous posez la question : ils sont effectivement très similaires aux tubes utilisés par le shell, mais avec la particularité que ceux-ci ont un nom. Ils sont en fait très rares, et il est peu probable que vous en voyiez un durant votre voyage dans l'arborescence. Ces fichiers sont identifiés par la lettre 'p' (pour en apprendre plus, lisez Section 4, « Tubes "anonymes" et tubes nommés »).

  5. Sockets  : ce type de fichier est celui de toutes les connexions réseau. Mais seules quelques-unes d'entre elles portent des noms. Pour compliquer les choses, il existe plusieurs types de sockets, et un seul de ces types peut être lié, mais ces subtilités de classement dépassent de loin les objectifs de ce manuel. Des tels fichiers seront identifiés par la lettre 's'.

Voici un exemple pour chacun de ces types de fichiers :

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

2.2. I-nœuds

Les I-nœuds sont, avec le paradigme « Tout est fichier », les fondements de tout système de fichier UNIX®. Le mot inode est l'abréviation de « Nœud d'Index ».

Les i-nœuds sont stockés sur disque dans une table des i-nœuds. Les i-nœuds existent pour n'importe quel type de fichier susceptible d'être stocké sur un système de fichier, et cela inclut les répertoires, tubes nommés, fichiers en mode caractère, et ainsi de suite. Cela conduit à la fameuse phrase : « L'I-nœud est le fichier ». Les i-nœuds sont aussi le moyen grâce auquel UNIX® identifie un fichier de manière unique.

Oui, vous avez bien lu : sous UNIX®, vous n'identifiez pas un fichier par son nom, mais par son numéro d'i-nœud[27]. La raison en est qu'un même fichier peut avoir plusieurs noms, ou même pas de nom du tout. Un nom de fichier, sous UNIX®, n'est qu'une entrée dans un i-nœud répertoire. Une telle entrée est appelée lien. Voyons ces liens d'un peu plus près.



[26] 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).

[27] Important : notez que les numéros d'i-nœud sont uniques par système de fichier, ce qui signifie qu'un i-nœud avec le même numéro peut exister sur un autre système de fichiers. Cela conduit à la différence entre les i-nœuds sur disque et les i-nœuds en mémoire. Alors que deux i-nœuds peuvent avoir le même numéro sur disque s'ils sont sur deux systèmes de fichiers différents, les i-nœuds en mémoire ont un numéro unique sur tout le système. Une solution pour obtenir l'unicité est par exemple de combiner le numéro sur disque avec l'identifiant du périphérique bloc qui héberge le système de fichiers.