Cours GNU/Linux: Le système de fichiers

Page 1 sur 12Lecteur de document UniversityLib

Cours GNU/Linux: Le système de fichiers

Operating Systems · notes

Voir tous les documents en systèmes d'exploitation et cloud

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 -