Chapitre 10. Le système de fichiers /proc

Table des matières
10.1. Informations sur les processus
10.2. Informations sur le matériel
10.3. Le sous-répertoire /proc/sys

Le système de fichiers /proc est une spécificité de GNU/Linux. C'est un système de fichiers virtuel, et en tant que tel il ne prend aucun espace disque. C'est un moyen très pratique d'obtenir des informations sur le système, d'autant plus que la plupart des fichiers dans ce répertoire sont lisibles (enfin, avec un peu d'habitude). Beaucoup de programmes, en fait, collectent des informations depuis des fichiers de /proc, les formatent à leur façon puis les affichent. C'est le cas pour tous les programmes qui affichent des informations sur les processus, et nous en avons déjà vu quelques-uns (top, ps et autres). /proc est aussi une bonne source d'informations sur votre matériel et, de même, bon nombre de programmes sont en fait des interfaces pour les informations contenues dans /proc.

Il existe également un sous-répertoire spécial, /proc/sys. Il permet de changer certains paramètres du noyau en temps réel ou d'en consulter.

10.1. Informations sur les processus

Si vous listez le contenu du répertoire /proc, vous verrez beaucoup de répertoires dont le nom est un nombre. Ce sont les répertoires contenant les informations sur tous les processus fonctionnant à un instant donné sur le système :

$ ls -d /proc/[0-9]*
/proc/1/    /proc/302/  /proc/451/  /proc/496/  /proc/556/  /proc/633/
/proc/127/  /proc/317/  /proc/452/  /proc/497/  /proc/557/  /proc/718/
/proc/2/    /proc/339/  /proc/453/  /proc/5/    /proc/558/  /proc/755/
/proc/250/  /proc/385/  /proc/454/  /proc/501/  /proc/559/  /proc/760/
/proc/260/  /proc/4/    /proc/455/  /proc/504/  /proc/565/  /proc/761/
/proc/275/  /proc/402/  /proc/463/  /proc/505/  /proc/569/  /proc/769/
/proc/290/  /proc/433/  /proc/487/  /proc/509/  /proc/594/  /proc/774/
/proc/3/    /proc/450/  /proc/491/  /proc/554/  /proc/595/

Notez qu'en tant qu'utilisateur, vous ne pouvez (et ceci est tout à fait compréhensible) afficher les informations que sur vos propres processus. Mettons-nous donc en tant que root et voyons quelle information devient disponible depuis le processus 127 :

$ su
Password:
$ cd /proc/127
$ ls -l
total 0
-r--r--r--    1 root     root            0 déc 14 19:53 cmdline
lrwx------    1 root     root            0 déc 14 19:53 cwd -> //
-r--------    1 root     root            0 déc 14 19:53 environ
lrwx------    1 root     root            0 déc 14 19:53 exe -> /usr/sbin/apmd*
dr-x------    2 root     root            0 déc 14 19:53 fd/
pr--r--r--    1 root     root            0 déc 14 19:53 maps|
-rw-------    1 root     root            0 déc 14 19:53 mem
lrwx------    1 root     root            0 déc 14 19:53 root -> //
-r--r--r--    1 root     root            0 déc 14 19:53 stat
-r--r--r--    1 root     root            0 déc 14 19:53 statm
-r--r--r--    1 root     root            0 déc 14 19:53 status
$

Chaque répertoire contient les mêmes entrées. Voici une brève description de quelques-unes de ces entrées :

  1. cmdline Ce (pseudo-)fichier contient l'intégralité de la ligne de commande utilisée pour invoquer le processus. Elle n'est pas formatée : il n'y a aucun espace entre le programme et ses arguments, et il n'y a pas non plus de saut de ligne à la fin du fichier. Pour le consulter aisément vous pouvez utiliser : perl -pl -e 's,\00, ,g' cmdline.

  2. cwd Ce lien symbolique pointe sur le répertoire de travail en cours (« Current Working Directory  ») du processus.

  3. environ Ce fichier contient toutes les variables d'environnement pour le processus, sous la forme VARIABLE=valeur. De même que pour cmdline, la sortie n'est pas du tout formatée : pas de saut de ligne pour séparer les différentes variables, et pas de saut de ligne à la fin non plus. Une solution pour le consulter : perl -pl -e 's,\00,\n,g' environ.

  4. exe C'est un lien symbolique pointant sur le fichier exécutable correspondant au processus en cours d'exécution.

  5. fd Ce sous-répertoire contient la liste de tous les descripteurs de fichiers actuellement ouverts par le processus. Voyez ci-dessous.

  6. maps Quand vous affichez le contenu de ce tube nommé (avec cat par exemple), vous pouvez voir toutes les parties de l'espace d'adressage du processus qui sont actuellement des projections en mémoire de fichiers. Les champs, de gauche à droite, sont : la plage d'adresses de la projection mémoire, les permissions associées à cette projection, le décalage depuis le début du fichier où commence la projection, Les numéros majeur et mineur (en hexadécimal) du périphérique sur lequel le fichier projeté se trouve, le numéro d'i-nœud du fichier, et enfin le nom du fichier lui-même. Lorsque le périphérique est 0 et qu'il n'y a ni numéro d'i-nœud, ni de nom de fichier, ce sont des projections anonymes. Voyez mmap(2).

  7. root C'est un lien symbolique qui pointe sur le répertoire racine utilisé par le processus. Habituellement, ce sera /, mais voyez man 2 chroot.

  8. status Ce fichier contient diverses informations sur le processus : le nom de l'exécutable, son état actuel, son PID et son PPID, ses UID et GID réels et effectifs, son occupation mémoire et autres.

Si nous listons le contenu du répertoire fd, pour notre processus 127, nous obtenons ceci :

$ ls -l fd
total 0
lrwx------    1 root     root           64 déc 16 22:04 0 -> /dev/console
l-wx------    1 root     root           64 déc 16 22:04 1 -> pipe:[128]
l-wx------    1 root     root           64 déc 16 22:04 2 -> pipe:[129]
l-wx------    1 root     root           64 déc 16 22:04 21 -> pipe:[130]
lrwx------    1 root     root           64 déc 16 22:04 3 -> /dev/apm_bios
lr-x------    1 root     root           64 déc 16 22:04 7 -> pipe:[130]
lrwx------    1 root     root           64 déc 16 22:04 9 -> /dev/console
$

Ceci représente en fait la liste des descripteurs de fichiers ouverts par le processus. Chaque descripteur ouvert est matérialisé par un lien symbolique (dont le nom est le numéro du descripteur) : ce lien pointe vers le fichier ouvert par le biais de ce descripteur[1]. Vous pouvez également remarquer les permissions des liens symboliques : c'est le seul endroit où elles ont un sens pour les liens symboliques, puisqu'elles sont le reflet des droits avec lesquels le fichier correspondant au descripteur a été ouvert.

Notes

[1]

Voir la section Redirections et tubes, pour un rappel de ce que sont ces descripteurs 0, 1 et 2.


Tux sur Étoile de MandrakeSoft Linux est une marque déposée de Linus Torvalds. Toutes les autres marques et copyrights sont la propriété de leurs auteurs respectifs.
Sauf mention contraire, tout le contenu de ces pages et toutes les images sont Copyright MandrakeSoft S.A. et MandrakeSoft Inc. 2000.
http://www.linux-mandrake.com/