/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.
Sommaire
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:
- Les informations sont toujours à jour
- 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
- Configurer les paramètres fondamentaux du BIOS
- Exécuter les tâches d'administration de la sécurité
- Configurer le modem et la carte son
- Configurer des périphériques non-IDE
- Configurer différentes cartes d'extension
- Configurer les périphériques PCMCIA
- Configurer les périphériques de communication
- Configurer les périphériques USB
Cette page de documentation est distribuée sous licence GNU General Public License
Contenus ©2006-2023 Benjamin Poulain
Design ©2006-2023 Maxime Vantorre