Chapitre 3. Le système de fichiers
Il s'agit d'une méthode logique pour organiser et conserver de
grandes quantités d'information (sur le disque, par exemple). Le
fichier est la plus petite unité dans laquelle l'information est
sauvegardée. Tel que mentionné dans le chapitre 1, le
système de fichiers de Unix est hiérarchique. C'est une
façon d'organiser l'information qui facilite la maintenance et le
déplacement dans ses branches. Le système de fichiers de Unix
est le précurseur de plusieurs autres bien connus comme celui de DOS,
VMS et Macintosh.
Unix peut supporter plusieurs systèmes de fichiers différents.
Celui présenté dans ce chapitre est le système standard
décrit à un haut niveau d'abstraction. Une implantation sur une
certaine machine pourrait paraître parfaitement semblable à celle
décrite ici et pourtant elle pourrait être très differente.
La différence, cependant, serait à un niveau beaucoup plus bas
que le manuel ne peut se permettre de descendre. Un système de fichiers
populaire que Unix reconnaît, par exemple, est celui de DOS. Un autre
qui est très populaire, parce qu'il permet le partage des ressources,
est NFS (« Network File System »). NFS permet d'accéder
à un disque situé sur une autre machine de façon transparente pour
l'utilisateur.
Chaque fichier sur le disque est reférencé par le système
à l'aide d'un noeud d'index appelé inode (« index node »).
En plus de pointer vers l'espace sur le disque contenant l'information
relative
à un fichier (ce pointeur est appelé un lien « hard link ») l'inode
contient les données suivantes:
Unix reconnaît cinq types de fichiers. Tous ces fichiers peuvent être lus, écrits, effacés, créés ou copiés, et ce, indépendamment du type. Par exemple, lire un fichier de type répertoire revient à voir le contenu de ce dernier (la commande « ls » lit le contenu d'un fichier répertoire). De la même manière, l'affichage à l'écran est aussi représenté par un fichier. Écrire dans ce fichier aura pour effet d'afficher le contenu à l'écran. Unix est, en effet, très orienté fichiers comparativement aux autres systèmes d'exploitation.
3.2.1 Noms des fichiersLe nom d'un fichier permet à l'utilisateur ou au programme de
reconnaître son contenu. Le nombre maximum de caractères
utilisés pour le nommer est de 255 (sur presque tous les Unix
d'aujourd'hui). La seule exception est le répertoire qui est parent de
tous les autres et qui est référencé par l'unique
caractère « / » (communément appelé « root » ou racine). Bien
qu'il soit possible d'utiliser n'importe quel caractère, le lecteur
devrait se servir de la liste suivante pour éviter toute confusion
possible.
À l'interne, Unix ne fait pas de distinction entre un fichier texte et binaire. Ainsi le contenu ou l'organisation d'un fichier n'a pas d'importance ni de signification sauf pour les personnes ou les programmes qui l'utilisent. L'usager est donc libre de choisir la structure interne des informations contenues dans ses fichiers et il peut modifier cette structure pour répondre à ses besoins.
3.4 RépertoiresLa hiérarchie du système de fichiers Unix est une arborescence
dont plusieurs répertoires sont conventionnels et se retrouvent sur la
majorité des ordinateurs. La figure 3.1 présente les principaux
répertoires que l'on retrouve dans la plupart des versions de Unix:
La notion du répertoire de travail « working directory » (appelé aussi, répertoire courant « current directory ») existe pour faciliter la vie des utilisateurs. Taper de longs noms de fichiers en spécifiant le chemin « path » pour y accéder peut être ennuyant et augmente les chances de faire des fautes. L'usager peut choisir le répertoire de travail (voir la commande « cd » dans le chapitre « commandes de bases ») et ainsi donner directement le nom de fichier qui se trouve dans ce répertoire sans avoir à spécifier le chemin « path ». Le répertoire de travail par défaut quand on ouvre une session « logging in » est le répertoire privé « home directory ». Le répertoire de heidi[1] dans la figure 3.1 est /home/heidi.
3.5 LiensChaque fichier possède au moins un lien (« hard link ») qui pointe sur son
contenu à partir d'un inode (voir plus haut). Ce pointeur associe un
nom de fichier avec un espace sur le disque. Il est aussi possible d'en avoir
plusieurs (sur le même fichier) pour des raisons de commodité et
d'accessibilité pour les programmes ou les utilisateurs. Les liens sont
des pointeurs directs vers l'emplacement du contenu du fichier.
Deux liens sont automatiquement présents quand un répertoire est
créé. Il s'agit de « . » et de « .. » qui sont des liens ordinaires.
Le premier pointe sur le répertoire courant et l'autre pointe sur le
répertoire précédent. Ces liens sont pratiques lorsqu'on
se déplace dans les répertoires ou pour référencer un
fichiers de manière relative au répertoire courant.
Il existe deux types de liens. Les liens ordinaires « hard links » qui sont dans
les inodes (pointeurs directs à un fichier) et les liens symboliques qui
sont des pointeurs indirects à un fichier.
Les liens symboliques ont été développés à cause du manque de souplesse et de la limitation des liens ordinaires. En effet, ces liens symboliques peuvent pointer sur n'importe quel fichier (ordinaire, répertoire, etc.) indépendamment de son emplacement sur le disque (même dans un autre système de fichiers supporté par l'OS). Ceci n'est pas vrai avec les liens ordinaires. Si l'usager ne fait des liens que dans son répertoire sur des fichiers ordinaires, il ne remarquera pas la différence entre ces deux types du point de vue fonctionnalité. Habituellement, on ne fait que des liens symboliques à cause des raisons précédentes. La commande « ln -s » permet de créer des liens symboliques (Voir le chapitre « Commandes de bases » pour plus de renseignements). Quand un lien symbolique pointe vers un répertoire ou un fichier, on peut utiliser ce lien pour les référencer de manière habituelle (Voir l'exemple de la commande « cd » dans le chapitre « Commandes de bases »).
3.6 Fichiers spéciauxIl existe des fichiers qui sont des points d'entrées vers des périphériques et qui sont situés (habituellement) dans le répertoire /dev. Ces fichiers sont utilisés par plusieurs programmes (même ceux écrits par les usagers) comme interface vers le terminal, l'imprimante, le modem, la souris, les lecteurs de disques ou de bandes, etc. Le principe de ces fichiers ne sera pas abordé dans ce manuel. Il y a aussi d'autres fichiers spéciaux qui sont des interfaces de messages pour le réseau. On les appelle « sockets ».
3.7 FIFOCes fichiers communément appelés « tubes nommés » (« named pipe ») servent pour l'accès de façon FIFO (premier arrivé premier sortie ou « First In First Out ») à l'information envoyé par un autre programme. Les notions applicables à ce type de fichiers dépassent le mandat du présent manuel.
3.8 Fichiers invisiblesPour faciliter la gestion et pour ne pas être pas embêté par des fichiers qu'il n'est pas importants de voir constamment, Unix vous permet d'appliquer le concept d'invisibilité sur les noms des fichiers. Pour qu'un fichier soit invisible il suffit que son nom commence par un point. Par exemple, pour voir le fichier « .bashrc » il faut donner l'option « -a » à la commande « ls » lorsqu'on veut voir le contenu d'un répertoire. Sinon, le nom de ce fichier et de tous les autres qui commençent par un point ne sera pas affiché à l'écran. Ce principe s'applique sur tous les types de fichiers, donc un répertoire ou un lien (symbolique ou non) peut être aussi invisible.
3.9 Chemin absolu et relatifIl est toujours possible de se déplacer dans les répertoires ou de référencer les fichiers en donnant le chemin (« path ») absolu ou relatif au répertoire de travail. Par exemple, dans la figure 3.1 supposons que l'usager « heidi » se trouve dans son répertoire /home/heidi et qu'elle veut désigner un fichier se trouvant dans /home/laforge et qui s'appelle « .lynxrc ». De manière absolue, elle écrira « /home/laforge/.lynxrc » et de manière relative elle donnera comme nom « ../laforge/.lynxrc ». Il n'y a pas de différence aux yeux du système d'exploitation. L'usager choisira donc la façon qui est la plus appropriée dépendamment de la situation et de son emplacement (répertoire de travail).
3.10 Permissions d'accèsChaque inode comprend les permissions d'accès du fichier sur lequel il
pointe. Ces permissions sont représentées par des « bits » dans un
mot qui en contient neuf[2]. Ce mot est
séparé en trois parties. La première partie (3 bits)
indique les permissions du propriétaire du fichier en ce qui concerne la
lecture, l'écriture et l'exécution du fichier. La
deuxième partie concerne les mêmes opérations mais pour le
groupe (voir « Comptes et accès ») auquel appartient le fichier. La
dernière est pour les autres usagers. Si le bit est activé,
alors l'opération correspondante pour le ou les usagers
(propriétaire, groupe ou les autres) est permise. Par exemple, un
fichier detient les permissions suivantes:
[1] Voir aussi le chapitre « Comptes et
accès ».
[2] En réalité, il y en a douze
mais les trois premiers bits servent à des concepts non-abordés
dans ce manuel.