Introduction au système d'exploitation Unix -- mise à jour du 8 octobre 1998

[ Table ]

Chapitre 3. Le système de fichiers


3.1 Inode
3.2 Fichiers
3.2.1 Noms des fichiers
3.3 Fichiers ordinaires
3.4 Répertoires
3.4.1 Répertoire de travail
3.5 Liens
3.5.1 Liens symboliques
3.6 Fichiers spéciaux
3.7 FIFO
3.8 Fichiers invisibles
3.9 Chemin absolu et relatif
3.10 Permissions d'accès

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.

3.1 Inode

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:

3.2 Fichiers

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 fichiers

Le 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.

Attention car Unix fait la distinction entre les minuscules et les majuscules. Donc le fichier « Rapport.IF314.A.Remettre.Lundi » n'est pas le même que le fichier « rapport.if314.a.remettre.lundi ». Le nom d'un fichier doit être unique à l'intérieur d'un même répertoire.

3.3 Fichiers ordinaires

À 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épertoires

La 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:

Arborescence...
Figure 3.1 Répertoires standards du système de fichiers.

Dans la figure 3.1 on peut voir les répertoires suivants :

/ : appelé racine (« root ») est présent dans tous les systèmes de fichiers Unix. Il est l'ancêtre de tous les fichiers.

/home : les usagers possèdent tous un répertoire privé où ils sauvegardent leurs textes ou travaux. Ce répertoire leur appartient (ils y ont toutes les permissions) et est habituellement un sous-répertoire de /home (voir la section « comptes et accès »). Par exemple, le répertoire d'un usager qui se nomme « laforge » est /home/laforge dans la figure 3.1. Cet usager peut créer tous les fichiers qu'il désire (y compris des répertoires) à partir de /home/laforge. Cependant, il n'est pas interdit ni impossible de voir son répertoire privé (« home directory ») se retrouver ailleurs que dans /home.

/usr : traditionnellement, ce répertoire contient des sous-répertoires utilisés par le système. Ces fichiers ne changent pas souvent et sont inclus dès l'installation du système d'exploitation.

/usr/bin et /bin : ces répertoires contiennent les programmes utilitaires qui viennent avec les distributions Unix.

/usr/local : à partir de ce répertoire, on retrouve habituellement l'installation de logiciels locaux à l'ordinateur qui ne proviennent pas de la distribution. Les programmes de GNU sont habituellement dans /usr/local/bin. Voir la section sur « le phénomène GNU ».

/sbin et /usr/sbin : contiennent les utilitaires nécessaires à l'administration du système. Typiquement, on retrouve dans /sbin les utilitaires pour l'initialisation de l'ordinateur lors de la mise sous tension et dans /usr/sbin il y a les programmes utilisés lorsque le système est en marche.

/var : répertoire dont le contenu varie dans le temps à mesure que les gens utilisent le système pour recevoir du courier, imprimer des documents, etc.

/dev : tous les fichiers qui représentent des périphériques comme l'imprimante et les terminaux, se retrouvent dans ce répertoire.

/etc : fichiers de configuration ou d'administration du système. Un des plus utile est le fichier « passwd » qui sera présenté dans la section « Comptes et accès ».

/root : c'est le répertoire privé de l'administrateur du système. Voir la section « Comptes et accès ».

/tmp : c'est le répertoire dans lequel on entrepose des fichiers éphémères de façon transitoire.

3.4.1 Répertoire de travail

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 Liens

Chaque 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.

3.5.1 Liens symboliques

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éciaux

Il 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 FIFO

Ces 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 invisibles

Pour 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 relatif

Il 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ès

Chaque 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:

Permissions...
Figure 3.2 Répartition des permissions sur les fichiers.

Dans la figure 3.2, on voit que le propriétaire du fichier (trois premiers bits) a tous les droits. Les trois autres bits montrent que les usagers faisant partie du même groupe que le fichier vont pouvoir le lire et l'exécuter. Cependant, on remarque (les trois derniers bits) que tous les autres usagers (autres que ceux qui font partie du même groupe) vont pouvoir le lire seulement. La notion de permissions existe sur tous les fichiers incluant les répertoires. Pour les répertoires, les permissions d'exécution, d'écriture et de lecture ne veulent pas dire tout à fait la même chose. Pouvoir exécuter un répertoire veut dire de pouvoir en faire son répertoire de travail courant. L'écriture veut dire qu'on peut y placer ou effacer des fichiers et la lecture est la permission de pouvoir afficher son contenu.

Il est possible de voir les permissions sur un fichier avec la commande « ls -l » et de pouvoir les changer avec la commande « chmod ». Ces commandes seront expliquées dans la section « Commandes de bases ».

Chapitre 3. Le système de fichiers

[ Table | Début de page ]

[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.