/proc

Le système de fichier virtuel proc permet d'obtenir de nombreuses informations du noyau. La plupart de ces informations sont de type informative tel que la fréquence du processeur. D'autre part, certains fichiers permettent de changer dynamiquement les paramètres, comme par exemple pour activer le routage.

Le système Linux fournit un système de fichier virtuel proc permettant d'accéder directement à de nombreuses informations du noyau. Ce système de fichier particulier se trouve généralement monté dans le dossier /proc. Les informations sont générés au moment de la lecture d'un fichier de /proc et sont donc continuellement à jour. Certains fichiers peuvent de plus être modifié, permettant ainsi de changer dynamiquement des paramètres du noyau.

Montage du système de fichier proc

Sur la plupart des distributions Linux, un repertoire proc se trouve à la racine: /proc. Si le système n'est pas déjà monté, il est possible de le faire à la main à l'aide de la commande:

#mount -t proc proc /proc

Pour automatiser cela au démarage, vous pouvez aussi ajouter ceci dans /etc/fstab

proc            /proc           proc    defaults        0       0

Bien que par la suite les fichiers du dossier /proc sont utilisés comme n'importe quel fichiers, il est important de retenir que les fichiers n'existent pas réellement sur le disque mais qu'ils sont générés à la demande à partir des informations en mémoire. Vous pouvez aisément vérifier ceci en constatant que la plupart des fichiers contenus dans /proc sont de taille nulle:

$ file cpuinfo
cpuinfo: empty
$ ls -l cpuinfo
-r--r--r-- 1 root root 0 2006-12-07 13:53 cpuinfo

Au moment de l'appel système demandant la lecture du fichier, le contenu sera alors formaté à partir des informations contenues dans la mémoire:

$cat cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 6
model name      : Intel(R) Pentium(R) D CPU 3.40GHz
stepping        : 4
cpu MHz         : 3394.423
cache size      : 2048 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 6
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm pni monitor ds_cpl est cid cx16 xtpr lahf_lm
bogomips        : 6793.77

Le fait que le système soit virtuel implique deux choses importantes:

  1. Les informations sont toujours à jour
  2. En cas de modifications, celle-çi sont appliquées immédiatement

Obtenir de l'information

Il y a de nombreux fichier et sous dossier dans /proc et il est impossible de tous les décrire ici. Il est conseillé de lister le contenus du dossier /proc pour vous faire une idée.

Il existe de nombreux dossiers portant comme nom un numéro, ce sont les informations sur les processus. Chaque dossier porte le numéro d'un processus et contient des informations sur celui-ci. Nous reviendrons en détails sur les informations des processus dans la section suivante.

Les autres fichiers et dossier à l'exception du repertoire sys fournissent de l'information sur le système. Vous devriez lire chaque fichier avec less ou more pour vous faire une idée de l'information qu'on y trouve. Les fichiers à connaitre sont:

  • /proc/cmdline: paramètre passé au noyau au démarage
  • /proc/cpuinfo: information sur le ou les processeurs
  • /proc/interupts: les des périphérique avec leur numéro d'interuption
  • /proc/modules: liste modules chargés dans le noyau
  • /proc/mounts: liste des systèmes de fichier montés
  • /proc/version: version du noyau

De nombreux autres fichiers sont détaillé dans les objectifs du LPI, vous devriez systématiquement visualiser ce fichier pour vous faire une idée de son contenu.

De nombreux outils utilisé couramment par l'administrateur servent en réalité à lire les informations de /proc et à les présenter d'une autre façon, citons ps, lspci, lsmod, lsusb, etc.

Information sur les processus

Les dossiers de /proc dont le nom est un numéro permettent d'accéder aux informations sur le processus de même numéro. Prenons l'exemple du processus de syslog sur mon système:

$ ps ax | grep syslog
4091 ?        Ss     0:00 /sbin/syslogd
$ sudo ls -l /proc/4091
total 0
dr-xr-xr-x 2 root root 0 2006-12-10 17:17 attr
-r-------- 1 root root 0 2006-12-10 17:16 auxv
-r--r--r-- 1 root root 0 2006-12-10 11:16 cmdline
lrwxrwxrwx 1 root root 0 2006-12-10 17:16 cwd -> /
-r-------- 1 root root 0 2006-12-10 17:16 environ
lrwxrwxrwx 1 root root 0 2006-12-10 11:16 exe -> /sbin/syslogd
dr-x------ 2 root root 0 2006-12-10 17:17 fd
-r--r--r-- 1 root root 0 2006-12-10 17:16 maps
-rw------- 1 root root 0 2006-12-10 17:16 mem
-r--r--r-- 1 root root 0 2006-12-10 17:16 mounts
-r-------- 1 root root 0 2006-12-10 17:16 mountstats
-rw-r--r-- 1 root root 0 2006-12-10 17:16 oom_adj
-r--r--r-- 1 root root 0 2006-12-10 17:16 oom_score
lrwxrwxrwx 1 root root 0 2006-12-10 17:16 root -> /
-rw------- 1 root root 0 2006-12-10 17:16 seccomp
-r--r--r-- 1 root root 0 2006-12-10 17:16 smaps
-r--r--r-- 1 root root 0 2006-12-10 11:16 stat
-r--r--r-- 1 root root 0 2006-12-10 17:16 statm
-r--r--r-- 1 root root 0 2006-12-10 14:25 status
dr-xr-xr-x 3 root root 0 2006-12-10 17:17 task
-r--r--r-- 1 root root 0 2006-12-10 17:16 wchan

On peut voir que chez moi le processus syslog a été lancé avec le PID: 4091. En listant le contenus de /proc/4091 on obtient toutes les informations concernant ce processus. Il faut savoir qu'en réalité la commande ps utilise les informations de /proc et les formatent pour l'utilisateur. Parmis toutes les informations des processus, on retrouve les informations importante auquelles on peut aussi accéder à l'aide de la commande ps:

  • cmdline: la ligne de commande qui a servi à lancer le processus
  • cwd: répertoire courant du processus
  • environ: variable d'environnement du processus
  • exe: lien symbolique vers le fichier exécutable du processus
  • status: informations sur le processus, PID, PPID, UID du propriétaire, GID, etc

Notez aussi le sous-dossier fd qui contient la liste des descripteurs de fichiers couramment ouvert par le processus.

Il existe un lien particulier vers le processus courant dans /proc/self. Ce lien symbolique pointe toujours vers le dossier particulier du processus qui y accède.

Modifier des paramètres

L'utilisation de /proc ne se limite pas à l'accès aux informations mais permet aussi de changer dynamiquement les paramètres du noyau. Le sous dossier /proc/sys donne en particulier l'ensemble des paramètres modifiable, il est important de bien maitriser les différents paramètres que l'on utilise car une mauvaise configuration peut avoir de grave conséquence.

Le dossier le mieux connu est sans doute /proc/sys/net/ipv4 qui reprend l'ensemble des paramètres des réseaux IP sur IPv4. Par exemple le routage IP est désactivé par défaut sur la plupart des distributions:

$ cat /proc/sys/net/ipv4/ip_forward
0

Pour activer le routage pour toutes les interfaces, il suffit par exemple de mettre "1" dans ce même fichier:

# echo 1 > /proc/sys/net/ipv4/ip_forward

De nombreux autre paramètres sont disponible sous le dossier /proc/sys et leur noms sont généralement plus explicite que les noms de fichier du reste de /proc.

Références

Objectifs liés