MP2L
Cours GNU/Linux
Chapitre 3 :
Le système de fichiers de GNU/Linux
Introduction 1.1. Introduction
Sous GNU/Linux, la notion de fichier a une signification plus large que celle connue usuellement. En effet, la définition de fichier se présente comme un objet typé sur lequel on pourrait appliquer un certain nombre d'opérations. Il peut correspondre à un fichier disque usuel mais il peut correspondre à une ressource physique ou logique telle qu'un terminal, une imprimante, un lecteur CD-ROM, etc.klkk
2. Les différents types de fichiers
GNU/Linux distingue essentiellement deux grandes classes de fichiers: les fichiers dont le contenu
est stocké sur disque (les fichiers disque, les répertoires, les liens symboliques et les tubes) et les
fichiers spéciaux correspondant à des ressources physiques (les terminaux, les imprimantes, etc.).
◦ a) Les fichiers réguliers
Les fichiers réguliers (regular files) sont des fichiers disque. Leur contenu n'est pas nécessairement
structuré. Il peut s'agir de programmes (binaires exécutables ou en code source) ou de fichiers
contenant des données utilisateur ou système. Ces fichiers sont issus d'applications: édition de
textes, compilation d'un code source, éditions de liens, etc.
◦ b) Les fichiers répertoires
Ces types de fichiers sont très importants dans un système de fichier. En effet, ils permettent aux
utilisateurs d'organiser leurs fichiers de données. Les répertoires suivants sont particulièrement
importants dans tout système GNU/Linux:
• bin : répertoire contenant les fichiers exécutables nécessaires au fonctionnement de
base du système.
• boot : répertoire spécifique à GNU/Linux, dans lequel sont stockés les noyaux de la
machine (kernel).
Yahya SLIMANI/Habib SMEI
- Page 1 -
MP2L
Cours GNU/Linux
• dev : contient tous les fichiers spéciaux représentant les périphériques du système
•
•
etc : répertoire où sont stockés les fichiers de configuration du système et des
programmes (paramétrage par défaut).
lib : contient les librairies partagées du système
• mnt (et/ou media) : répertoire dédié pour le montage d'autres systèmes de fichiers
•
•
•
(disquette, CD, autres disques durs, disque amovible etc.).
root : répertoire où sont stockées les données de l'administrateur (super utilisateur);
c'est le répertoire de connexion de l'administrateur.
tmp : permet de stocker les données temporaires créées par les programmes des
utilisateurs. Ce répertoire est normalement vidé à chaque démarrage de la machine.
var : on stocke dans ce répertoire tous les fichiers créés par les programmes, mais qui
doivent être conservés sur une certaine période : les courriers électroniques arrivés ou
en partance, l'historique de connexion des utilisateurs, etc.
• usr : Contient les fichiers des paquetages fournis par les distributions en
supplément du système GNU/Linux de base. Ce système de fichiers peut être
monté en lecture seule, ce qui permettra d'accroître la sécurité au niveau des
fichiers et de partager ces données sur le réseau via le protocole NFS (Network File
System) par exemple.
• users ou home : répertoire très important dans une installation. C'est dans ce
répertoire que seront crées les répertoires associés aux comptes des utilisateurs. A
chaque compte est associé un répertoire qui sera utilisé comme répertoire de
connexion lors de l'ouverture d'une session par le propriétaire du compte.
◦ c) Les fichiers spéciaux
Comme nous l'avons signalé précédemment, GNU/Linux considère les périphériques d'entrées-
sorties comme des fichiers. Du point de vue de l'utilisateur, référencer un fichier régulier, un
répertoire ou un organe d'entrée-sortie se fait exactement de la même manière. Ainsi, un fichier
spécial est un fichier associé à un dispositif physique d'entrée-sortie.
On distingue deux types de fichiers spéciaux:
• Les fichiers spéciaux en mode bloc (block buffered devices) comme les disques. Avec de
tels périphériques, le transfert de données lors d'une opération d'entrée-sortie est réalisé
par blocs (512 ou 1024 octets).
Yahya SLIMANI/Habib SMEI
- Page 2 -
MP2L
Cours GNU/Linux
• Les fichiers spéciaux en mode caractère (character unbuffered devices) comme les
terminaux et les imprimantes. Ce type de périphériques transfert les données octet par
octet (caractère par caractère) et il n'y a pas d'utilisation de caches d'entrée-sortie comme
dans le cas des périphériques bloc. Par exemple, sous GNU/Linux, le répertoire /dev
contient les fichiers de noms tty* qui représentent des fichiers spéciaux de type caractère
et hda* sont des fichiers de type bloc.
◦ d) Les liens symboliques
Les fichiers de type lien symbolique sont des fichiers qui pointent sur d'autres fichiers (ou
répertoires). Ils correspondent, d'une certaine manière, à la notion de raccourci. Les liens
symboliques et les fichiers (ou répertoires) peuvent appartenir, ou non, au même système de
fichiers.
◦ e) Les tubes nommés (fifo)
Ces types de fichiers permettent à un ensemble de processus, n'ayant pas de liens de parenté
particuliers, d'échanger des informations.
◦ f) Les sockets
Il s'agit d'objets permettant la communication bidirectionnelle entre les processus (les tubes étant
unidirectionnels). Les sockets permettent aussi la communication entre des applications distantes
(applications réparties).
3. Organisation des fichiers
Le principe de désignation est basé sur l'association faite, dans les répertoires, entre les
chaînes de caractères et les numéros d'index des fichiers. La désignation extérieure d'un fichier est
faite en l’identifiant avec une chaîne de caractères, relativement à un répertoire donné (c’est le
répertoire qui le contient). Notons que les répertoires seront, eux-mêmes, identifiés de la même
manière que les fichiers. Selon ce principe d’inclusion (un fichier contenu dans un répertoire, un
répertoire contenu dans un autre répertoire), nous obtenons une structure arborescente, caractérisée
par un niveau particulier (le nœud de l’arboresence), appelé le répertoire racine ou la racine
absolue du système de fichiers.
Le système GNU/Linux, contrairement à d’autres systèmes, n'utilise pas une table de
fichiers mais plusieurs et chacune est relative à une arborescence bien déterminée. Le numéro
d'index du répertoire racine de chacune des arborescences est toujours égal à 2.
Yahya SLIMANI/Habib SMEI
- Page 3 -
MP2L
Cours GNU/Linux
L'accès à l'une des arborescences est possible grâce au mécanisme de montage (mounting).
Ce mécanisme permet de créer un point d'accès à cette arborescence à partir de la racine absolue du
système de fichiers. Ce même mécanisme peut être étendu pour accéder à des répertoires et à des
fichiers situés sur des systèmes distants et ce de manière totalement transparente aux utilisateurs en
s'appuyant sur le protocole NFS (Network File System).
Exemple
Soit, sous GNU/Linux, l'arborescence suivante :
/
bin
boot
Publicité
dev
etc
home
2
8193
28673
exports
group
passw d
28682
28877
28825
38913
cp
df
38934
38936
2
hb
32769
liste
Desktop
32797
65537
Internet. Desktop
65560
Nous avons dit que chaque nœud de l'arborescence a un numéro d'index dans une table de fichiers.
La racine absolue (numéro d'index 2) renferme les entrées suivantes présentées sous forme de
couples: (nom de fichier, numéro d'index associé): (bin,38913), (boot,2), (dev, 8193), (etc,28673) et
(home,2).
Nous remarquons que les répertoires boot et home ont comme numéro d'index la valeur 2. Ceci
veut dire que ces deux répertoires sont deux répertoires racines de deux disques logiques qui seront
considérés comme deux points de montage.
Le répertoire bin contient, entre autres, les entrées (cp,38934) et (df,38936).
Le répertoire etc contient, entre autres, les entrées (exports,28682), (group,28877) et (passwd,
28825).
Le répertoire home contient, en particulier l'entrée (hb,32769). Celle-ci comprend à son tour les
deux entrées (liste,32797) et (Desktop,65537) qui à son tour contient l'entrée
(Internet.Desktop,65560).
Un fichier n'est accessible que si la racine du disque logique auquel il appartient a été
Yahya SLIMANI/Habib SMEI
- Page 4 -
MP2L
Cours GNU/Linux
montée auparavant et ce relativement au disque système (disque dont la racine est la racine absolue
du système de fichiers, de numéro d'index 2). Ce disque est toujours monté et par conséquent les
fichiers et répertoires qu'il contient sont toujours accessibles.
Pour naviguer (se déplacer) dans une arborescence de fichiers, on utilise la notion de chemin
d’accès. Un chemin d'accès à un fichier ou à un répertoire (appartenant à un disque monté) est un
chemin qui part d’un répertoire donné de l’arborescence vers ce fichier. Si le répertoire de départ est
la racine de l’arborescence, ce chemin est dit « absolu ». Sa principale caractéristique est qu’il
commence par le répertoire racine symbolisé par le symbole / (Slash). Il est représenté par une suite
de noms, séparés par le symbole / (Slash) et définit de manière unique un fichier.
Par exemple, le chemin /nom1/nom2/…/nomn définit un chemin absolu qui part de la racine pour
aboutir au fichier nomn, en passant par des noms de répertoires intermédiaires.
Avec l'exemple ci-dessus, le fichier dont le numéro d'index est 32797 aura comme chemin (ou
référence) absolu : /home/hb/liste
Les systèmes UNIX permettent à un utilisateur de spécifier les chemins des fichiers en
utilisant des références relatives, ce qui donnera lieu à des chemins dits relatifs. Ces chemins relatifs
ont comme répertoire de départ, non plus la racine du système de fichiers (cas du chemin absolu),
mais plutôt un répertoire quelconque de l’arborescence, appelé « répertoire courant » ou » répertoire
de travail ». Ce répertoire pourra changer au cours du temps. Il est représenté par une suite de
noms, séparés par le symbole / (Slash) et définit de manière unique un fichier. La principale
différence avec le chemin absolu est qu’un chemin relatif ne commence jamais par le répertoire
racine, dont par le symbôle / (Slash)
Le système de fichiers, sous UNIX, utilise deux symboles particuliers pour définir deux
répertoires particuliers, qui peuvent changer au cours du temps. Le premier symbole, le point (.), définit le chemin absolu du répertoire du courant ; c’est donc une représentation abrégée de ce
chemin. Le deuxième symbole, les deux points (..) définit le répertoire père du répertoire courant. Grâce à ce deuxième symbole, il est possible de remonter dans l’arborescence pour se rapprocher de
la racine.
Exemple
Si nous supposons que le répertoire courant est celui qui a pour référence (ou chemin) absolue la
chaîne /home/hb/Desktop, alors les fichiers ayant comme numéros d'index 32797 et 8193 seront
désignés, respectivement, par les chemins relatifs suivants : ../liste et ../../../dev
Yahya SLIMANI/Habib SMEI
- Page 5 -
MP2L
Cours GNU/Linux
Notons que le système GNU/Linux définit, pour chaque utilisateur disposant d’un compte
utilisateur, un répertoire privé ou répertoire de base (home directory) représenté par le symbole ~
qui est son répertoire courant lors de l'ouverture de sa session de travail. Par la suite, il lui sera
possible de changer de répertoire courant, puis de revenir vers son répertoire de travail
a) Notion d'i-nœud
Un i-nœud ou table d’index est une structure contenant un ensemble d’attributs sur un fichier. Elle
contient typiquement les informations suivantes:
Le uid (user identifier) et le gid (group identifier) du fichier
Le type du fichier
Les droits d'accès des utilisateurs à ce fichier
La taille du fichier (en octets)
Le nombre de liens physiques sur le fichier
Les dates du dernier accès et de dernière modification du fichier
L'adresse, sur disque, du fichier.
Remarques importantes:
Un i-nœud ne contient aucun nom pour le fichier correspondant.
Sous GNU/Linux, chaque utilisateur est caractérisé par un numéro d'utilisateur et
appartient, obligatoirement, à un groupe bien défini d’utilisateurs (il peut éventuellement
appartenir à plusieurs groupes). Ainsi, pour tout fichier, le système GNU/Linux définit
trois classes d'utilisateurs:
o Le propriétaire du fichier (celui qui l’a crée) symbolisé par la lettre u.
o Les membres du groupe auquel appartient le propriétaire (groupe propriétaire)
symbolisés par la lettre g.
o Les autres utilisateurs symbolisés par la lettre o.
Dans tout système GNU/Linux, l’utilisateur qui dispose de tous les privilèges sur tous les
fichiers est appelé le super-utilisateur. Il a pour nom d'utilisateur, un nom standard appelé root et
comme numéro d'identification (uid) 0. Tous les autres utilisateurs auront des privilèges étendus sur
leurs propres fichiers (ceux qu’ils auront crées) et des privilèges restreints sur le reste des fichiers
(fichiers du système et des autres utilisateurs).
GNU/Linux définit par ailleurs, trois types d'opérations sur les fichiers:
Yahya SLIMANI/Habib SMEI
- Page 6 -
MP2L
Cours GNU/Linux
Publicité
La lecture (r)
L'écriture (w)
L'exécution. (x).
Appliqué à un répertoire, le droit d'exécution, pour un utilisateur, signifie que ce répertoire
pourra être utilisé dans un chemin. Le droit de lecture donne la possibilité à un utilisateur de lister le
contenu d’un répertoire, par contre le droit d'écriture lui donne la possibilité de modifier le contenu
d’un répertoire (création, suppression, modification d’attributs des fichiers contenus dans le
répertoire).
Sur un fichier régulier (ordinaire), le droit de lecture permet de lire son contenu sans le
modifier alors que le droit d'écriture donne la possibilité de modifier son contenu.
Grâce à ces droits, il est donc possible de définir les droits d’accès ou permissions pour
chaque fichier. Ces droits ou permissions sont définis par les propriétaires des fichiers et ne portent
que sur les fichiers qu’ils ont crée explicitement à l’aide de commandes ou à travers le gestionnaire
de fichiers. Ils ont également la possibilité de changer ces droits à tout moment. Ces droits doivent
spécifier pour chaque catégorie d’utilisateurs (u,g,o) les opérations permises (combinaison entre les
lettres r,w, et -). Le symbole tiret (-) signifiant l’absence de droit (opération non autorisée)
Le système GNU/Linux définit, dans le i-nœud d’un fichier, 9 bits pour chaque classe d'utilisateur
et chaque type d'opération si l'opération est permise ou pas. Trois autres bits spéciaux sont
également introduits:
Le set-uid: L'utilisateur qui exécute un fichier (binaire exécutable) aura les droits du
propriétaire du fichier seulement pendant l'exécution. Il n'a aucun effet sur les répertoires.
Le set-gid: Le groupe auquel appartient l'utilisateur qui exécute un fichier aura les droits
du groupe propriétaire du fichier pendant l'exécution. Sur un répertoire, tous les fichiers qui y
ont été crées auront le même groupe que le répertoire sans tenir compte du groupe propriétaire
(groupe auquel appartient le créateur du fichier).
Le sticky bit: S'applique sur des répertoires. Il empêche les utilisateurs d'éliminer les
fichiers qui ne sont pas les leurs. Il n'a aucun effet sur les fichiers texte (fichiers sans mise en
forme particulière).
b) Commandes de base du système de gestion de fichiers
Dans ce qui suit, on s'intéresse à quelques unes des commandes de manipulation des répertoires et
des fichiers.
Yahya SLIMANI/Habib SMEI
- Page 7 -
MP2L
La commande pwd
Cours GNU/Linux
La commande pwd (print working directory) permet d'afficher la référence absolue au répertoire de
travail ou répertoire courant du processus shell (l'interprète de commandes):
$ pwd
/home/hb
La commande cd
La commande cd (change directory) permet de changer le répertoire de travail. Elle permet de
naviguer dans l'arborescence. Si elle est appelée sans paramètre, elle place l'utilisateur dans son
répertoire privé.
$ cd
$ pwd
/home/hb
$ cd /etc
$ pwd
/etc
La commande ls
La commande ls (list) permet d'afficher le contenu d'un ou de plusieurs répertoires passés comme
paramètres avec éventuellement leurs caractéristiques. Lorsqu'elle est appelée sans paramètres, elle
affichera le contenu du répertoire de travail (répertoire courant).
$ pwd
/home/hb
$ ls
Desktop
liste
$ ls –a –i –l –d
(ou ls –ail )
65537 drw xr-x r-x
3
32797 -rwx- - - - - - 1
hb
hb
hb
hb
4096 fév 1 23:36 Desktop/
107
fév 5 23:08
liste
l'option –i (inode) permet d'afficher le numéro d'index associé au fichier
l'option –d (directory) permet de ne pas afficher le contenu d'un répertoire
l'option –a (all) permet d'afficher tous les fichiers y compris ceux commençant avec .
l'option –l (detail) permet d'afficher les détails des fichiers.
Yahya SLIMANI/Habib SMEI
- Page 8 -
MP2L
Cours GNU/Linux
On distingue notamment:
le type du fichier (d correspond à un répertoire, – correspond à un fichier régulier),
les droits d'accès au fichier représentés sur 9 caractères: rwx rwx rwx . les trois
premiers caractères concernent les droits du propriétaire (droit de lecture (r), droit
d'écriture (w) et droit d'exécution (x)), les trois deuxièmes concernent les droits du
groupe propriétaire sur le fichier et les trois derniers concernent les droits des autres
utilisateurs sur le fichier,
Le nombre de liens physiques sur le fichier,
Les noms du propriétaire et du groupe propriétaire,
La taille en octets,
La date de dernière modification
Le nom du fichier.
La commande cat
La commande cat (concatenate) permet d'afficher, sur l'écran, le contenu d'un ou de plusieurs
fichiers dont les noms sont passés comme paramètres. Sans paramètres, elle affiche l'entrée à partir
du clavier.
$ cat message
Bienvenue dans notre système …
$ cat
Bonjour
Bonjour
Publicité
La commande cp
La commande cp (copy) permet de dupliquer physiquement un fichier (avec l'attribution d'un
nouvel i-nœud ).
$ cp message copiemessage
$ ls –il
8211 -rw- r-- r -- 1 hb
8210 -rw- r-- r -- 1 hb
hb
hb
32 fév 9 13:28
copiemessage
32 fév 8 11:38
message
On voit, sur cet exemple, que les deux objets message et copiemessage ont chacun un nombre de
Yahya SLIMANI/Habib SMEI
- Page 9 -
MP2L
Cours GNU/Linux
liens égal à 1. Il s'agit bien de deux objets différents (deux i-nœuds différents) même s'ils
contiennent la même chose.
La commande ln
La commande ln (link) permet d'attribuer plusieurs noms à un fichier régulier ou spécial dans un
même répertoire ou dans des répertoires différents.
$ ln copiemessage message lienmessage
$ ls –il
8211 -rw- r-- r -- 1 hb
8210 -rw- r-- r -- 2 hb
8210 -rw- r-- r -- 2 hb
hb
hb
hb
$ cat message lienmessage
Bienvenue dans notre système …
Bienvenue dans notre système …
32 fév 9 13:28
copiemessage
32 fév 9 17:28
lienmessage
32 fév 8 11:38
message
On constate facilement que la commande ln ne duplique pas, contrairement à la commande cp, le
fichier (les deux liens ont même numéro d'index). Elle augmente, par contre, le nombre de liens
physiques sur le fichier. Avec l'option –s, la commande ln permet de créer un lien symbolique
(ayant un numéro d'index différent).
$ ln -s message liensymbmessage
$ ls –il copiemessage lienmessage liensymbmessage message
8211 -rw- r-- r -- 1 hb hb 32 fév 9 13:28 copiemessage
8210 -rw- r-- r -- 2 hb hb 32 fév 9 13:28
lienmessage
8218 lrwxrwxrwx 1 hb hb 7 fév 9 19:31
liensymbmessage -> message
8210 -rw- r-- r -- 2 hb hb 32 fév 9 13:28
message
On remarque, sur cet exemple, que la création d'un lien symbolique n'augmente pas la valeur du
compteur de liens physiques du fichier message.
La commande mv
La commande mv (move) permet soit de renommer un fichier ou de le déplacer selon que le dernier
paramètre passé (à la commande mv) est nom de fichier ou désigne un répertoire.
$ mv lienmessage lmessage # changement de nom d'un lien physique
$ mv lmessage ..
déplacement du fichier désigné par lmessage vers le répertoire parent du
Yahya SLIMANI/Habib SMEI
- Page 10 -
MP2L
répertoire courant.
La commande rm
Cours GNU/Linux
La commande rm (remove) permet de supprimer un lien physique sur un fichier. Un fichier est
physiquement effacé du disque si et seulement si le compteur de ses liens physiques est à zéro.
$ ls –il copiemessage lienmessage liensymbmessage message
8211 -rw- r-- r -- 1 hb hb 32 fév 9 13:28 copiemessage
8210 -rw- r-- r -- 2 hb hb 32 fév 9 13:28
lienmessage
8218 lrwxrwxrwx 1 hb hb 7 fév 9 19:31
liensymbmessage -> message
8210 -rw- r-- r -- 2 hb hb 32 fév 9 13:28
message
$ rm –i lienmessage (–i demande de confirmation)
rm: remove `lienmessage' ? y
$ ls –il
8211 -rw- r-- r -- 1 hb hb 32 fév 9 13:28 copiemessage
8218 lrwxrwxrwx 1 hb hb 7 fév 9 19:31 liensymbmessage -> message
8210 -rw- r-- r -- 1 hb hb 32 fév 9 13:28 message
la commande mkdir
La commande mkdir (make directory) permet de créer un répertoire. À sa création, un répertoire
contiendra uniquement les deux liens: . et .. Un tel répertoire est qualifié de répertoire vide.
$ mkdir Travail
$ ls –ld Travail
drwxr-xr-x
2
hb hb 1024 fév 11 18:34
message
La commande rmdir
La commande rmdir (remove directory) permet la suppression d'un répertoire vide (ne contenant
que . et ..)
$ rmdir /home/hb/Desktop
$ rmdir: `/home/hb/Desktop': Le répertoire n'est pas vide
$ rmdir Travail
$ rm –r /home/hb/Desktop
$ ls –l /home/hb/Desktop
Yahya SLIMANI/Habib SMEI
- Page 11 -
MP2L
Cours GNU/Linux
ls: /home/hb/Desktop : Aucun fichier ou répertoire de ce type
L'option –r (recursive) passée à la commande rm permet de supprimer un répertoire non vide.
Yahya SLIMANI/Habib SMEI
- Page 12 -