IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Présentation du système Linux


précédentsommairesuivant

II. Le système de fichiers

II-A. Qu'est-ce donc ?

Un fichier LINUX est une chaîne de caractères non structurée (du point de vue du système) : le système ne possède aucune notion d'organisation de fichiers (séquentielle, indexée, partitionnée...).

A tout fichier est associé un bloc d'informations, appelé i-noeud (noeud d'index, ou index-node ou i-node) contenant un certain nombre d'informations d'ordre général concernant le fichier :

  • sa taille ;
  • l'adresse des blocs utilisés sur le disque pour ce fichier ;
  • l'identification de son propriétaire et ses droits d'accès par les différents utilisateurs ;
  • son type (fichier ordinaire ou spécial, catalogue...) ;
  • un compteur de ses références dans le système ;
  • un certain nombre de dates relatives aux principales opérations réalisables sur le fichier (consultation, modification...); les dates sont codées par un entier (nombre de secondes écoulées depuis le 1er janvier 1970).

Ce bloc d'informations ne contient aucun nom pour le fichier. La désignation d'un fichier se fait par l'intermédiaire de répertoires (directories) : un répertoire est un fichier dont le contenu est une suite de couples formés d'un numéro (un index par lequel le système identifie le fichier) et d'un nom par lequel le fichier est identifié dans le répertoire.

Ainsi un fichier peut être référencé par l'intermédiaire d'un répertoire et d'un nom dans ce répertoire. Il est possible de référencer un même fichier sous des noms différents dans des répertoires différents. Le nombre des références à un fichier est comptabilisé dans le compteur des références du i-noeud de ce fichier, un fichier n'étant effectivement détruit (c'est-à-dire l'espace nécessaire pour stocker son contenu et le i-noeud correspondant effectivement récupéré par le système) que lorsque le compteur de références du i-noeud du fichier devient nul. Aussi, la désignation d'un fichier nécessite-t-elle celle d'un répertoire et d'un nom dans celui-ci, le répertoire étant lui-même désigné par un nom dans un autre répertoire, etc.

Ce procédé de désignation est initialisé par l'existence d'un fichier sans nom dont la localisation est connue du système : il s'agit de la racine absolue du système de fichiers (index 2 dans le disque système).

Il faut savoir que sous Linux seuls les index de 1 à 10 sont réservés, on peut citer par exemple :

II-B. Les fichiers et le répertoire de travail

Soit un système sur lequel la racine du système de fichiers (d'index 2) contient entre autres choses les noms de deux répertoires usr et bin et leurs numéros respectifs (ici 524295 et 131075), le sous-répertoire bin contenant en particulier les couples (ls, 131150), (rm, 131191), (echo, 131120) correspondant aux programmes associés à des utilitaires du système; supposons que le répertoire usr contienne quant à lui le couple (bin, 524391). Ce sous-répertoire bin durépertoire usr contient lui aussi un certain nombre de fichiers ordinaires associés à des commandes du système. Le sous-répertoire home contient en particulier le couple (snake, 262148) correspondant à un répertoire. Enfin le répertoire snake contient à la fois des fichiers ordinaires et le couple (cpp, 262160) correspondant à un répertoire contenant lui-même des références à des fichiers ordinaires, par exemple (main.cpp, 271215). Cette hiérarchie peut être représentée par la structure suivante :

 
Sélectionnez
                  bin
       524295 ---------- 524391
       /
      /
     /usr
    /
   /   home          snake            cpp            main.cpp
/ 2----------262145----------262148-----------262160-----------271215
  \
   \bin      131150
    \        /
     \      /ls
      \    /     rm
      131075----------131191
        \
         \
          \echo
           \
            \
            131120

Le système de fichiers a donc une structure d'arborescence (graphe sans circuit qui de plus doit être connexe si le système est consistant !).

La racine de cette arborescence est la racine du système de fichiers et les feuilles en sont des fichiers non-répertoires ou des répertoires vides.

Pour tout fichier, il existe (si le système est consistant), au moins un chemin de la racine vers ce fichier, et la liste des noms étiquetant les arêtes de ce chemin identifie sans aucune ambiguïté ce fichier; il s'agit d'un nom ou référence absolue qui s'écrit symboliquement /nom1/nom2/.../nomp, où nom1, nom2..., nomp sont les noms rencontrés dans l'ordre de la racine vers le noeud correspondant de l'arborescence. La racine a pour référence absolue /.

Sur l'exemple, le fichier numéro 271215 a comme référence absolue (il peut en avoir d'autres)/home/snake/cpp/main.cpp.

Afin de faciliter les repérages, à tout instant un utilisateur dispose d'un répertoire privilégié appelé répertoire de travail par rapport auquel il lui est possible de réaliser des repérages relatifs. Ce répertoire de travail est utilisé par le système dans ce cas pour préfixer les repères : par convention, une référence relative est une référence ne commençant pas par le caractère /.

Ainsi, sur l'exemple précédent et si le répertoire de travail est /home/snake, le même fichier peut être désigné par cpp/main.cpp.

Les repérages sont encore facilités par le fait que tout répertoire contient les deux références particulières . et .. qui désignent respectivement le répertoire lui-même et son père (le répertoire unique dans lequel il est référencé). Ainsi le compteur des références de tout répertoire est au moins égal à deux, puisque le répertoire est référencé par le nom que lui a donné son propriétaire dans le répertoire père et par le nom . dans lui-même. On peut même dire plus : le i-noeud de tout répertoire père de n sous-répertoires a un compteur de références égal à n + 2.

Sur l'exemple, le répertoire de travail étant maintenant /home/snake, le même fichier pourra être référencé par ../snake/cpp/main.cpp.

Enfin, chaque utilisateur possède un répertoire particulier que nous appellerons son répertoire privé qui devient automatiquement son répertoire de travail dès l'ouverture de la session. Il est instructif à ce propos de consulter le fichier /etc/passwd qui contient entre autres choses la liste des identifications des utilisateurs, leurs mots de passe codés et la référence absolue de ce répertoire particulier.

II-C. Les différentes sortes de fichiers existants

Les fichiers peuvent être en première approche regroupés en trois grandes catégories.

II-C-1. Ordinaires

Ce sont les fichiers qui contiennent des programmes (binaires ou sources), des données de programmes utilisateur ou système (fichier ASCII). Ces fichiers sont les résultats de programmes (éditeurs, compilateurs, fichiers résultats...).

II-C-2. Spéciaux

L'une des originalités du système LINUX réside dans le traitement qu'il fait des entrées-sorties sur périphériques (terminaux, imprimantes, disques, bandes). D'un point de vue externe, il n'y a pas de différence pour les utilisateurs entre les fichiers ordinaires, les répertoires et les périphériques pour ce qui a trait à leur référençage. Un fichier spécial est associé à un dispositif d'entrée-sortie physique. Les fichiers spéciaux sont traités par le système comme des fichiers sur disque ordinaires, mais les opérations de lecture ou d'écriture sur ces fichiers activent les dispositifs physiques associés. A un niveau un peu plus fin on peut distinguer deux types de fichiers spéciaux :

  • les fichiers spéciaux en mode caractère comme les terminaux pour lesquels les entrées-sorties sont réalisées caractère par caractère ;
  • Les fichiers spéciaux en mode bloc comme les disques où les entrées-sorties sont réalisées par bloc (la taille des blocs étant en général 512 ou 1024 caractères).

II-C-3. Répertoires

Nous avons vu leur rôle essentiel dans le système puisque c'est par leur intermédiaire que les utilisateurs peuvent désigner leurs fichiers. Citons les répertoires principaux que l'on trouve sur tous les systèmes :

  • /bin : les fichiers exécutables (en binaire) (initialisation du système + commandes "essentielles") ;
  • /boot : le noyau vmlinuz et les fichiers de démarrage ;
  • /dev : répertoire de fichiers spéciaux, qui servent de canaux de communication avec les périphériques (disques, adaptateurs réseau, cartes son, etc.) ;
  • /etc : les fichiers de configuration du système et les principaux scripts de paramétrage ;
  • /home : la racine des répertoires personnels des utilisateurs ;
  • /lib : les bibliothèques et les modules du noyau.
  • /mnt : la racine des points de montage des systèmes de fichiers périphériques ou extérieurs (cd, disquette, nfs, etc.) ;
  • /opt : lieu d'installation d'applications supplémentaires (comme emacs, java, etc.) ;
  • /root : répertoire personnel du super-utilisateur root ;
  • /sbin : les fichiers exécutables pour l'administration du système ;
  • /tmp : stockage des fichiers temporaires ;
  • /usr : programmes accessibles à tout utilisateur, sa structure reproduit celle de la racine / ;
  • /var : données variables liées à la machine (fichiers d'impression, traces de connexions http, smb, etc... dans /var/log) ;
  • /proc : ce pseudo-répertoire contient une "image" du système (/proc/kcore est l'image de la RAM) ;
  • /lost+found : contient les pointeurs de blocs vers les blocs de données qui occupent des mauvais secteurs du disque.

II-D. Les disques logiques

L'espace physique global sur disque est divisé en disques logiques référencés dans le catalogue /dev (ce sont des fichiers spéciaux) et à chacun de ces disques logiques peut être associée une référence de catalogue. Chacun des disques logiques possède sa propre table d'index et sa propre racine de numéro 2. L'un des disques, dit disque système, est privilégié: il contient le noyau, les fichiers systèmes, etc. Au lancement du système, ces disques peuvent être montés et par conséquent devenir accessibles (donc référençables). Le disque système est naturellement toujours monté !

II-E. La protection des fichiers

Sous Linux, tout utilisateur possède, associé à son identification, un numéro de compte et appartient à un groupe particulier. Ainsi, pour un fichier donné, les utilisateurs du système peuvent-ils être classés en trois catégories :

  • le propriétaire du fichier ;
  • les membres d'un groupe particulier (groupe propriétaire) ;
  • les autres utilisateurs.

Il existe par ailleurs dans le système un utilisateur privilégié disposant de tous les droits (le super-utilisateur dont une identification est root et le compte 0).

  • la lecture ;
  • l'écriture ;
  • l'exécution.

Précisons que le droit d'exécution pour un utilisateur ou une catégorie d'utilisateurs, lorsqu'il est appliqué à un répertoire, signifie que cet utilisateur a la permission de faire figurer ce répertoire dans une référence ou de s'y positionner (c'est-à-dire d'en faire son répertoire de travail), le droit de lecture étant le droit de lire les noms référencés dans ce catalogue et le droit d'écriture la possibilité d'écrire dans ce répertoire, et en particulier de détruire un fichier du répertoire, et cela même sans aucun droit de lecture ou d'écriture sur ce fichier lui-même. Pour un fichier ordinaire, le droit de lecture donne la possibilité de lire le contenu du fichier et le droit d'écriture celui de modifier le fichier.

Pour assurer ces protections, le système utilise donc 9 bits du i-noeud du fichier indiquant pour chaque catégorie d'utilisateurs et chacune des opérations si l'opération est réalisable. De plus 3 autres bits ont un rôle spécial :

  • le bit "set-uid" qui, lorsqu'il est positionné pour un fichier binaire exécutable, indique que le processus correspondant à une exécution de ce programme a les droits du propriétaire du programme et non de l'utilisateur qui le lance. C'est ce mécanisme qui permet à tout utilisateur de modifier le fichier /etc/passwd dont l'utilisateur privilégié root est propriétaire au travers de la commande passwd (le "set-uid bit" est positionné pour le fichier de référence /bin/passwd contenant le programme réalisant cette commande) ;
  • le bit "set-gid qui a le même rôle que le précédent mais relativement au groupe ;
  • le bit de "collage" (sticky bit) qui assure le maintien d'un programme en zone de swap même lorsqu'aucun processus actif ne correspond à une exécution du programme.

II-F. Comment manipuler des fichiers ?

II-F-1. Connaître le répertoire de travail : pwd

La commande pwd fournit le nom du répertoire de travail (c'est-à-dire la référence absolue du répertoire où vous vous trouvez).

Image non disponible

II-F-2. Changer de répertoire de travail : cd

La commande cd permet de se déplacer dans l'arborescence du système de fichiers. Elle peut être utilisée sans paramètre, auquel cas le répertoire privé de l'utilisateur devient le répertoire de travail; ou avec un paramètre, qui doit alors désigner un répertoire (ce paramètre peut être une référence absolue ou relative de répertoire), auquel cas ce répertoire devient le répertoire de travail. Nous verrons un peu plus loin qu'il s'agit là d'une commande interne au langage de commandes (il ne lui correspond pas de fichier exécutable) contrairement à la plupart des autres commandes qui sont externes.

Image non disponible
Image non disponible

II-F-3. Lister le contenu d'un répertoire : ls

La commande ls permet de connaître le contenu d'un ou plusieurs répertoires et les caractéristiques de fichiers ou répertoires donnés en arguments au moyen de diverses options. Utilisée sans argument, elle traite le répertoire de travail.

Image non disponible

L'option -l de la commande ls permet d'obtenir des informations sur le type du fichier : répertoire, fichier ordinaire ou fichier spécial, les droits d'accès au fichier par les différents utilisateurs du système, le nombre de liens du fichier, les noms du propriétaire et du groupe, la taille des fichiers en nombre de caractères et la date de dernière modification. Elle fournit par ailleurs le nombre total de blocs physiques occupés par les fichiers énumérés.

Image non disponible

L'option -a de la commande ls permet de lister les fichiers cachés d'un répertoire.

Image non disponible

L'option -i de la commande ls permet de connaître les numéros d'i-noeud des répertoires et fichiers.

Image non disponible

II-F-4. Afficher le contenu d'un fichier ordinaire : cat

La commande cat permet d'afficher sur la sortie standard le contenu d'un ou plusieurs fichiers dont les références sont données en arguments; sans argument elle traite l'entrée standard.

Image non disponible

La commande cat peut être appliquée à un répertoire, mais cela n'a pas beaucoup d'intérêt étant donné la nature des informations contenues dans un tel fichier (codage de nombres entiers en binaire par exemple). Son utilisation sur un répertoire, comme d'ailleurs sur un fichier binaire, ne fournit aucune information intéressante ; elle peut d'ailleurs provoquer l'émission de caractères spéciaux vers le terminal.

II-F-5. Copier un fichier : cp

La commande cp permet d'effectuer une copie physique d'un fichier dans un autre; il y a création d'un nouvel i-noeud, création d'une nouvelle entrée dans un répertoire et recopie effective du contenu du premier fichier.

Image non disponible

II-F-6. Créer un lien sur un fichier : ln

Il est possible de créer des liens d'un fichier ordinaire ou spécial, c'est-à-dire de créer plusieurs références différentes à un même fichier physique au moyen de la commande ln (il s'agit de la création de synonymes d'un même objet sans création de nouvel i-noeud).

Image non disponible

II-F-7. Couper ou renommer un fichier : mv

Image non disponible

Je pense que cette commande se passe de commentaire.

II-F-8. Supprimer un fichier : rm

La suppression d'un lien d'un fichier est réalisée par la commande rm, un fichier n'étant physiquement supprimé sur le disque que lorsque le compteur de liens de son i-noeud devient nul.

Image non disponible

II-F-9. Créer un répertoire : mkdir

Image non disponible

Il est cependant important de se rappeler que la création d'un répertoire ne signifie pas la création d'un répertoire vide au sens propre du terme. Cela va créer un répertoire contenant 2 références qui sont . et ..

II-F-10. Supprimer un répertoire : rmdir

La suppression d'un catalogue vide (c'est-à-dire ne contenant que les références . et ..) est réalisée par la commande rmdir

Image non disponible

II-F-11. Changer les droits, le groupe et le propriétaire d'un fichier et d'un répertoire : chmod, chown, chgrp

Le propriétaire d'un fichier peut modifier le nom du propriétaire, le groupe auquel sont appliqués les droits de groupe et les droits d'accès des différentes catégories d'utilisateurs à ce fichier, et lui seul (avec le super-utilisateur) peut le faire.

Image non disponible
Image non disponible
Image non disponible

précédentsommairesuivant

Copyright © 2010-2013 Julien Plu. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.