Le système /proc

Pourquoi parler de /proc ?

Quand on travaille avec Linux, il faut garder en tête que tout est fichier.
Ce principe fondateur veut dire que les périphériques, les configurations et même certaines parties de la mémoire sont accessibles comme si c’étaient de simples fichiers texte.

Parmi ces pseudo-arborescences, l’une des plus importantes est /proc.
Ce répertoire n’est pas stocké sur disque : il est créé directement par le noyau et reflète en permanence l’état de la machine et des processus.

En d’autres termes : /proc est une fenêtre ouverte sur ce que sait le noyau, et cette fenêtre se met à jour en temps réel.


Un pseudo-système de fichiers

On appelle /proc un pseudo-système de fichiers (procfs).
Il se distingue d’un répertoire “classique” par deux caractéristiques :

  1. Pas de stockage persistant

    • Rien n’est gravé sur disque : tout est généré par le noyau à la volée.

  2. Contenu dynamique

    • Chaque lecture correspond à une requête au noyau.

    • Si un processus s’arrête, son dossier dans /proc disparaît instantanément.

/proc n’est donc pas une base de données statique, mais un miroir vivant de ce qui se passe dans le système.


Que trouve-t-on dans /proc ?

1. Fichiers système globaux

Ils donnent des informations générales sur la machine :

  • /proc/cpuinfo → description des processeurs.

  • /proc/meminfo → état de la mémoire (totale, libre, utilisée).

  • /proc/uptime → temps écoulé depuis le démarrage.

  • /proc/version → version du noyau en cours.

Ces fichiers sont lisibles avec de simples commandes cat :

cat /proc/cpuinfo | head -n 5
cat /proc/meminfo | head -n 5
cat /proc/uptime

2. Répertoires par processus (PID)

Chaque processus actif possède un dossier dans /proc nommé selon son PID (Process ID).
Exemples :

  • /proc/1 → informations sur le premier processus (souvent systemd ou init).

  • /proc/$$ → informations sur le shell courant.

  • /proc/self → lien symbolique vers le processus qui fait la requête (pratique pour explorer son propre état).

À l’intérieur, on trouve des fichiers comme :

  • status → état général du processus (nom, utilisateur, mémoire utilisée, etc.).

  • cmdline → commande exacte ayant lancé le processus.

  • fd/ → liste des descripteurs de fichiers ouverts par le processus.

Exemple pratique :

ls /proc/self
cat /proc/self/status | head -n 10

Exemple de comparaison

De nombreuses commandes Linux ne font qu’afficher des informations déjà présentes dans /proc :

uptime
cat /proc/uptime

Ces deux commandes donnent la même information.


Lien avec les conteneurs

Dans un conteneur Docker, le répertoire /proc existe aussi, mais il est filtré par les namespaces :

  • Un conteneur ne voit que ses propres processus, pas ceux de l’hôte.

  • Les informations système visibles (/proc/cpuinfo, /proc/meminfo) reflètent une vue partielle, correspondant aux limites imposées par les cgroups.

C’est ce qui explique que deux conteneurs isolés aient chacun l’impression d’être “seuls sur la machine”.


À retenir

  • /proc est un système de fichiers virtuel créé par le noyau.

  • Il fournit une vue temps réel sur l’état du système et des processus.

  • C’est un outil clé pour comprendre ce qui se passe dans une machine Linux… et pour comprendre comment Docker isole ses conteneurs.