Le système de fichiers d'un système d'exploitation est un ensemble de principes et de règles selon lesquels les fichiers sont organisés et manipulés. Chaque système d'exploitation possède son système de fichier privilégié, même s'il peut en utiliser d'autres. Le tableau 1.1 donne quelques noms.
| Système | Système de fichier |
| MS-DOS | FAT, aussi appelé FAT-16 (File Allocation Table 16bits) |
| Windows 95/98 | FAT32, extension du système FAT-16 (File Allocation Table 32bits) |
| Windows NT | NTFS (New Technology File System) |
| OS/2 | HPFS (High Performance File System) |
| Linux | Ext2fs (Second Extended File System) |
Fondamentalement, un fichier est une suite de caractères (on dit <<octets>>) qui constitue un ensemble cohérent (en principe) d'informations. Le fichier est l'élément fondamental d'un système d'exploitation : les instructions nécessaires au fonctionnement de ce système, sa configuration, comment il doit réagir à telle situation, toutes ces informations sont stockées dans des fichiers.
Plus généralement, les fichiers sont utilisés pour stocker les travaux des utilisateurs. Pour ces derniers, les fichiers sont identifiables par un nom, qui doit respecter certaines contraintes (voir plus bas). Cette définition, très générale, inclut également les fichiers qui rassemblent des informations sous forme structurée selon les principes des bases de données, par exemple le fichier des assurés sociaux de la Sécurité Sociale : c'est là une forme plus restrictive de la notion de fichier.
Enfin, les fichiers sont eux-mêmes stockés physiquement sur différents supports, comme les disquettes, les disques durs, les CD-ROMs...
Il en est ainsi sous Unix, et donc sous Linux : tous les éléments du système sont manipulés par des fichiers ! Cela peut paraître un peu déroutant de penser que le clavier sur lequel on frappe désespérément est considéré par le système comme un fichier, spécial certes, mais fichier tout de même. Toutefois cette uniformisation permet de simplifier grandement la manipulation du système en général, et sa programmation en particulier.
Sous Linux, les noms de fichiers sont limités à 255 caractères et ne doivent
en principe comporter que des caractères alphanumériques (c'est-à-dire des lettres
et des chiffres), ainsi que les symboles . - _ ~ + %. Il est toutefois
possible d'insérer un espace ou d'autres caractères <<bizarres>> dans un nom
de fichier, mais ceci est très fortement déconseillé, pour des raisons
qui n'apparaîtront que plus tard (notamment dans le chapitre 2.7
concernant la programmation, page
).
Attention, le système fait la différence entre les majuscules et les minuscules ! Ainsi, dans un même répertoire on peut avoir les deux fichiers lettre.txt et Lettre.txt. Nous ne saurions trop vous déconseiller d'abuser de ce genre de possibilités.
Une petite particularité : les fichiers (ou répertoires) dont le nom commence
par un point ('.') sont des fichiers cachés, c'est-à-dire qu'ils ne
sont pas listés normalement par la commande ls (voir 1.5.4.1 page
).
Vous aurez sans doute remarqué que nous utilisons une forme de caractère particulière pour les noms de fichiers, comme nous l'avions annoncé dans l'introduction, ceci afin de faciliter la lecture : il en sera ainsi tout au long de cet ouvrage.
Les répertoires sont des fichiers un peu particuliers, qui <<contiennent>> d'autres fichiers et d'autres répertoires.
Le terme de <<contenir>> n'est pas tout à fait approprié, ce n'est qu'une image. Plus précisément, un répertoire est un fichier contenant des références et des descriptions pour d'autres fichiers (qui peuvent être des répertoires...). Ce terme est toutefois celui employé couramment.
On obtient ainsi une structure arborescente, telle que celle visible sur la
figure 1.1, page
. L'utilisation
de répertoires est vivement conseillée pour organiser ses informations.
Il existe sous Linux (et Unix) un répertoire <<ancêtre>> de tous les autres, qui contient tous les autres (directement ou suite à des intermédiaires) : le répertoire root1.2, que l'on note simplement '/' (ce symbole se lit slash).
Prenons une analogie, pour bien vous faire saisir cette notion de répertoire. Considérez votre système comme une bibliothèque : la bibliothèque dans son ensemble peut être assimilée au répertoire racine. Mais généralement, une bibliothèque est subdivisée en sections : la section <<histoire>>, la section <<géographie>>, la section <<romans>>... ce sont là les répertoires situés dans la racine. Entrons dans la section <<romans>>. On y trouve d'autres divisions, les romans <<policiers>>, les romans <<picaresques>>, les romans <<à l'eau de rose>>... ce sont des sous-répertoires du répertoire <<romans>>. Mais peut-être y a-t-il des romans inclassables, qui n'entrent dans aucune des divisions prévues : ils seront simplement entassés à l'entrée de la section <<romans>>, directement accessibles, comme les fichiers présents dans un répertoire. Au sein des romans policiers, on peut trouver encore d'autres catégories selon la langue, l'auteur, etc. pour parvenir enfin jusqu'à une étagère ou un rayon, qui ne soit pas subdivisé : les rayons sont remplis de livres, qui sont les fichiers, car comme les fichiers ils ont un nom (le titre) et un propriétaire (l'auteur).
Chaque répertoire contient deux répertoires particuliers :
Une notion importante sous Linux est celle de répertoire courant. On peut considérer une arborescence comme un ensemble de villes reliées par des routes ; le répertoire courant désigne alors la ville où l'on se trouve. Pour reprendre l'analogie de la bibliothèque, le répertoire courant est la section ou sous-section dans laquelle on est en train de déambuler nonchalamment.
Pour définir complètement un fichier, il est nécessaire de connaître la succession de répertoires qu'il faut parcourir pour le trouver : c'est le chemin1.3 du fichier.
Si ce chemin commence par le symbole '/', il est dit absolu : il indique la succession de répertoires depuis la racine pour obtenir le fichier. Par exemple, le texte <</etc/passwd>> est le chemin pour le fichier passwd qui se trouve dans le répertoire etc. Par abus de langage, on appelle également chemin absolu le texte <</usr/local/man>>, qui ne désigne pas un fichier particulier, car comme on le voit sur la figure 1.1, man est un répertoire dans /usr/local. Mais rappelons que les répertoires ne sont que des fichiers particuliers...
Dans le cas contraire, le chemin est dit relatif : il prend comme point de départ le répertoire courant. Ainsi, si le répertoire courant est /usr/local, le texte man/man1 équivaut au chemin absolu /usr/local/man/man1. En utilisant le '..' évoqué plus haut, en partant du même point de départ, le texte ../bin équivaut au chemin absolu /usr/bin. On parle également d'indirection, lorsque le chemin commence par un '..'.
Ces principes et notions peuvent paraître déroutantes dans un premier temps, mais un peu de pratique les font devenir une seconde nature.
Il existe une certaine normalisation dans l'architecture des répertoires sous
Linux (comme sous Unix, d'ailleurs). La figure 1.1 en page
présente une organisation standard1.4. Il peut toutefois exister des variations d'une distribution à l'autre, mais
dans l'ensemble c'est assez bien respecté.
Les flèches blanches en pointillés indiquent qu'il est fréquent de trouver d'autres répertoires, mais sans qu'il existe véritablement de norme.
).
).
), et non nécessaires lors du démarrage du système.
).
).
Ces fichiers sensibles sont des fichiers particulièrement importants, sur lesquels repose une grande partie de la stabilité du système, voire de son simple fonctionnement. Il est donc vivement recommandé de ne pas modifier, encore moins d'effacer, ces fichiers, sans un luxe de précautions et sans savoir très précisément ce que l'on fait.
La plupart d'entre eux apparaîtront à nouveau dans la suite, dans les sections auxquelles ils se rapportent.
).
Attention, les informations qu'il contient sont spécifiques au matériel utilisé
: une modification hasardeuse peut rendre la couche graphique non fonctionnelle,
voire endommager le matériel, notamment l'écran.
.