Organisation de Linux (FHS)

Demander un devis
Je souhaite télécharger le programme ou imprimer le programme
  • Imprimer

Introduction


Ce tutoriel est décomposé en deux parties :

  • les notions de base, dont vous aurez besoin si vous découvrez Linux
  • les notions avancées, qui sont un peu plus techniques et dont vous n'aurez pas forcément besoin dans l'immédiat.

Notions de base

Terminologie

 

On appelle média ou périphérique tout matériel susceptible de stocker des données (disque dur, clé USB, carte SD, disque CD ou DVD).

Ceux-ci stockent des entités nommés fichiers. La notion de fichier est très générale sous Linux :

  • Un fichier régulier stocke des données (un texte, une musique, un exécutable...)
  • Un dossier ou répertoire est un fichier qui ne stocke pas de données mais qui référence des fichiers fils. Ces fichiers sont alors dits contenus dans ce dossier. La hiérarchie de fichiers ainsi formée est appelée arborescence. Elle permet d'organiser les données.
  • Un device est un fichier qui n'est pas stocké sur un média mais qui est créé en vue d'effectuer une opération particulière, typiquement manipuler le matériel. Ces fichiers n'ont pas d'équivalent sous Windows.
  • Il existe encore d'autres types de fichiers (sockets, hard links, symbolic links...) dont nous ne parlerons pas dans l'immédiat.

 

Il existent plusieurs catégories de fichiers réguliers :

  • Un exécutable un fichier qui peut être lancé en vue d'effectuer un traitement. Les logiciels se lancent au travers d'un exécutable.
  • En toute rigueur, un binaire est un fichier régulier qui contient une suite de 0 et de 1. Ce peut être une image, un son ou un exécutable. Toutefois, par abus de langage, on fait parfois l'amalgame entre binaire et exécutable (alors que tous les exécutables ne sont pas forcément des binaires, typiquement s'il s'agit de scripts !).

Arborescence Linux

 

Sous Linux, l'ensemble des fichiers qu'un utilisateur peut manipuler sont rassemblés dans une unique arborescence. Une fois le fichier présent dans l'arborescence, sa provenance est complètement transparente (peu importe qu'il soit stocké sur un disque dur, une clé USB, un CD, ou sur un partage réseau).

 

Contrairement au monde de Windows, il n'y a pas de notion de lecteurs (c:, d: ...). Linux n'est donc pas victimes des limites qui en découlent (noms de lecteurs imposés, au plus 26 lecteurs etc...).

Organisation


La manière dont sont rangés les fichiers est normalisée par la FHS (file hierarchy standard). Voici les quelques répertoire que vous devez absolument connaître pour ne pas vous perdre dans l'arborescence Linux :

  • / (le root directory) : il contient tous les dossiers et tous les fichiers.
  • /home : il contient les home directories de chaque utilisateur (hormis root) locaux à la machine. C'est l'équivalent du répertoire "Documents and Settings" de windows. Par exemple, les documents et les profils utilisateurs de l'utilisateur mando sont stockés dans /home/mando (aussi noté ~mando).
  • /root : c'est le home directory de root (~root).
  • /media (ou /mnt) : ce répertoire contient un répertoire par contenu autre qu'une composante du système Linux. Par exemple on peut imaginer de monter dans /media/telephone le contenu de son téléphone portable, dans /media/windows une partition d'un système windows etc... Ces répertoires sont appelés points de montage.

Monter, démonter

 

La position dans laquelle apparaît les fichiers d'un média (par exemple les fichiers stockés sur une clé USB qui vient d'être branchée, la connexion vers un partage réseau) est entièrement personnalisable. Elle se précise au moment de monter le contenu  :

  • Lorsqu'on branche un périphérique (disque dur, CD, partage réseau...), le système doit examiner son contenu afin de retrouver l'arborescence de fichiers qu'il contient. On dit alors que ce système de fichiers est monté.
  • Lorsqu'on ne l'utilise plus, on peut le démonter.

 

Si vous avez installé un environnement graphique, celui-ci se charge probablement pour vous de monter automatiquement les médias que vous branchez.

 

Remarque : L'une des étapes de démarrage de Linux consiste à monter la partition système de Linux (/) et quelques autres systèmes de fichiers, typiquement /home si vous l'avez mis sur une partition dédiée au cours de l'installation.

 

Notions avancées

Pour un aperçu bref de la FHS

 

Vous pouvez consulter cet article :  http://fr.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

Nous vous proposons dans la suite de cet article de découvrir un peu plus en détail certaines parties de l'arborescence Linux.

 

Visite guidée (non exhaustive)

Documents : /home, /root

Les documents des utilisateurs sont stockés dans leur home directory :

  • /root : si c'est l'utilisateur root
  • /home/mando : si c'est l'utilisateur local mando (c'est-à-dire un utilisateur dont les documents ne sont pas stockés sur un partage réseau),
  • Par exemple /users/toto si toto est un utilisateur itinérant (c'est-à-dire un utilisateur dont les documents sont importés depuis un partage réseau). Le nom /users n'est pas normalisé, mais il reste toutefois déconseillé de mélanger les home directories des utilisateurs itinérants avec ceux des utilisateurs locaux.

Binaires : /bin, /sbin, /lib

 

Un binaire est un fichier qui contient une suite de bits (de 0 et de 1). Souvent un programme est un binaire, mais il existe bien d'autres types de fichiers binaires (les images, les sons, les librairies utilisées par le système, ...). Toutefois, par abus de langage, un "binaire" sous Linux désigne souvent un programme.

 

Des sources écrites en langage C sont manipulés en vue de produire un binaire directement compréhensible par la machine. Cette phase de construction est appelée compilation.

 

En fonction de leur nature, les binaires sont rangés comme suit :

 

     

    bin

    commandes non système

    sbin

    commandes système

    lib

    librairies (.so, .a)

    /

    essentiel

    /bin

    /sbin

    /lib

    /lib/modules : modules (.ko)

    /usr

    non essentiel

    /usr/bin

    /usr/sbin /usr/lib
    /usr/local

    installé manuellement

    /usr/local/bin /usr/local/sbin

    /usr/local/lib


Un binaire est dit essentiel s'il est nécessaire au fonctionnement du système ou quasi indispensable. Étant donné que Linux peut fonctionner purement en mode texte, tout ce qui est spécifique au mode graphique est jugé non essentiel.

 

Exemples :

  • /bin contient les commandes de base : ls, ln, rm, cp ...
  • /sbin contient les commandes d'administration de base : ifconfig, route, mount, ...
  • /usr/bin contient notamment la plupart des applications graphiques installées (par exemple firefox, openoffice, les applications gnome ou kde...), ...
  • /usr/sbin contient les applications graphiques permettant d'administrer le système (wicd...) les serveurs réseaux (sshd, proftpd, mysqld...), ...
  • /lib contient les librairies essentielles au système (notamment la libc et la libpam),
  • /usr/lib contient des librairies non essentielles (par exemple les librairies spécifiques aux applications graphiques)
  • /usr/local est utilisé lorsque vous installez autrement que via votre gestionnaire de paquet une application ou une librairie. Cette séparation permet d'éviter les collisions entre les fichiers que vous déployez manuellement et les ceux déployés par le biais de paquets.

Vous pouvez consulter la section sur "Comment localiser un fichier > S'il s'agit d'un exécutable" en fin de tutoriel pour comprendre comment un shell si prend si un exécutable figure par exemple à la fois dans /usr/local/bin et /usr/bin.

Médias et partitions externes à Linux : /mnt et /media

 

En toute rigueur /mnt sert pour monter des contenus occasionnels et /media des contenus que vous montez fréquemment. En pratique vous pouvez faire l'amalgame entre les deux, n'utiliser que /mnt ou que /media.

 

Supposons que l'on n'utilise que /mnt et que vous branchiez régulièrement votre téléphone portable, une clé USB, que vous disposie d'une partition windows et que votre ordinateur dipose d'un graveur de CD et d'un lecteur de DVD. Alors vous pourriez définir les points de montage suivants :

  • /media/telephone
  • /media/usb
  • /media/windows
  • /media/graveur
  • /media/dvd

On peut nommer un point de montage comme on le souhaite. Les médias que vous montez devraient toujours l'être dans un répertoire (vide) de /mnt ou de /media. Les seules exceptions concernent les partitions de votre système Linux (/, /home, ...) et les home directories itinérants.

Configuration : /etc

 

La configuration commune à tout les utilisateurs ou au niveau "du système" est stocké dans des fichiers situés dans /etc. Les points de configuration spécifiques à un utilisateur sont stockés dans son home directory. Pour plus de détails, vous pouvez consulter cet article.

 

Noyau et boot loader : /boot

 

Ce répertoire contient les noyaux Linux disponibles pour amorcer votre système Linux. Ces noyaux peuvent être référencés ou non par votre boot loader (mais celui-ci ne doit référencer que des noyaux qui existent !). Les modules sont quant à eux stockés dans /lib/modules (une arborescence par noyau).

 

Si vous utilisez le boot loader grub, vous verrez figurer dans /boot une partie des fichiers liés à grub.

 

Fichiers temporaires : /tmp

 

Tout le monde peut écrire dans ce répertoire. Il sert à stocker des fichiers temporaires qui seront a priori effacés d'ici peu et a priori a l'extinction de la machine.

 

Fichiers variables (logs, cache, files, verrous) : /var

 

Le répertoire /var stocke des fichiers de natures diverses.

  • Les logs : ce sont des fichiers textes qui évoluent au cours du temps et écrit par certaines applications. Lorsqu'une application fonctionne mal, les logs permettent souvent d'en déterminer les causes. Les logs sont rangés dans /var/log
  • Les caches :  afin d'éviter de télécharger plusieurs fois un même fichier, un certain nombre d'applications (dont le gestionnaire de paquets) stocke les fichiers téléchargés dans un cache. Les caches sont rangés dans /var/cache.
  • Les files : les files d'impressions et de tâches planifiées (voir cron, anacron, fcron...) sont stockées dans /var/spool.
  • Les données rattachées à aucun utilisateur particulier comme les bases de données (exemple : /var/lib/mysql, ...) ou d'un serveur apache (/var/www ...)

/var stocke également de nombreuses informations spécifiques à l'état des applications. En particulier on trouve dans /var/lock des fichiers qui sont crées pour verrouiller l'accès à une donnée (lock), l'état du gestionnaire de paquets etc...

 

Devices : /dev

 

Si l'on omet les cartes réseaux, la plupart des composants matériels sont manipulables grâce à des devices (partitions de disque dur, souris, disque CD, carte son, webcam...).

 

Quand ils sont relatifs au matériel, les devices font office "d'interface". Ils permettent au système d'exploitation d'intéragir avec le noyau et d'effectuer des opérations "bas niveau". Par exemple écrire dans le fichier /dev/dsp (associé à la carte son principale) revient à jouer un son brut.

 

Les devices sont créés par le système lorsque le matériel correspondant semble pris en charge par le noyau ou un module. C'est l'une des premières étapes à valider pour faire marcher un matériel.

 

On distingue deux catégories de devices :

  • les blocks devices : ils peuvent stocker des données (device associé à une partition de disque dur, à un CD, etc...)
  • les character devices : les autres devices (carte son, clavier, souris...)

Cette nuance apparaît en début de ligne (c ou b) quand vous tapez la commande :

ls -l /dev

 

Il existe également quelques devices qui ne sont pas liés au matériel mais à des "concepts" :

  • /dev/null : générateur de 0 ou "trou noir" (tout ce qui est écrit dedans est ignoré),
  • /dev/urandom : générateur aléatoire,
  • /dev/stdin : entrée standard,
  • /dev/stdout : sortie standard,
  • /dev/stderr : sortie d'erreur standard
  • ...

Pour vous en convaincre vous pouvez lancez la commande suivante (attention aux oreilles !) :

 

cat /dev/urandom > /dev/dsp

Informations liées au matériel : /proc

 

Ce répertoire sert rarement et concerne plutôt des utilisateurs avancés.

Votre noyau linux et les modules chargés vous permettent d'accéder à de nombreuses informations liées à votre noyau et à votre matériel. Quelques exemples :

  • /proc/cpuinfo : informations relatives aux microprocesseurs,
  • /proc/version : informations relatives au noyau linux démarré,
  • Selon votre matériel, votre noyau et les modules chargés, vous pouvez avoir des fichiers liées aux sondes thermiques (exemple : /proc/acpi/thermal_zone/TZ0/temperature), à vos ventilateurs, à votre écran etc...

Ces fichiers sont typiquement utilisés par votre système Linux pour piloter certains aspects matériels ou les afficher (par exemple avec gkrellm). Ne perdez pas de vue que souvent, une commande Linux vous permet d'avoir facilement des informations sur votre matériel (lspci, lsusb, ...).

 

Localiser un fichier

 

Cette partie s'adresse plus particulièrement aux personnes qui utilisent le mode texte.

S'il s'agit d'un exécutable

 

La manière dont se comporte linux (via un shell ou un environnement graphique) découle de la manière la manière dont la variable d'environnement PATH est configurée. Pour l'afficher :

 

echo $PATH

 

Exemple :  supposons qu'on lance dans un shell la commande "firefox".

 

(mando@aldur) (~) $ echo $PATH

 

Dans cet exemple le shell regarde si /usr/local/bin/firefox existe. Si c'est le cas il le lance. Sinon il teste si /usr/bin/firefox et procède de même (ainsi de suite jusqu'à /usr/games/firefox). Si à l'issue de cette recherche, l'exécutable firefox n'est pas trouvé, la commande est introuvable.

 

Notez que "." ne figure pas dans la variable d'environnement PATH. Ainsi, si l'exécutable "toto.sh" est positionné dans /home/mando, on peut lancer la commande "/home/mando/toto.sh" ou "./toto.sh" (si on est positionné dans /home/mando), mais pas simplement "toto.sh" puisque /home/mando n'est pas référencé dans PATH.

 

Les commandes whereis et which permettent de voir où linux localise une commande et laquelle il utilise réellement quand on sous-entend la position de l'exécutable qu'on tente de lancer :

 

Exemple :

 

En réalité lancer la commande "date" revient à lancer "/bin/date"

 

(mando@aldur) (~) $ which date

/bin/date

 

On peut localiser les exécutables (placés dans un répertoire standard), les fichiers de configuration et les pages de documentation (man) appelées date à l'aide de la commande whereis.

 

(mando@aldur) (~) $ whereis date

date: /bin/date /usr/share/man/man1/date.1.gz

 

Sinon

 

La commande find permet de faire des recherches dans un répertoire donné. On peut éventuellement la coupler avec un grep pour filtrer les résultats.

 

Exemple : chercher dans / tous les fichiers qui contiennent "toto" :

 

find / | grep toto

 

Comme cette recherche peut énumérer un grand nombre de répertoires, elle est assez coûteuse en temps. Ainsi il peut être intéressant d'installer des outils comme locate ou mlocate. L'outil locate s'appuie sur une base construite au préalable par la commande updatedb. Il faut donc périodiquement rafraîchir cette base en relançant en root la commande updatedb pour que la base reflète le contenu réel de l'arborescence Linux.

 

Exemple :

 

Installation sous Debian (en root) :

 

aptitude update

aptitude safe-upgrade

aptitude install locate

 

Préparation / mise à jour de la base (en root) :

 

updatedb

 

Recherche (en utilisateur ou en root) d'un fichier contenant la sous-chaîne "toto" dans son chemin :

 

locate toto
.
X
 
 
 
 
 

You havecharacters left.