INTERFACE DE SYSTEME DE FICHIERS (UNIX)
1 Définitions
Un fichier (File) désigne un ensemble d’informations stockées sur un support de stockage permanant, en vue de leur conservation et de leur utilisation dans un système informatique. Chaque fichier est identifié par un nom auquel on associe un emplacement sur le disque (une référence) et possède un ensemble de propriétés : ses attributs. Il représente la plus petite entité logique de stockage sur un disque. Le système de fichiers (File System) est la partie du système d'exploitation qui se charge de gérer les fichiers. La gestion consiste en la création (identification, allocation d'espace sur disque), la suppression, les accès en lecture et en écriture, le partage de fichiers et leur protection en contrôlant les accès.
2 Types de Fichiers On distingue différents types de fichiers :
2.1 Fichiers ordinaires (Regular Files)
Les fichiers ordinaires (appelés aussi fichiers réguliers) peuvent contenir du texte, du code exécutable ou tout type d’information (binaire, c’est à dire non texte). Unix n’impose aucune structure interne au contenu des fichiers ; ils sont considérés comme une suite d’octets.
2.2 Fichiers répertoires (Directory Files)
Un répertoire (directory) peut être vu comme un fichier spécial contenant des liens vers d'autres répertoires ou fichiers. Cela permet de regrouper dans un même répertoire, les fichiers ayant des caractéristiques communes (même propriétaire, les programmes, . . .) et de hiérarchiser le système de fichier.
2.3 Fichiers spéciaux (Special Files)
Les fichiers spéciaux correspondent à des ressources ; ils sont associés à des dispositifs d’entrées/sorties physiques. Ils n'ont pas de taille. Ils sont traités par le système comme des fichiers ordinaires, mais les opérations de lecture/écriture sur ces fichiers activent les dispositifs physiques associés. On distingue : les fichiers spéciaux mode caractère (Character Devices) qui permettent de modéliser les périphériques d’E/S série tels que les terminaux, les imprimantes et les modems. les fichiers spéciaux mode bloc (Block Devices) qui permettent de modéliser les disques.
2.4 Autres types de fichiers
Les liens symboliques (Symbolic Links) qui représentent des pointeurs indirects ou des raccourcis vers des fichiers. Un lien symbolique est implémenté comme un fichier contenant un chemin d’accès.
Les tubes nommés (Named Pipe, FIFO) permettant la communication entre processus.
Les sockets internes qui sont destinées à la communication bidirectionnelle entre processus.
3 Attributs d’un Fichier
Chaque fichier possède un ensemble d’attributs (appelés aussi méta-données), parmi lesquels :
Un propriétaire (Owner).
Un groupe (Group).
Une série de droits d’accès (Access Permissions) : lecture (R, Read), écriture (W, Write), exécution (X, Execute). Ces droits sont définis pour l'utilisateur, le groupe, et le reste du monde (Other).
Type de fichier : fichier régulier, répertoire, périphérique caractère, périphérique bloc, tube, etc. Dates de création/modification/dernier accès. L’option –l de la commande ls ( list) permet de lister les attributs des fichiers et répertoires.
Ces méta-données sont traditionnellement stockées dans une structure de données appelée i-noeud (inode ; index node). Chaque inode possède un numéro (unique). La commande stat permet d’afficher l’intégralité du contenu de l’inode et l’option –i de la commande ls permet d’afficher le numéro d’inode.
4 Lien Physique vs. Lien Symbolique
Chaque fichier (ordinaire ou répertoire) est référencé par son nom. Un lien est une entrée d’un répertoire qui référence un fichier qui se trouve dans un autre répertoire. Il existe deux sortes de liens : physiques et symboliques.
Un lien physique (Hard Link) correspond à l’ajout d’un nouveau nom pour le même fichier. Les liens physiques ne sont autorisés que pour les fichiers de données (et donc interdits pour les répertoires ou les fichiers spéciaux) et ne peuvent exister que dans le même système de fichiers que le fichier lié.
Un lien symbolique (Soft Link) est un fichier spécial contenant le chemin du fichier ou du répertoire lié. Il peut se trouver n’importe où dans la hiérarchie. La création des liens physiques ou symboliques se fait à l’aide de la commande ln. La commande :
$ ln nomfich nomlien crée un lien physique appelé nomlien sur le fichier nomfich.
Par contre la commande :
$ ln -s nomfich nomlien crée un lien symbolique appelé nomlien sur le fichier nomfich.
5 Organisation du Système de Fichiers
Le système Unix organise son information sous la forme d’une arborescence ; les feuilles étant les fichiers (Files) et les nœuds des répertoires (Directories). Cette organisation en cascade de répertoires et sous-répertoires commence par un répertoire racine, noté /. Chaque répertoire peut contenir des fichiers et des sous-répertoires.
Le tableau ci-dessous illustre quelques répertoires types d’un système de fichiers UNIX :
6 Déplacement dans le Système de Fichiers
Pour accéder à un fichier, on doit préciser son chemin d’accès (Pathname) en indiquant les noms des différents sous-répertoires qui mènent à ce fichier, séparés par des /.
On distingue deux types de chemins :
Chemins absolus (Absolute Paths) qui spécifient la suite des répertoires à traverser en partant de la racine. Un chemin absolu doit forcément commencer par un slash (i.e. /). Exemple /home/Genius/exo.c : chemin d’accès absolu au fichier exo.c se trouvant dans le répertoire Genius, lui-même dans le répertoire home de la racine.
Chemins relatifs (Relative Paths) qui partent d'un certain répertoire de référence qui représente généralement le répertoire de travail (Working Directory) de l’utilisateur. Le répertoire de travail est le répertoire dans lequel l’utilisateur se trouve actuellement. Exemple Si on se trouve dans le répertoire /home/Genius, le fichier de nom absolu /home/Genius/exo.c peut être désigné simplement par exo.c. En ce qui concerne les chemins relatifs, un certain nombre de raccourcis sont utilisés: . qui désigne le répertoire courant, .. qui désigne le répertoire parent du répertoire courant, ~/ qui désigne le répertoire personnel (Home Directory) de l’utilisateur. Ce répertoire représente le répertoire de travail par défaut dans lequel l’utilisateur sera positionné à l’ouverture de sa session.
La recherche des fichiers correspondant aux exécutables est simplifiée par l’utilisation de la variable d’environnement PATH. La variable PATH stocke la liste des chemins (séparés par le caractère :) qui doivent être cherchés afin d’exécuter un programme (fichier exécutable) sans faire référence à un chemin absolu ou relatif. Le tableau ci-après liste quelques commandes communes pour le déplacement dans le système de fichiers :
10 Fichiers et Permissions
10.1 Principe Sous UNIX, pour un fichier ou répertoire, on distingue trois (03) catégories d’utilisateurs : le propriétaire (u : user), les membres du groupe (g : group), et les autres utilisateurs (o : others). Pour chaque catégorie, il est possible d’attribuer des droits de lecture ( r : read), d’écriture (w : write) ou d’exécution (x : execute). L’interprétation de ces droits varie selon qu’il s’agisse d’un fichier ou d’un répertoire.
Pour les fichiers, l’interprétation est la suivante :
- r : l’utilisateur peut lire le contenu du fichier.
- w : l’utilisateur peut modifier le contenu du fichier.
- x : l’utilisateur peut exécuter le fichier.
Pour les répertoires, l’interprétation est comme suit :
- r : l’utilisateur peut lister le contenu du répertoire.
- w : l’utilisateur peut créer, renommer ou supprimer des fichiers dans le répertoire.
- x : l’utilisateur peut accéder au répertoire et travailler avec son contenu.
10.2 Changer les permissions
Les permissions sur fichiers et répertoires ne peuvent être modifiées que par leurs propriétaires, ou par le super-utilisateur (root). La commande chmod (change file modes) permet de modifier ces permissions (voir manuel Linux). On peut utiliser soit la représentation symbolique (r, w, x), ou octale pour référencer une permission. La figure ci-dessous (voir Figure 4.1) illustre comment les permissions sont affichées et comment elles peuvent être référencées.
La figure ci-dessous (Figure 4.2) résume la représentation symbolique des permissions en utilisant la commande chmod :
Exemples
chmod u+x,g+x,o+x monfichier
Ajouter la permission d’exécution au fichier monfichier, pour le propriétaire, le groupe, et les autres.
chmod ugo+x monfichier
Identique à la précédente.
chmod a+x monfichier
Identique à la précédente.
chmod g-w,o-w monfichier
Enlever le droit d’écriture sur le fichier monfichier, pour le groupe et les autres.
chmod u=rwx monfichier
Attribuer les droits de lecture, écriture et exécution sur le fichier mon fichier, pour le propriétaire.
chmod a= monfichier
Enlever tous les droits à tout le monde (propriétaire, groupe et autres).
chmod 711 monfichier
Attribuer les droits de lecture, écriture et exécution sur le fichier monfichier, pour le propriétaire (7) et le droit d’exécution sur ce fichier pour le groupe et les autres (1).
10.3 Droits par défaut
Le système attribue des droits par défaut aux fichiers et répertoires lors de leur création. Par défaut, le système positionne les droits de lecture et d’écriture pour toutes les catégories d’utilisateur (i.e. rw-rw-rw (666)). Les répertoires reçoivent en plus les droits d’exécution (i.e. rwxrwxrwx (777)). Ces droits peuvent être modifiés à l’aide de la commande umask. Cette commande indique les droits qu’ils ne doivent pas être accordés aux fichiers et répertoires lors de leur création, autrement dit les droits à soustraire à partir des droits par défaut quand les fichiers et répertoires sont créés. La valeur par défaut du masque sur un système UNIX est 022, ce qui fait que les fichiers seront créés avec les permissions 644 (rw-r--r--) et les répertoires avec les permissions 755 (rwxr-xr-x).