Hiérarchies des fichiers

Fichiers système

En utilisant la commande tree (souvent installé par défaut), on visualise tous les dossiers d'une distribution Ubuntu présent à la racine (/) du système :

$ tree -d -L 1 /
/
├── bin -> usr/bin
├── boot
├── cdrom
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── snap
├── srv
├── sys
├── tmp
├── usr
└── var

Cette arborescence peut changer selon la distribution ou le type de Linux utilisé :

Sur une Debian de l'ecm

fbrucker@roucas100:~$ tree -d -L 1 /
/
├── bin -> usr/bin
├── boot
├── dev
├── donnees
├── etc
├── home
├── lib -> usr/lib
├── lib32 -> usr/lib32
├── lib64 -> usr/lib64
├── libx32 -> usr/libx32
├── lost+found
├── media
├── mnt
├── net
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── users
├── usr
└── var

26 directories

Sur un mac

Les différents types de Linux, voir même différentes distributions vont avoir une architecture différentes. Cependant, les grands découpages restent identiques. Par exemple sur un mac :

❯ tree -d -L 1 /
/
├── Applications
├── bin
├── cores
├── dev
├── etc -> private/etc
├── home -> /System/Volumes/Data/home
├── Library
├── opt
├── private
├── sbin
├── System
├── tmp -> private/tmp
├── Users
├── usr
├── var -> private/var
└── Volumes

17 directories

Mais vous retrouverez très souvent les même informations partout :

Les -> signifient que ces dossiers sont des liens symboliques vers d'autres dossiers du système. On voit par exemple que sur un système Ubuntu (et tous les systèmes modernes) les executables et le bibliothèques partagées sont toutes placées dans le dossier /usr. Ne sont laissés à la racine que des liens permettant la compatibilité.

Dans un système de type Unix, (pratiquement) tout est fichier :

Fichiers locaux

Ces fichiers vont contenir des choses différentes selon les utilisateurs et l'usage de la machine.

Utilisateurs

La liste des utilisateurs est disponible dans le fichier /etc/passwd. Chaque ligne est consacrée à un utilisateur (On analysera ce fichier plus tard) et le premier champ (séparé par des :) contient son login. À chaque login d'utilisateur physique (ne nombreux utilisateurs ne sont que virtuels, comme l'utilisateur (les mots de passent n'y sont plus stocké. Ils sont maintenant dans le fichier/etc/shadow{.fichier}) par exemple dont le principal intérêt est de lancer le serveur ssh) possède un dossier où il peut ranger ses fichiers. C'est dans ce dossier, par défaut /home/login, où seront par défaut placé tout nouveau terminal ouvert. Il contiendra :

Opt

/opt remplace petit à petit /usr/local qui était le dossier par défaut où étaient placés tous les programmes optionnels et machine dépendant. Sous mac c'est par exemple dans ce dossier que s'installe https://brew.sh/

Fichiers spéciaux

Beaucoup d'autres dossiers de la racine ne contiennent des pseudo-fichiers permettent d'interagir finement avec le système. Ce ne sont pas des fichiers réels mais on y accède comme si. C'est par exemple le cas des dossiers /proc et /dev.

/proc

Le dossier /proc va donner des informations sur tous les processus lancés par la machine ainsi que des informations sur le processeur. Par exemple le fichier /proc/uptime contient par exemple le temps écoulé, en secondes, depuis son boot et le temps total de ses différents cœur passés à ne rien faire (s'il y a plus d'un cœur ce temps peut excéder le temps depuis le boot). Par exemple, tapez dans un terminal la commande suivante pour afficher le contenu du fichier /proc/uptime avec la commande cat :

$ cat /proc/uptime
26179.16 522449.82

/dev

Le dossier /dev va contenir des fichiers correspondant aux entrées/sorties. Comme :

Il contient également des sorties plus spécifiques comme le fichier /dev/random/ qui génère des nombres aléatoires. Par exemple la commande suivante (dont vous comprendrez la syntaxe plus tard) tapée dans un terminal lit 32 octet de /dev/random/ (le fichier /dev/random est a priori de longueur infinie) et l'affiche à l'écran :

$ head -c 32  < /dev/random  | hexdump -ve '32/1 " %02x" "\n"'
a261e9b1e0ee4e41127d08c4baa2172a4cf1c45aeef296a4c8c6f38acf102ea