# 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` : ```bash 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 : ```bash 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` : ```bash 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.