Explorer procfs

Gazette Linux n°115 — Juin 2005

Awasthi Nirendra

Article paru dans le n°115 de la Gazette Linux de juin 2005.

Traduction française par Deny .

Relecture de la traduction française par Joëlle Cornavin .

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.


Table des matières
1. Pourquoi cet article ?
2. Qu'est ce que procfs ?
3. Le système de fichiers virtuel
4. Montage de /proc
5. Informations sur les processus
6. Informations générales sur le système
7. Quelques informations sur le noyau

1. Pourquoi cet article ?

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.


2. Qu'est ce que procfs ?

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.


3. Le système de fichiers virtuel

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.


4. Montage de /proc

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


5. Informations sur les processus

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 :

Voici quelques exemples d'obtention des informations sur les processus :

  1. 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
    
    J'ai emprunté ces drapeaux au fichier /usr/src/linux/include/linux/sched.h.

  2. 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
    
    

  3. Pour trouver les sockets qu'utilise un processus, saisissez :
    

ls -l /proc/[pid]/fd|sed -n '/socket/{s/.*\[//;s/\]//p}'
    
    
    Pour obtenir des informations sur ces sockets, saisissez :
    

netstat -ae
    
    

  4. Pour obtenir les arguments en ligne de commande passés à un processus quelconque, saisissez :
    

cat /proc/[pid]/cmdline
    
    

  5. Pour obtenir l'ID du processus parent, saisissez :
    

grep PPid /proc/[pid]/status
    
    


6. Informations générales sur le système

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 :

  1. Pour connaître la quantité de mémoire disponible sur le système, saisissez :
    

grep Free /proc/meminfo
    
    

  2. 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
    
    

  3. 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
    
    

  4. /proc/partitions permet également d'obtenir des informations sur les partitions du système.

  5. /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
    
    
    ou pour activer la redirection IP/mascarade IP, saisissez :
    

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

  6. Les informations sur les systèmes de fichiers montés se trouvent dans le fichier /proc/mounts.

  7. Pour changer le nom d'hôte à la volée, saisissez :
    

echo www.abc.com > /proc/sys/kernel/hostname
    
    

  8. Pour obtenir des informations sur le processeur, saisissez :
    

cat /proc/cpuinfo
    
    

  9. Pour connaître l'utilisation de l'espace d'échange (swap), saisissez :
    

cat /proc/swaps
    
    

  10. Pour savoir depuis quand le sytème fonctionne, saisissez :
    

cat /proc/uptime
    
    

  11. Pour répertorier les systèmes de fichiers actuellement partagés par NFS, saisissez :
    

cat /proc/fs/nfsd/exports
    
    


7. Quelques informations sur le noyau

Bien que j'aie l'intention de traiter ce sujet lors d'un prochain article, voici quelques préliminaires à propos du noyau :

  1. Pour obtenir des informations sur la version du noyau actuellement utilisé, saisissez :
    

cat /proc/version
    
    

  2. 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.

  3. 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.