[LinuxFocus-icon]
LinuxFocus article number 324
http://linuxfocus.org

[Sandeep Grover]
par Sandeep Grover
<sandeepMagma-DA.com>

L´auteur:

Sandeep Grover travaille pour Magma Design Automation en Inde -- Une entreprise à forte croissance spécialisée dans la Conception Électronique Automatisée (EDA en anglais).Pendant son temps libre, il explore les éléments fondamentaux de Linux, ainsi il espère un jour contribuer au noyau Linux!




Traduit en Français par:
Guy Passemard <g.passemard(at)free.fr>

Comprendre le Système de Fichiers /proc

[the proc filesystem]

Résumé:

Le noyau Linux fournit un mécanisme qui donne accès par une arborescence de fichiers aux informations internes et permet la modification des paramètres du noyau pendant son exécution gràce au système de fichiers /proc. Notre présentation ciblera l'architecture Intel x86; toutefois les concepts de base sont les mêmes pour toutes les plateformes Linux.


_________________ _________________ _________________

 

/proc - un Système de Fichiers Virtuels

Le sytème de fichiers /proc est un mécanisme qui est employé par le noyau et ses modules pour envoyer des informations aux processus (d'où le nom /proc). Ce pseudo système de fichiers vous permet d'interagir avec les structures de données internes au noyau, d'acquérir des informations utiles sur les processus, et de changer certains paramètres du noyau à la volée.A la différence des autres systèmes de fichiers, /proc est stocké en mémoire plutôt que sur disque. Si vous interrogez le fichier "/proc/mounts" (qui liste tous les systèmes de fichiers montés, comme la commande "mount"), vous devriez voir une ligne comme :


grep proc /proc/mounts
/proc /proc proc rw 0 0

Le noyau contrôle le système de fichiers /proc et cela sans dispositif sous-jacent. Parce que /proc contient principalement des indicateurs d'états conditionnés par le noyau, l'endroit le plus propice pour le stockage des informations est la mémoire, qui est aussi gérée par le noyau. Exécuter une commande 'ls -l' sur /proc montre que la plupart des fichiers on une longueur de 0 octets; cependant quand le fichier est visualisé, on aperçoit pas mal d'informations. Comment est-ce possible? Parce que le système de fichiers /proc, comme un système de fichiers normal, s'inscrit dans la couche système de fichier virtuel (VFS en anglais). Par contre, lorsque "VFS" fait des appels d'i-nodes adressant des fichiers/répertoires au système de fichiers /proc, ce dernier en réalité crée ces fichiers/répertoires à partir des informations contenues dans le noyau.

 

Montage du Système de Fichiers /proc

S'il n'est pas déjà monté, le système de fichiers /proc peut-être monté avec la commande suivante :

mount -t proc proc /proc

La commande ci-dessus exécutée devrait monter correctement le système de fichier /proc. Lisez, s'il-vous-plaît, la page "man" pour plus de détails.

 

Visualisation des fichiers /proc

Les fichiers /proc peuvent être utilisés pour accéder aux informations concernant l'état du noyau, les attributs du matériel, l'état de fonctionnement des processus etc. La plupart des fichiers du répertoire /proc permettent une vue, la plus récente, sur l'environnement physique du système. Bien que les fichiers /proc soient virtuels, ils peuvent être examinés à partir de n'importe quel éditeur ou de programmes comme "more", "less", "cat". Lorsque qu'un éditeur tente d'ouvrir un fichier virtuel, le fichier est en réalité créé immediatement avec des informations internes au noyau. Voici quelques résultats intéressants après interrogation de mon système.

$ ls -l /proc/cpuinfo -r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo

$ file /proc/cpuinfo
/proc/cpuinfo: empty

$ cat /proc/cpuinfo

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping : 6
cpu MHz : 1000.119
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips : 1998.85

processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping : 6
cpu MHz : 1000.119
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips : 1992.29

Ce résultat concerne une unité centrale à deux processeurs. La plupart des informations ci-dessus s'expliquent d'elles-mêmes et apportent d'utiles informations système sur le matériel. Certaines informations dans les fichiers /proc sont codées et divers utilitaires sont spécialisés pour interpréter ces informations codées et les sortir sous un format lisible par l'homme. Ces utilitaires, pour en nommer quelques uns, s'appellent : "top", "ps", "apm", etc.

 

Obtenir des informations utiles sur le système et le noyau


Le système de fichier /proc permet de rassembler des informations utiles sur le système et le fonctionnement du noyau. Quelques fichiers importants sont décrits ci-dessous:

Il y a beaucoup plus de fichiers que ceux énumérés précédement. On peut s'attendre qu'un lecteur curieux fera appel à "more" pour scruter chaque fichier du répertoire /proc ou en lire plus [1] pour acquérir des détails sur les fichiers présents dans le répertoire /proc. Je suggère l'utilisation de "more" plutôt que "cat" jusqu'à ce que vous soyiez plus informé sur le système de fichier car certains fichiers (cf kcore) peuvent être très importants.

 

Informations sur les processus en cours

Le système de fichiers /proc peut servir à l'extraction des informations sur tous les processus en cours d'exécution. Le répertoire /proc contient des sous-répertoires numérotés qui correspondent au numéro d'identification de processus (PID). Ainsi, pour chaque processus en cours d'exécution, il y a un sous-répertoire de /proc qui porte comme nom, le PID de chaque processus. Ces sous-répertoires contiennent des fichiers qui fournissent chacun des détails importants concernant l'état actuel et l'environnement d'un processus. Essayons de rechercher un processus en cours d'execution.

$ ps -aef | grep mozilla
root 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozilla
La commande ci-dessus montre qu'il y a un processus en cours de Mozilla avec le PID 32558. Par correspondance, il devrait exister un sous-répertoire dans /proc portant le numéro 32558.

$ ls -l /proc/32558
total 0
-r--r--r-- 1 root root 0 Dec 25 22:59 cmdline
-r--r--r-- 1 root root 0 Dec 25 22:59 cpu
lrwxrwxrwx 1 root root 0 Dec 25 22:59 cwd -> /proc/
-r-------- 1 root root 0 Dec 25 22:59 environ
lrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla*
dr-x------ 2 root root 0 Dec 25 22:59 fd/
-r--r--r-- 1 root root 0 Dec 25 22:59 maps
-rw------- 1 root root 0 Dec 25 22:59 mem
-r--r--r-- 1 root root 0 Dec 25 22:59 mounts
lrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> //
-r--r--r-- 1 root root 0 Dec 25 22:59 stat
-r--r--r-- 1 root root 0 Dec 25 22:59 statm
-r--r--r-- 1 root root 0 Dec 25 22:59 status
Le fichier "cmdline" contient la commande invoquée pour démarrer le processus. Les variables d'environnement du processus sont incluses dans le fichier "environ". Le fichier "status" contient des informations actualisées sur l'état du processus. Parmi lesquelles, le numéro utilisateur (UID) et le numéro du groupe d'utilisateurs(GID) de l'utilisateur qui a lancé le processus, le numéro d'identification du processus parent (PPID) qui a instancié le PID, et l'état courant du processus "Sleeping" (dormant) ou "Running" (en cours). Dans chaque répertoire dédié à un processus se trouvent plusieurs liens symboliques. Ainsi "cwd" est le lien au répertoire courant de travail du processus, le lien "exe" pointe sur le programme en cours d'exécution par le processus, "root" est le lien du processus à son répertoire racine (normalement "/"). Le répertoire "fd" contient des liens aux descripteurs de fichiers utilisés par le processus. Uniquement pour les noyaux Linux SMP, "cpu" contient les plages de temps de processus affectées par CPU.

/proc/self est un sous-répertoire intéressant, il facilite l'utilisation de /proc par un programme pour trouver des informations sur ses propres processus. la commande /proc/self est un lien symbolique au répertoire /proc qui correspond au processus accédant au répertoire /proc.

 

Interaction avec le noyau à travers le système de fichier /proc


La plupart des fichiers /proc précédemment présentés sont uniquement en lecture. Toutefois, à l'intérieur du système de fichiers /proc il est prévu d'interagir avec le noyau à partir de fichiers en lecture-écriture. L'écriture dans ces fichiers peut changer l'état du noyau, ainsi il faut les modifier avec beaucoup de précautions. Le répertoire /proc/sys est celui qui contient tous les fichiers en lecture-écriture ce qui permet de modifier le fonctionnement du noyau.

/proc/sys/kernel - Ce répertoire contient les informations sur le fonctionnement général du noyau. Le répertoire /proc/sys/kernel/{domainname, hostname} héberge le nom de domaine et le nom d'hôte pour les ordinateurs du réseau. Les fichiers correspondant peuvent être configurés pour modifier ces noms.

$ hostname
machinename.domainname.com

$ cat /proc/sys/kernel/domainname
domainname.com

$ cat /proc/sys/kernel/hostname
machinename

$ echo "new-machinename" > /proc/sys/kernel/hostname

$ hostname
new-machinename.domainname.com

Donc, en modifiant les fichiers dans le système de fichiers /proc, nous pouvons modifier le nom de l'ordinateur hôte. Beaucoups d'autres fichiers configurables existent dans le répertoire /proc/sys/kernel/. Bien qu'il soit impossible de lister tous les fichiers concernés ici, le lecteur devrait observer ce répertoire en détail.
Un autre répertoire configurable est /proc/sys/net. Les fichiers dans ce répertoire peuvent être modifiés pour changer les propriétés du réseau par machine/réseau. (cf. la simple modification d'un fichier permet de cacher son ordinateur du réseau).

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
La commande 'echo' ci-dessus cachera votre ordinateur du réseau car elle désactive les messages vers icmp_echos. L'ordinateur hôte ne répondra pas aux appels "ping" venant d'un autre ordinateur.

$ ping machinename.domainname.com
no answer from machinename.domainname.com
La commande suivante reconfigure la valeur par défaut:
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Il y a bien d'autres sous-répertoires dans /proc/sys qui peuvent être configurés pour effectuer un changement des propriétés du noyau. Voir [1], [2] pour plus amples informations

 

Conclusion

Le système de fichiers /proc assure une interface aux éléments internes du système Linux. Il assiste l'administrateur afin de connaître des états et de configurer des périphériques et des processus sur une machine. La compréhension et l'utilisation de ce système de fichiers sont primordiales pour bien se servir du système d'exploitation Linux.

 

Références




Site Web maintenu par l´équipe d´édition LinuxFocus
© Sandeep Grover
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Translation information:
en --> -- : Sandeep Grover <sandeepMagma-DA.com>
en --> fr: Guy Passemard <g.passemard(at)free.fr>

2005-07-06, generated by lfparser_pdf version 2.51