next up previous contents
Next: 2 Organisation des programmes Up: Formation LiLiT Previous: Contents   Contents

Subsections

1 Système de fichier


1.1 Tout est fichier

Une des bases du fonctionnement d'un système Unix est que tout dans l'ordinateur est associé à un fichier et que tous ces fichiers sont localisés dans une arborescence unique, dont l'élément racine (root) est sobrement noté /.

On y trouve bien sur les fichiers normaux, ceux qui sont enregistrés dans les secteurs des disques durs.
On peut créer un fichier vide à l'aide, par exemple, de la commande touch.
Les répertoires sont aussi des fichiers, le contenu d'un fichier répertoire est en fait une liste d'autres fichiers, ce sont les répertoires qui permettent de construire l'arborescence.
Les répertoires se créent à l'aide de la commande mkdir.
Il faut noter que, sur les types de partitions le permettant, un même fichier ``physique'' (l'ensemble de secteurs sur le disque dur) peut être associé à plusieurs noms dans l'arborescence, appelés ``liens physiques''. Un fichier n'est effectivement supprimé du disque que lorsque plus aucun lien physique ne pointe vers lui.
Les liens physiques supplémentaires sont créés à l'aide de la commande ln, un lien physique ne peut pointer que vers un fichier se trouvant sur la même partition que lui.

On trouve également des fichiers dit ``de périphériques'', placés dans /dev par convention (mais ce n'est pas obligatoire), et qui permettent, à l'aide des méthodes habituelles de travail sur des fichiers, d'accéder aux périphériques de la machine (disques durs, carte graphique, lecteurs divers, cartes d'acquisitions en tous genres, ports d'entrée sortie réels ou virtuels, ...).
Ces fichiers sont créés à l'aide de la commande mknod.

Il existe encore d'autres types de fichiers plus exotiques, les tubes nommés. Ce type de fichier est lié aux fonctionnalités de redirections d'entrées sorties particulièrement utiles en ligne de commande (à l'aide des caractère | < >) mais également utilisés en interne (caché à l'utilisateur, par opposition aux redirections du shell qui elles sont insérées spécifiquement par l'utilisateur) par beaucoup de programmes.
Ces fichiers sont créés à l'aide de la commande mkfifo.

Il y a enfin des fichiers ``virtuels'' qui permettent d'obtenir des informations sur le système (charge CPU, mémoire libre, uptime, ...).
Ces fichiers sont créés automatiquement par le noyau et différents drivers et sont localisés, par convention, dans /proc.

Il existe un type particulier de fichiers, appelés ``liens symboliques'', qui ne sont en fait que des ``raccourcis'' vers d'autres fichier de l'arborescence (quel qu'il soit). Un lien symbolique se comporte exactement comme le fichier vers lequel il pointe, ses permissions sont celles du fichier pointé, lorsqu'on le visualise ou l'édite c'est en fait au contenu du fichier pointé qu'on accède, par contre la suppression d'un lien symbolique ne supprime que le lien, le fichier pointé et son contenu sont toujours là.
Les liens symboliques sont créés (sur les partitions les supportant) à l'aide de la commande ln -s. les liens symboliques, contrairement aux liens physiques, ne sont pas limités par les partitions.

Il y a une petite subtilité concernant les noms de fichier, un fichier dont le nom commence par un point est considéré comme caché (il faut par exemple utiliser l'option -a de la commande ls pour les afficher)

1.2 Partitions

1.2.1 Convention de nommage, ancienne et nouvelle.

Comme écrit à la section [*], les disques durs et les partitions qui y sont définies sont représentés par des fichiers localisés dans /dev.

L'ancienne convention de nommage, encore systématiquement utilisées, est de placer tous les fichiers dans /dev.
Les disques/partitions/lecteurs se trouvant sur interface (E)IDE sont préfixés par hd, ceux sur interface SCSI sont préfixés par sd. Les différents disques lecteurs sont ensuite numérotés à l'aide des lettres de l'alphabet, pour l'interface (E)IDE les lettres a et b représentent respectivement les disques maître et esclave de la première nappe IDE, c et d ceux de la deuxième nappe et ainsi de suite. Les disques sur interface SCSI sont également représentés par des lettres qui sont ici associées au numéro du périphérique sur l'interface SCSI, ainsi a est le disque numéro 1 de la première interface SCSI et ainsi de suite.

La nouvelle convention de nommage utilise, quand à elle, beaucoup plus de sous-répertoires, ainsi les périphériques (E)IDE sont dans /dev/ide et les périphériques SCSI dans /dev/scsi, cela ne s'arrête pas là avec des sous-répertoires host, des sous-sous-répertoires bus , des sous-sous-sous-répertoires target et des sous4-répertoires qui contiennent enfin les fichiers de périphériques. cette convention est la même pour les deux types d'interface.

Il est de coutume de créer des liens symboliques tels que /dev/cdrom, /dev/mouse, /dev/modem ou /dev/scanner vers les périphériques correspondants, pour une plus grande facilité d'utilisation.

1.2.2 Types de partitions.

Linux supporte un très grand nombre de types de partitions d'origine, et encore plus avec des patchs supplémentaires.

Le plus utilisé actuellement est le type ext2fs (second extended filesystem), qui supporte toutes les possibilités d'un système Unix (permissions, liens physiques et symboliques, fichiers spéciaux). Ce système de fichier est utilisé depuis longtemps, stable, bien connu et supporté par plusieurs autres OS, nativement ou à l'aide d'extensions. Ce système est une évolution de l'ext1 qui n'est plus utilisé.

Le fs [v]fat{12,16,32} habituel du monde windows est bien évidement supporté, mais ce système de fichier n'apporte pas toutes les possibilités nécessaires à un système Unix.
Le système ntfs, utilisé par WindowsNT est également supporté, mais le support en écriture est encore considéré comme dangereux.

Le système utilisé sur les CD-ROM, l'iso9660, est supporté, ainsi que les extensions joliet propres à MS ainsi que les extensions RockRidge qui ajoutent à l'iso9660 les possibilités des fs Unix (noms de fichiers longs, permissions, ...).
Le système UFS utilisé pour les DVD et les CD-RW est quand à lui supporté en lecture, le support en écriture n'est malheureusement pas encore fonctionnel.

Depuis quelque temps on voit également l'émergence sous Linux de systèmes de fichiers journalisés, ces systèmes assurent la cohérence du fs, permettant ainsi une réduction considérable du temps de vérification en cas d'arrêt inapproprié de la machine (ils n'assurent cependant pas la pérennité des données contenues dans les fichiers). On dénombre les systèmes suivants

ReiserFS
le premier à avoir été intégré dans le noyau Linux.
Ext3FS
c'est une évolution de l'ext2, avec lequel il est entièrement compatible, les partitions ext3 étant simplement des ext2 auxquelles on a ajouté un journal. Cela en fait un système de choix pour la migration simple d'un système Linux existant basé sur ext2 (comme cela est commun depuis plusieurs années). De plus il supporte plus de modes de journalisation que Reiserfs.
JFS
ce système est l'oeuvre d'IBM, qui s'est récemment chargé de le porter sous Linux. Ce système, bien que nouveau sous Linux, à déjà été éprouvé sur les machine Unix du constructeur.
XFS
produit de SGI, ce système est également bien connu des professionnels.
Linux supporte également les partitions réseau, telles que NFS ou SMB.

On peut également citer des systèmes de fichiers virtuels, tel procfs déjà évoqué à la section [*] ou encore devfs qui est utilisé pour créer et supprimer automatiquement les fichier de périphérique de /dev, rendant ainsi ce répertoire un reflet du matériel de la machine (ou plutôt du matériel effectivement supporté par Linux).

1.2.3 Montage dans le système de fichier.

Comme il a déjà été dit, le système de fichier sous un système Unix est constitué d'une seule arborescence, mais cela n'empêche pas d'utiliser plusieurs partitions, celles-ci sont ``montées'' dans l'arborescence.

Monter une partition dans un répertoire /mapartition signifie que, une fois le montage réalisé, les fichiers et répertoires qui seront disponibles dans /mapartition seront ceux se trouvant à la racine de la partition montée. Et bien sur si avant le montage le répertoire /mapartition contenait déjà des fichiers, ceux-ci seront inaccessibles jusqu'au ``démontage'' de la partition.



\resizebox*{0.75\textwidth}{!}{\includegraphics{arborescence.eps}}



Le montage d'une partition se réalise grâce à la commande mount, cette commande possède des options générales et d'autres spécifiques à un type de partition, comme le propriétaire et les permissions par défaut pour les systèmes qui ne les supportent pas.

Il faut bien sur qu'il y ait une partition montée en /, la racine de l'arborescence, on l'appelle la partition racine (root). Cela est nécessaire car il faut au moins que les répertoires dans lesquels seront montées les autres partitions soient enregistrés quelque part.

Les partitions nécessaires au bon fonctionnement du système sont montées au démarrage en lisant le contenu du fichier /etc/fstab, le répertoire /etc doit donc se trouver sur la partition racine, et pas une autre partition montée à cet endroit car dans ce cas le système ne trouverait pas la liste des partitions à monter. Il y a d'autres répertoires devant se trouver sur la partitions racine, ceux et les autres sont décrits à la section [*].


1.3 Les répertoires standard

Cette section passe en revue les répertoires standards d'un système Unix.

1.3.1 Le répertoire racine /

/boot
contient les fichiers nécessaires au chargement du noyau, donc celui-ci en particulier mais également les fichiers utilisés par le chargeur de boot.
/sbin
contient les programmes nécessaires au démarrage et au bon fonctionnement du système, en particulier le père de tous les processus, init.

Ce répertoire doit se trouver sur la partition racine.

/bin
contient les programmes standards du système n'étant pas nécessaire à son démarrage
/lib
contient les bibliothèques standards du système (entre autres la libc) partagées par tous les autres programmes, il contient aussi dans le sous-répertoire modules les parties du noyau ayant été compilées en tant que modules.
/etc
contient toute la configuration générale du système, stockée dans un grand nombre de fichiers textes prévus pour être lisibles et éditables avec un simple éditeur de texte. conserver une sauvegarde de ce répertoire est une bonne idée, c'est d'ailleurs tout l'intérêt de tout regrouper ici.

Ce répertoire doit se trouver sur la partition racine.

/dev
contient tous les fichiers de périphériques.

Ce répertoire doit se trouver sur la partition racine, sauf si l'on utilisé devfs, il faut alors que le noyau monte celui-ci dès son chargement avec l'option devfs=mount.

/var
contient des données versatiles telles que des boîtes e-mail, des files d'impressions ou des logs.
/proc
ce répertoire, déjà évoqué, contient un système de fichier virtuel dont les fichiers permettent d'obtenir des information sur le système. Les fichiers contenus dans ce répertoire sont, pour la plupart, des fichiers textes directement consultables.

Il contient en particulier un certain nombre de répertoires numériques, ces répertoires contiennent des informations sur les processus en cours d'exécution sur le système (le nom du répertoire est en fait le PID du processus), tous les processus, sans exception, y sont représentés. On peut donner comme exemples

/proc/meminfo
qui fourni des information sur l'utilisation de la mémoire.
/proc/cpuinfo
donne toutes les information détectées par le noyau concernant le(s) processeur(s) de la machine.
/proc/mounts
donne la liste des partitions montées.
/proc/uptime
donne le temps (en secondes) pendant lequel la machine a fonctionné.
/proc/version
contient la version du noyau en cours d'exécution.
/proc/kcore
permet d'accéder à la totalité de la mémoire, ce fichier a exactement la taille de la mémoire vive embarquée dans la machine.
/proc/sys/kernel/hostname
le nom de la machine
Les fichiers de /proc permettent aussi d'interagir avec le noyau, par exemple le fichier /proc/sys/dev/cdrom/autoclose contient 1 ou 0, suivant qu'il faut ou non fermer le chariot du lecteur CD lors d'une tentative de montage de celui-ci, modifier le contenu du fichier changera ce comportement. De même, modifier /proc/sys/kernel/hostname changera le nom sous lequel la machine s'identifie, jusqu'au prochain démarrage. tous ces fichier ne sont bien sur modifiables (s'il le sont, regardez les permissions) que par l'administrateur.

/tmp
le répertoire temporaire général du système, la plupart des programmes l'utilisent pour stocker temporairement des données. Les fichiers de ce répertoire on souvent une durée de vie très courte.

C'est une bonne idée que ce répertoire soit une partition indépendante, cela évite qu'un trop grand nombre de fichiers temporaires ne remplissent complètement la partition racine.

/usr
ce répertoire, dont la sous-arborescence reflète partiellement celle de /, contient généralement un grand nombre de programmes supplémentaires.

Il est fréquent de créer une partition pour ce répertoire.

/mnt
est destiné à contenir les points de montage de partitions ne s'insérant pas dans l'arborescence standard, comme par exemple des supports amovibles (disquettes, CD-ROMs, ...), des partitions d'un autre système (au hasard, windows) ou des partitions partagées en réseau.
/root
le répertoire home de l'administrateur

Ce répertoire doit se trouver sur la partition racine.

/home
contient les répertoires personnels des utilisateurs du système.

C'est une bonne idée de créer une partition pour recevoir ce répertoire, cela facilite une réinstallation éventuelle du système sans devoir se soucier des données des utilisateurs, il suffit de ne pas toucher à cette partition.

/opt
ce répertoire est utilisé pour contenir des programmes qui ne sont pas prévus pour s'intégrer dans l'arborescence standard, comme certains jeux ou programmes commerciaux.

comme pour /usr, il peut être intéressant de créer une partition pour ce répertoire.

1.3.2 Le répertoire /usr

/usr/bin
contient les exécutables des programmes installés dans l'arborescence.
/usr/sbin
contient les programmes réservés à l'administrateur.
/usr/games
ce répertoire, assez peu utilisé, est destiné à recevoir les exécutables de jeux.
/usr/man
contient les pages de manuel.
/usr/info
comme /usr/man mais pour les pages info.
/usr/share
ce répertoire est destiné à accueillir tous les fichiers, nécessaires ou superflus, utilisés par les programmes de /usr/bin
/usr/doc et /usr/share/doc
comme leur nom l'indique, ils sont destinés à contenir la documentation des programmes
/usr/lib
contient les bibliothèques non nécessaires au bon fonctionnement du système de base (i.e. les programmes dans /bin et /sbin).
/usr/src
est destiné à contenir les sources des programmes, contient souvent les sources du noyau dans le sous-répertoire linux.
/usr/include
contient les fichiers nécessaires à la compilation de programmes à partir des sources
/usr/local
identique à /usr mais pour des programmes de moindre importance ou dont les données pourraient interagir avec des programmes déjà installés. Ce répertoire est fréquemment utilisé pour installer des programmes compilés ``maison'' et n'étant pas fournis avec la distribution de base.

Il arrive que, à l'instar de /usr, on associe une partition à /usr/local, cela n'est cependant utile que sur des systèmes demandant beaucoup de rigueur et d'organisation. Ce répertoire trouve en fait tout son intérêt dans de grands systèmes ou les répertoires sont partagés en réseau.

/usr/X11R6
ce répertoire, à l'arborescence semblable à /usr, est destiné à contenir tout ce qui est relié à l'interface graphique X-Window.


next up previous contents
Next: 2 Organisation des programmes Up: Formation LiLiT Previous: Contents   Contents
2002-03-30