Parmi les différents répertoires qui constitues l'arborescence d'un système Linux typique, l'un d'entre eux permet d'obtenir des informations sur le système. Ce répertoire /proc est un pseudo système de fichiers qui contient des informations sous une forme beaucoup plus lisible que /dev/kmem. /proc contient des fichiers comportant des informations classées par type. Un sous-répertoire nommé d'après le numéro ID du process est créé chaque fois qu'un programme est lancé. Ce répertoire contient toutes les informations utiles sur le processus en question.
Les fichiers dans /proc
La syntaxe des fichiers est dépendante de l'architecture sur laquelle tourne le noyau. Les exemples donnés ici se rapportent à une distribution Debian fonctionnant sur un Athlon 900.
cpuinfo : Ce fichier contient une collection d'informations sur le ou les processeurs de la machine.
Exemple :
processor : 0 vendor_id : AuthenticAMD cpu family : 6 model : 4 model name : AMD Athlon(tm) Processor stepping : 2 cpu MHz : 908.114 cache size : 256 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr syscall mmxext 3dnowext 3dnow bogomips : 1808.79
Les valeurs communes à toutes les plates-formes sont cpu qui fournit le type de processeur et bogomips qui est une valeur générique calculée au moment du lancement du noyau.
devices : Liste des différents périphériques présents classés par groupe (caractère et bloc).
dma : Liste des canaux dma (Direct Memory Access) en cours d'utilisation.
filesystems : Liste des systèmes de fichiers supportés par le noyau actuel.
interrupts : Liste des interruptions (IRQ) utilisées par les périphériques. Pour l'architecture i386,
le fichier est l'un des plus clair.
CPU0 0: 14921090 XT-PIC timer 1: 251478 XT-PIC keyboard 2: 0 XT-PIC cascade 5: 1868812 XT-PIC eth0 6: 16 XT-PIC floppy 7: 1 XT-PIC parport0 8: 1 XT-PIC rtc 10: 24416 XT-PIC es1371 11: 1289916 XT-PIC eth1 12: 5086013 XT-PIC PS/2 Mouse 14: 179068 XT-PIC ide0 15: 28198 XT-PIC ide1 NMI: 0 ERR: 0
On retrouve ici les informations sur les périphériques et le nombre d'appels à leur IRQ (ex: 16 appels au lecteur de disquettes, IRQ 6).
ioports : Liste des adresses d'entrée / sortie utilisées par les périphériques.
0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-008f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-01f7 : ide0 02f8-02ff : serial(set) 0376-0376 : ide1 0378-037a : parport0 03c0-03df : vga+ 03f0-03f5 : floppy 03f6-03f6 : ide0 03f7-03f7 : floppy DIR 03f8-03ff : serial(set) 0778-077a : parport0 0cf8-0cff : PCI conf1 8000-803f : Promise Technology, Inc. 20265 8000-8007 : ide2 8008-800f : ide3 8010-803f : PDC20265 8400-8403 : Promise Technology, Inc. 20265 8800-8807 : Promise Technology, Inc. 20265 9000-9003 : Promise Technology, Inc. 20265 9400-9407 : Promise Technology, Inc. 20265 9800-987f : 3Com Corporation 3c905B 100BaseTX [Cyclone] 9800-987f : eth1 a000-a03f : Ensoniq ES1371 [AudioPCI-97] a000-a03f : es1371 a400-a47f : 3Com Corporation 3c905C-TX [Fast Etherlink] a400-a47f : eth0 d800-d80f : VIA Technologies, Inc. Bus Master IDE d800-d807 : ide0 d808-d80f : ide1 e400-e4ff : VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] e800-e80f : VIA Technologies, Inc. VT82C686 [Apollo Super ACPI]
On constate la présence des deux ports séries (serial), deux cartes réseau (eth0 et 1), une carte son (es1371), et notre lecteur de disquettes, configuré en adresse 3f0 IRQ 6.
kcore : Ce fichier représente la mémoire physique du système. Grâce à ce fichier et à une image du noyau non compressé,
l'utilitaire gdb peut être utilisé pour débugger le noyau. La taille de ce fichier est égale à la mémoire physique plus 4 ko.
Nous vous déconseillons donc de tenter d'afficher ce fichier ou de l'imprimer.
kmsg : Ce fichier contient les logs des différents appels au noyau. Il faut avoir les privilèges root pour en lire le contenu.
De plus, si le système utilise syslog, le fichier n'est pas lisible, car un seul programme à la fois
est autorisé à le lire. Ne vous inquiétez donc pas si un cat /proc/kmsg ne vous retourne rien.
ksyms : Liste des définitions de symboles utilisés pour le chargement dynamique des modules.
malloc : Ce fichier n'existe sans doute pas sur votre système. Il n'est présent que si CONFIGDEBUGMALLOC est défini
durant la compilation du noyau.
meminfo : Informations sur la mémoire utilisée par exemple par le programme free.
Il contient des informations sur la mémoire totale, utilisée, libre, etc. Ces informations sont données pour la mémoire réelle
et le swap. L'unité utilisée est l'octet.
modules : Liste des modules chargés par le système.
pci : Liste des périphériques PCI détectés lors du démarrage du noyau.
PCI devices found: Bus 1, device 0, function 0: VGA compatible controller: Matrox Graphics, Inc. MGA G400 AGP (rev 4). IRQ 11. Master Capable. Latency=64. Min Gnt=16.Max Lat=32. Prefetchable 32 bit memory at 0xe2000000 [0xe3ffffff]. Non-prefetchable 32 bit memory at 0xe1000000 [0xe1003fff]. Non-prefetchable 32 bit memory at 0xe0800000 [0xe0ffffff].
Notre carte graphique est donc une Matrox G400 qui utilise l'IRQ 11.
stat : Statistiques du noyau et du système. Ce fichier contient plusieurs données :
uptime : Ce fichier contient deux chiffres, le temps écoulé depuis le démarrage et le temps
passé à ne rien faire.
version : Ce fichier contient les informations sur la version du noyau en cours d'utilisation.
Linux version 2.4.1 (root@darthmaul) (gcc version 2.95.3 20010125 (prerelease)) #1 sam fév 3 03:47:30 CET 2001
Les répertoires dans /proc
Lorsque vous jetez un oeil au nom des sous-répertoires de /proc et que vous les comparez à ce que vous affiche la commande ps x, vous constatez qu'ils correspondent parfaitement. L'explication est simple, le système créé automatiquement un répertoire dans /proc pour chaque processus en cours. Dans chacun de ces répertoires, vous trouverez les fichiers suivants :
cmdline : ligne de commande par laquelle le processus a été lancé.
cwm : le répertoire courant du processus.
environ : environnement du processus. Pour afficher ce fichier de manière lisible,
tapez (cat /proc/627/environ; echo) | tr "\000" "\n". Ceci permet d'afficher environ pour le processus 627
en remplaçant les caractères nul par un retour à la ligne.
exe : pointeur vers le binaire exécuté. Il s'agit d'un lien symbolique au format [périphérique]:inoeud
fd : il s'agit d'un répertoire contenant une entrée par fichier ouvert par le processus. De la même manière que exe,
il s'agit de liens symboliques vers les fichiers ouverts.
maps : plages mémoires utilisées par le processus selon le format : adresses, permissions, offset, périphérique et inoeud.
Les permissions peuvent être : lecture (r), écriture (w), exécution (x), partagés (s) et/ou privé (p). Le périphérique est donné
au format majeur : mineur.
Plus d'informations
Nous venons de voir la partie la plus intéressante de /proc. Grâce à ces informations, il est possible de connaître les principales informations que fournit le noyau. Mais nous avons passé bon nombre de fichiers. Consultez la man page de proc (5) pour en apprendre d'avantage et pourquoi pas vous écrire un logiciel présentant ces informations de manière plus conviviale en temps réel.