Vous êtes sur la page 1sur 9

Initiation aux Systèmes Unix UCAU-UUT

Université Catholique de l'Afrique de l'Ouest


Unité universitaire du Togo

Module Initiation à Unix et aux


environnements GNU/Linux

Par Arnaud AMELINA

Année académique 2008 – 2009

Arnaud AMELINA 1
Initiation aux Systèmes Unix UCAU-UUT

5 Système de fichiers
L’un des rôles importants du système d’exploitation est de donner accès aux données à manipuler,
sachant que les programmes, dont font partie les commandes, sont eux aussi repérés par leur
contenant, les fichiers. Cette section présente les concepts afférents à l’organisation et la
manipulation (copie, renommage...) des données : les répertoires, les fichiers (ordinaires) et les
fichiers spéciaux. La section se termine par la présentation des droits d’accès à ces données.

• Un élément de l’arborescence est repéré par son nom précédé de


• Son chemin « absolu » et unique depuis la racine commençant par « / »
• Par exemple : /mci/inf/bouillet/src/prog.c
• Son chemin « relatif », par rapport au répertoire courant
• Par exemple : src/prog.c, prog.c...
• Remarquez le double rôle de « / »
• Au début du nom absolu pour indiquer la racine de l’arborescence
• Ailleurs comme séparateur de répertoires
La structure du système de fichiers se présente comme un arbre inversé comportant des nœuds qui
repèrent les répertoires et des feuilles les fichiers (ou répertoires vides). Le point d’entrée de
l’arborescence est appelé racine et est noté par un filet oblique ou barre de fraction (en anglais
slash) (« / »).

À tout moment, dans une fenêtre de terminal, l’utilisateur « travaille » dans un répertoire, appelé
« répertoire de travail » ou « répertoire courant ». Tout élément de l’arborescence peut être
référencé de deux façons, soit par rapport à la racine (le nom de l’élément est dit « absolu »), soit
par rapport au répertoire de travail courant (le nom est alors dit « relatif »).
On peut remarquer que le filet oblique joue un double rôle : en premier caractère d’un nom, il
symbolise la racine et caractérise un nom absolu alors que partout ailleurs il ne sert que de
séparateur de noms.

5.2 Commandes de positionnement dans l’arborescence


• Dans une fenêtre de terminal, essayez les commandes suivantes :
• pwd : affiche le nom absolu du répertoire de travail
• cd : change le répertoire de travail
• Avec argument : nom du répertoire destination (en absolu ou en relatif)

Arnaud AMELINA 2
Initiation aux Systèmes Unix UCAU-UUT

• Sans argument : retour au répertoire de connexion


• ls : liste les entrées d’un répertoire
• Sans argument : les entrées du répertoire de travail
• Avec arguments : les entrées repérées par les arguments
• Par exemple, ls, ls /, ls /usr, ls .bashrc
• Dans la commande précédente (ls .bashrc), le fichier dont le nom commence
par un point (« . ») est appelé un fichier caché
• La commande ls possède de nombreuses options : par exemple, –a pour
visualiser les fichiers cachés, –l pour tous les attributs (type, droits, liens
physiques, propriétaire, groupe, taille, date, nom)
L’utilisateur qui se connecte est situé dans son répertoire de connexion, c.-à-d. le répertoire dans
lequel est placé l’utilisateur à chaque fois qu’il se connecte. La commande pwd (print working
directory) affiche le nom absolu du répertoire courant (ou répertoire de travail). Pour en connaître le
contenu, il doit utiliser la commande ls qui liste les entrées du répertoire courant.

L’utilisateur qui veut visualiser le contenu d’autres répertoires peut utiliser la commande ls avec le
nom de ces répertoires en arguments ou se déplacer dans l’arborescence avant d’utiliser cette
commande sans argument. La commande cd permet un déplacement dans le répertoire passé en
argument. Quelle que soit sa position dans l’arborescence, l’utilisateur peut à tout moment revenir
directement à son répertoire de connexion grâce à la commande cd sans argument.
La commande ls permet d’afficher les entrées d’un répertoire avec plus ou moins d’informations
selon les options utilisées. Par défaut, ls affiche seulement le nom des entrées dites non cachées, c.-
à-d. celles dont le nom ne commence pas par un point. Pour visualiser les entrées cachées, il faut
ajouter l’option –a pour les afficher toutes. La commande ls dispose de beaucoup d’options dont la
plus utilisée est l’option –l qui permet d’afficher les principaux attributs des entrées : type (« d »
répertoire, en anglais directory, « – » pour un fichier dit ordinaire contenant du texte, un
programme...), droits d’accès (lecture, écriture...), propriétaire, groupe, taille (en octets), date (de
dernière modification) et nom (de l’entrée).

5.3 Concept de l’inode

• L’arborescence contient 3 types d’éléments :


• Des répertoires qui sont des sortes de dossiers ou classeurs ;
• Des fichiers ordinaires contenant une suite séquentielle d’octets ;
• Des fichiers spéciaux repérant les périphériques.
• Le système d’exploitation possède une vision uniforme de ces entrées grâce au concept
d’Inode
• Un inode contient ces informations :
• Type (fichier, répertoire...)
• Identité du propriétaire et du groupe
• Droits d’accès
• Dates de modification...
• Autres (taille, liens, adresses...)

Arnaud AMELINA 3
Initiation aux Systèmes Unix UCAU-UUT

• Un système de fichiers est structuré en 4 zones comme suit :

La caractéristique principale du système de fichiers Unix est d’offrir une vision uniforme à
l’utilisateur malgré la diversité des types d’éléments qu’il regroupe : répertoires, fichiers
(traditionnels ou ordinaires) et fichiers spéciaux représentant les périphériques. Cette uniformité est
assurée grâce à la notion d’inode qui est une structure de 128 octets servant de descripteur pour
toute entrée du système de fichiers. Chaque inode possède un numéro (unique). Comme ce sont des
données décrivant des données, les inodes sont appelées des méta-données. Les méta-données sont
la carte d’identité des entrées de l’arborescence. Un inode contient notamment le type de l’entrée
repérée (fichier, répertoire...), l’identité du propriétaire (avec son groupe) de l’entrée, les droits
d’accès (en lecture, en modification...) de l’entrée, la taille de l’entrée.

Pour pouvoir stocker des informations sur un support magnétique tel qu’un disque, celui-ci doit
d’abord être découpé en partitions (ou disques virtuels), chacune étant alors utilisée comme un
disque à part entière et se présentant comme une suite de N blocs numérotés de 0 à N-1. Pour
stocker des données sur une partition, il faut y créer un système de fichiers. Cette opération a pour
objet de distinguer quatre zones sur le disque et d’y créer un répertoire racine :
1. Le premier bloc (bloc 0) est réservé pour contenir un programme chargeur (amorce ou boot
en anglais) qui sert au démarrage du système. Bien que seule la partition de démarrage
contenant le programme du système d’exploitation ait besoin de cette amorce, le bloc 0 de
chaque système de fichiers est réservé pour des raisons d’homogénéité.
2. Le bloc suivant (bloc 1), appelé « super-bloc », sert de descripteur du système de fichiers. Il
est pour un système de fichiers l’équivalent de l’inode pour un fichier. Il contient les
caractéristiques du système de fichiers telles que son nom, la date de mise à jour, la taille des
blocs... S’y trouvent également des informations de gestion telles que le début des listes
d’inodes et de blocs libres.
3. Un certain nombre de blocs à partir du numéro 2 sont réservés pour contenir la liste des
inodes. Ce nombre d’inodes détermine le nombre maximal de fichiers que peut contenir ce
système de fichiers.
4. Les blocs suivants (du premier bloc après la liste des inodes jusqu’au dernier) servent pour
stocker les blocs de données.

Arnaud AMELINA 4
Initiation aux Systèmes Unix UCAU-UUT

Pour résumer, par analogie, le super-bloc décrit les propriétés d’un classeur, les blocs inodes
forment l’index du classeur, les blocs de données le contenu du classeur, et enfin, le bloc d’amorce
indique la première page du classeur (qui n’est pas obligatoirement la première page physique).
Par conséquent, un système de fichiers peut être saturé de deux manières, soit par manque de blocs
de données libres, soit par manque de blocs d’inodes. Le nombre maximal de fichiers est le nombre
maximal d’inodes. Ce nombre est fixé à la création du système de fichier, c.-à-d. au formattage de la
partition ; il est généralement égal au nombre maximal de blocs de la partition divisé par quatre.
Enfin, Unix permet la création de fichiers vides : il suffit de créer un inode seul sans lui associer de
données.

5.4 Fichiers ordinaires


• Un fichier ordinaire ne possède aucune structure particulière :
c’est une suite d’octets.
• Les adresses des blocs de données stockées dans l’inode sont :
• Dix adresses directes pour les 10 premiers blocs ;
• Une adresse indirecte à un niveau d’indirection ;
• Une adresse indirecte à deux niveaux d’indirection ;
• Une adresse indirecte à trois niveaux d’indirection.
• Voici les commandes de base pour consulter le contenu d’un fichier de texte :
• cat fich, more fich : affichage simple et page par page ;
• head fich, head –n fich : affichage des 10/n premières lignes ;
• tail fich, tail –n fich ; affichage des 10/n dernières lignes ;
• wc fich : affichage du nombre de lignes, de mots, de caractères
• Options –l, –w et –c pour les nombres de lignes, de mots et de caractères.
Un fichier ordinaire ne comporte aucune structure particulière, c’est une suite d’octets. Un fichier
ordinaire est repéré par une référence dans un répertoire (association entre son nom et son numéro
d’inode). Son inode contient entre autres les adresses des blocs de données associés. Les dix
premières adresses sont directes, les trois dernières sont indirectes. En d’autres termes, comme
dessiné dans la figure ci-dessous, les dix premiers blocs de données (rectangle noirs) à gauche sont
accessibles directement à partir de l’inode : les adresses de ces blocs sont dans l’inode. Ensuite, les
autres blocs pointés par les adresses dans l’inode (rectangles hachurés dans la figure) sont des blocs
contenant des adresses vers d’autres blocs : c.-à-d., les adresses contenues dans l’inode sont des
adresses indirectes. Ainsi, la onzième adresse contient le numéro d’un bloc de chaînage qui contient
lui-même les numéros de blocs de données. La douzième adresse contient le numéro d’un bloc de
chaînage qui contient lui-même des numéros de blocs de chaînage qui contiennent enfin des
numéros de blocs de données. Enfin, la treizième adresse procède d’une triple indirection. La figure
suivante représente une telle organisation.

Arnaud AMELINA 5
Initiation aux Systèmes Unix UCAU-UUT

L’idée de base pour l’organisation des adresses (directes et indirectes) est de ne pas être limité en
taille le fichier (grâce aux adresses indirectes) tout en ne pénalisant pas l’accès aux petits fichiers
(grâce aux adresses directes). Ainsi, la taille maximale d’un fichier est supérieure à la taille d’une
partition et très nettement supérieure à la taille raisonnable d’un fichier.
Les premières commandes de cette page sont des commandes du type filtre. Un filtre est un
programme qui réalise un traitement sur un flot de données, ici produit par la lecture d’un fichier
texte en entrée, pour fournir un flot de données en sortie. Ce concept plutôt classique prend tout son
intérêt grâce aux différentes formes que peuvent revêtir les flots de données. Ce point sera détaillé
dans la section sur le shell avec les redirections et les tubes. Les filtres présentés maintenant sont
des filtres dits « simples ». Ces commandes acceptent de très nombreuses options que nous n’avons
pas le temps ni l’espace de décrire ici. Avant d’appliquer un filtre sur un fichier, il est préférable de
s’assurer que le fichier contient du texte. La commande file permet de le savoir. Dans le cas de
texte, elle précise si les caractères sont uniquement des caractères ASCII ou s’ils contiennent
d’autres caractères, par exemple des caractères accentués ISO-8859-X (X dans [1–15]).
La commande de base pour afficher le contenu d’un fichier de texte est cat suivie du nom du fichier.
Cette commande accepte plusieurs noms de fichiers comme arguments, ce qui permet de les
concaténer (cat signifie concatenate) en un seul flot de sortie.
La commande cat n’est guère pratique avec des fichiers dont la taille dépasse celle de l’écran car
l’affichage défile de façon ininterrompue et seules les dernières lignes affichées restent visibles sur
l’écran à la fin de la commande. La commande more prend en compte le nombre de lignes de
l’écran pour offrir un affichage page par page. Cette commande affiche une page du fichier suivie
d’une ligne d’information avec le pourcentage de texte déjà affiché et elle attend une requête du
clavier. Si la commande est appelée avec plusieurs arguments, elle affiche en plus un en-tête avec le
nom du fichier entre deux lignes constituées de caractères deux points (« : »). Les requêtes les plus
utilisées sont espace (ou z) pour afficher la page suivante, ENTRÉE pour afficher la ligne suivante,
b pour afficher la page précédente et q (ou Q) pour quitter la commande avant la fin.
La commande tail affiche la fin du fichier passé en argument. Par défaut, tail affiche les dix
dernières lignes. Cette commande permet également de suivre dynamiquement l’évolution d’un
fichier. En utilisant l’option –f (fil de l’eau), elle affiche la fin du fichier puis elle entre dans une
boucle infinie avec affichage chaque seconde de toute nouvelle information qui est ajoutée au
fichier.

Arnaud AMELINA 6
Initiation aux Systèmes Unix UCAU-UUT

La commande head affiche le début du fichier passé en argument. Par défaut, head affiche les dix
premières lignes. Cette commande ressemble à la commande tail mais elle est plus limitée au niveau
des options. Par contre, elle peut accepter plusieurs fichiers comme arguments. Dans ce cas, la
commande head affiche avant le début de chaque fichier, un en-tête avec le nom du fichier.
Toujours pour un fichier de texte, la commande wc (word count) permet de compter les lignes, les
mots et les caractères. Lorsque la commande est appelée avec plusieurs arguments, elle affiche
également un total cumulé.

5.5 Fichiers spéciaux : périphériques et pseudo-périphériques *


• Un périphérique est un matériel (physique) connecté à l’unité centrale d’un ordinateur :
disque, souris, écran, réseau...
• Les périphériques sont repérables par un nom dans l’arborescence (sous /dev).
• Un pilote de périphériques est une fonction du système d’exploitation permettant de
manipuler une catégorie de périphériques via les opérations classiques autorisées par
les inodes : open, read, write, close.
• Un pseudo-périphérique est une entrée gérée comme un périphérique bien que non associée
à un élément physique.
• La première utilisation est le repérage de périphériques dits virtuels, c.-à-d. des
parties de périphériques (physiques), par exemple : les écrans virtuels de l’écran
(physique), les partitions (logiques) du disque (physique)...
• La seconde utilisation est la mise en évidence de fonctionnalités du système
d’exploitation dans l’arborescence, par exemple : la « poubelle » qui a pour nom
/dev/null.
L’astérisque à la fin du titre signifie que ce contenu est difficile. C’est un contenu
d’approfondissement. Ne l’étudiez pas en détail avant de maîtriser les autres points de la section !
Nous le fournissons pour raison de complétude.
Unix offre à l’utilisateur une vision uniforme des entrées-sorties en attribuant un nom dans
l’arborescence à tous les périphériques, ce qui leur confère les mêmes attributs qu’aux fichiers. Sous
GNU/Linux, le répertoire /dev (devices) est prévu pour contenir toutes les entrées des périphériques
tels que fdX pour les lecteurs de disquettes (X dans [0–9] pour les différents lecteurs). Le système
d’exploitation effectue un aiguillage interne soit vers le système de fichiers, soit vers les pilotes13
de périphériques, en distinguant en outre deux modes d’utilisation (bloc et caractère). Ainsi, les
pilotes de périphériques sont référencés dans deux tables du noyau : la table bdevsw (block device
software) pour ceux du mode bloc et la table cdevsw (character device software) pour ceux du mode
caractère. À la place des adresses, l’inode d’un périphérique contient deux entiers qui sont le majeur
(major number) et le mineur (minor number). Le majeur sert d’index dans l’une des tables afin de
sélectionner le pilote du périphérique concerné. Un pilote de périphérique pouvant gérer plusieurs
unités du même type, par exemple plusieurs écrans ou plusieurs disques, le mineur permet de
caractériser l’unité particulière du type de périphérique concerné.
Parmi les périphériques en mode bloc, on trouve principalement les disques physiques, les
partitions, les bandes magnétiques, les disquettes, les clefs USB... Le mode bloc signifie que les
données transférées entre le disque et la mémoire centrale s’effectuent par bloc de données. Le
système d’exploitation garde la mémoire des données qu’il a lues. La lecture d’une information peut
donc ne pas conduire à un accès au périphérique mais seulement à une copie de mémoire à
mémoire. Périodiquement, la primitive sync du système d’exploitation recopie sur le disque toutes
les informations modifiées de façon à garantir le maximum de cohérence entre la vision de

Arnaud AMELINA 7
Initiation aux Systèmes Unix UCAU-UUT

l’utilisateur de la mémoire centrale et le stockage physique en mémoire secondaire. Malgré cela, il


peut arriver qu’en cas de coupure de courant par exemple, il y ait incohérence. Aussi, lors du
démarrage du système d’exploitation, si celui-ci s’aperçoit qu’il y a eu arrêt brutal de la machine,
donc potentiellement des incohérences, la commande fsck (file system check) teste et rétablit si
possible automatiquement la cohérence.
Les principaux périphériques en mode caractère sont les écrans, les imprimantes, les lignes de
communication... Les accès sont quasiment identiques à ceux liés aux fichiers ordinaires. La lecture
standard sur ce type de périphérique s’effectue par ligne, c.-à-d. que les caractères lus ne sont
transmis qu’après la lecture d’un code de validation (NEWLINE). Il existe un autre mode d’accès,
appelé brut (raw), dans lequel les caractères sont transmis au fur et à mesure sans attendre de
caractère NEWLINE.
Les périphériques en mode bloc peuvent aussi être gérés en mode caractère pour permettre certaines
opérations avec de meilleures performances. Pour cela, un périphérique dispose d’une entrée dans
chacune des deux tables. Afin de distinguer ce nouveau mode appelé raw-block, chaque élément
possède une deuxième entrée dans l’arborescence obtenue en ajoutant la lettre r (pour raw) devant
le nom de l’entrée associée au mode bloc : par exemple, dsk02 devient rdsk02.
Le terme pseudo-périphérique qualifie des entrées qui sont gérées comme des périphériques donc
par des pilotes bien qu’elles ne soient pas associées à des éléments physiques. On distingue deux
catégories de pseudo-périphériques, ceux associés à des périphériques virtuels et d’autres liés à des
fonctionnalités du système d’exploitation.
Un périphérique virtuel correspond à une partie d’un périphérique physique et les principaux sont
les écrans virtuels (aussi appelés bureaux) et les partitions (ou disques logiques). Un terminal virtuel
correspond à une fenêtre dans un environnement multifenêtre ou à une connexion distante via un
réseau local. Une partition correspond à une partie d’un disque ; les disques physiques sont divisés
en disques logiques pour des raisons de performance : moins d’inodes donc recherche d’un inode
plus rapide.
Tous les systèmes de fichiers disposent de quatre pseudo-périphériques standards, groupés comme
les périphériques sous /dev et qui s’appellent null, tty, mem et kmem. L’élément null sert de
poubelle. Attention ! ce n’est pas la poubelle montrée par l’icone correspondant en fond d’écran de
la session ; comme dans Windows, cette dernière garde une copie jusqu’à ce qu’elle soit vidée,
contrairement à /dev/null ! Les éléments tty et mem repèrent respectivement le terminal et l’image
mémoire associés au processus en cours d’exécution. L’élément kmem (kernel memory) repère
l’image mémoire du noyau du système d’exploitation. Les deux références à la mémoire peuvent
servir lors des phases de test et de mise au point des logiciels.

5.6 Répertoires
• Le contenu d’un répertoire est un catalogue qui met en correspondance des noms de fichiers,
de sous-répertoires avec des numéros d’inode.
• Dès la création par la commande mkdir rep, deux entrées existent :
• La référence au répertoire parent (du répertoire créé) noté « .. »
• La référence (autoréférence) au répertoire lui-même noté « . »
• Pour supprimer un répertoire, il faut qu’il soit « vide », ne contenir que « .. » et « . ».
• La suppression s’effectue avec la commande rmdir rep.

Arnaud AMELINA 8
Initiation aux Systèmes Unix UCAU-UUT

Un répertoire sert à la mise en correspondance entre des noms de fichiers et des numéros d’inodes.
Dès sa création avec la commande mkdir, tout répertoire contient deux entrées qui sont notées « . »
(point) pour le répertoire lui-même (autoréférence) et « .. » (point point) pour le répertoire de
rattachement (parent) dans l’arborescence. Pour supprimer un répertoire avec la commande rmdir, il
faut que celui-ci soit vide, c.-à-d. ne contienne que les deux éléments de départ (« . » et « .. »). Pour
la racine (« / »), les deux éléments « . » et « .. » sont confondus.
Pour des raisons de performance, il est préférable d’organiser les informations selon un mode
arborescent plutôt que d’avoir d’importantes listes de fichiers sous un même répertoire. D’ailleurs,
le système de fichiers Unix a introduit une hiérarchie et une terminologie de répertoires standards,
chacun regroupant des éléments de même nature. Ainsi, les exécutables sont regroupés sous bin
(binary), les bibliothèques sous lib (library), les périphériques sous dev (device), la documentation
sous man (manual), les sources sous src, les fichiers et programmes d’administration sous etc, les
fichiers temporaires sous tmp, les éléments spécifiques au site local sous local, les fichiers système
sous sys...
Dans la suite, afin d’alléger les dessins, les contenus des répertoires sont représentés hors des zones
des blocs de données. Bien évidemment, les contenus des répertoires sont toujours des blocs de
données.

Arnaud AMELINA 9

Vous aimerez peut-être aussi