Copyright © 2005 Awasthi Nirendra
Copyright © 2005 Deny
Copyright © 2005 Joëlle Cornavin
Article paru dans le n°115 de la Gazette Linux de juin 2005.
Traduction française par Deny
<deny CHEZ: monaco POINT net>
.
Relecture de la traduction française par Joëlle Cornavin
<jcornavi CHEZ club TIRET internet POINT fr>
.
Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.
J'essaie de rassembler quelques astuces sur la manière d'obtenir de procfs des informations de userland. Attention : ces informations peuvent être spécifiques à la version 2.6 du noyau.
procfs est un système de fichiers virtuel pour Linux, monté dans /proc. Il a de multiples objectifs, dont l'accès aux informations du noyau dans un userland ou le débogage. Une des fonctionnalités me font apprécier Linux est l'accès aux informations de processus sous forme de flux de texte. Beaucoup de commandes linux (ps, top, pstree, etc.) tirent leurs informations de ce système de fichiers.
Les fichiers et répertoires du système de fichiers /proc sont virtuels parce que les données ne sont pas réellement enregistrées sur un quelconque support de stockage permanent comme un disque dur ; en revanche, les dossiers, fichiers et données afférents sont créés dynamiquement en mémoire depuis le noyau chaque fois que vous essayez de les lire.
Vérifiez si vous avez déjà monté procfs sur votre système (grep proc /etc/mtab), sinon montez-le à l'aide de la commande suivante :
mount -t proc proc /proc |
Chaque processus a une ligne dans le système de fichiers /proc, identifiée par son PID. Voici les fichiers importants du répertoire /proc :
pid/cmdline contient la commande invoquée pour démarrer le processus (les caractères nuls servent à séparer les arguments).
/proc/pid/cwd contient un lien vers le répertoire de travail actuel du processus.
/proc/pid/environ contient une liste des variables d'environnement que le processus rend disponibles.
/proc/pid/exe contient un lien vers le programme qui s'exécute dans le processus.
/proc/pid/fd/ est un répertoire contenant un lien vers chaque fichier que le processus a ouvert.
/proc/pid/mem inclut le contenu mémoire d'un processus.
/proc/pid/stat contient des informations sur l'état du processus.
/proc/pid/statm contient des informations sur l'utilisation de la mémoire du processus.
Voici quelques exemples d'obtention des informations sur les processus :
Il y a quelque temps, j'ai rencontré un problème ardu consistant à déterminer si n'importe quel processus particulier créait un core dump. Après quelques recherches, j'ai remarqué que le drapeau de chaque processus dans le fichier /proc/pid/stat (le huitième attribut) fournit énormément d'informations « personnelles » sur un processus. Il est possible d'analyser ces informations en faisant un ET logique du drapeau de chaque processus avec les valeurs suivantes :
0x00000002 Process being created 0x00000004 Exiting 0x00000008 Dead 0x00000040 Process using superuser privilage 0x00000200 Process dumping core 0x00000400 Process received some signal 0x00000800 Process allocating memory 0x00001000 Killed due to out-of-memory condition |
Le dossier /proc/[pid]/fd/ fournit des informations sur les fichiers ouverts. Pour trouver les fichiers d'entrée qu'utilise un processus, saisissez :
ls -l /proc/[pid]/fd/0 |
Pour trouver les sockets qu'utilise un processus, saisissez :
ls -l /proc/[pid]/fd|sed -n '/socket/{s/.*\[//;s/\]//p}' |
netstat -ae |
Pour obtenir les arguments en ligne de commande passés à un processus quelconque, saisissez :
cat /proc/[pid]/cmdline |
Pour obtenir l'ID du processus parent, saisissez :
grep PPid /proc/[pid]/status |
procfs fournit de nombreuses informations sur le système, y compris la charge du processeur, le système de fichiers et la configuration réseau. Les exemples suivants indiquent comment visualiser ou changer les informations sur le système à l'aide de procfs :
Pour connaître la quantité de mémoire disponible sur le système, saisissez :
grep Free /proc/meminfo |
Des statistiques sur le système depuis son dernier démarrage peuvent être collectées dans le fichier /proc/stat. Pour connaître le nombre de processus présents sur le système depuis son dernier redémarrage, saisissez :
grep /proc/stat |
Pour connaître la charge moyenne du système à la première, cinquième et quinzième minute, saisissez :
awk '{print "1 min:\t" $1 "\n5 min:\t" $2 "\n15 min:\t" $3 }' /proc/loadavg |
/proc/partitions permet également d'obtenir des informations sur les partitions du système.
/proc/net et /proc/sys/net permettent de visualiser ou de modifier des informations importantes sur le réseau. Pour désactiver la commande ping, saisissez la commande suivante en tant que root :
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all |
echo 1 > /proc/sys/net/ipv4/ip_forward |
Les informations sur les systèmes de fichiers montés se trouvent dans le fichier /proc/mounts.
Pour changer le nom d'hôte à la volée, saisissez :
echo www.abc.com > /proc/sys/kernel/hostname |
Pour obtenir des informations sur le processeur, saisissez :
cat /proc/cpuinfo |
Pour connaître l'utilisation de l'espace d'échange (swap), saisissez :
cat /proc/swaps |
Pour savoir depuis quand le sytème fonctionne, saisissez :
cat /proc/uptime |
Pour répertorier les systèmes de fichiers actuellement partagés par NFS, saisissez :
cat /proc/fs/nfsd/exports |
Bien que j'aie l'intention de traiter ce sujet lors d'un prochain article, voici quelques préliminaires à propos du noyau :
Pour obtenir des informations sur la version du noyau actuellement utilisé, saisissez :
cat /proc/version |
klogd utilise le fichier /proc/kmsg comme source d'informations pour les journaux du noyau. C'est aussi une alternative à l'interface d'appel système syslog.
Le fichier /proc/kcore permet d'accéder à la mémoire physique du système au format « fichier core » et peut être employé par gdb pour examiner l'état actuel de n'importe quelle structure de données du noyau.
Pour obtenir plus d'informations, jetez un coup d'½il au fichier /usr/src/linux/Documentation/filesystems/proc.txt si vous avez installé les sources du noyau.
J'essaierai d'examiner ce système de fichiers du point de vue du noyau dans un prochain article.
Travaillant actuellement en Inde pour Induslogic, je suis titulaire d'une licence d'informatique. Je suis un fervent défenseur du Logiciel libre. Pendant mes loisirs, j'écris des programmes ou je lis des livres. Mes centres d'intérêt se portent sur les pilotes de périphériques, le P2P et les systèmes d'exploitation. Je maintiens mon blogue à l'adresse http://www.nirendra.net.