Show 015.html syntax highlighted
<HTML><HEAD><TITLE>Linux-Mandrake: Guide de l'utilisateur et Manuel de référence</TITLE>
<LINK REV=MADE HREF="mailto:info@mandrakesoft.com"></HEAD>
<BODY BGCOLOR="#ffffff"><center><font size="+5"><STRONG><table border="0"><tr><td><STRONG>Linux-Mandrake</STRONG>:</td></tr><tr><td>Guide de l'utilisateur</td></tr><tr><td>et Manuel de référence</td></tr></table></STRONG></font>
<p><font size="+2"><STRONG><table border="0"><tr><td><STRONG>MandrakeSoft</STRONG></td></tr></table></STRONG></font>
<p><STRONG><table border="0"><tr><td> </td></tr><tr><td> </td></tr><tr><td>Janvier 2000</td></tr><tr><td><CODE>http://www.linux-mandrake.com</CODE></td></tr><tr><td></td></tr></table></STRONG></center>
<hr><a href="016.html">Suivant : <STRONG>Samba</STRONG></a><br><a href="014.html">Précédent : Le système de fichiers de
<STRONG>Linux</STRONG>: <STRONG>ext2fs</STRONG></a><br><a href="../">Retour</a><br><hr><a href="000.html#toc"><font size="-1">(Retour à la table des matières)</font></a>
<H1><font size="+1"><a name="135">Chapitre 5 : Le système de fichiers <CODE>/proc</CODE></a></font></H1><hr><p>Le système de fichiers <CODE>/proc</CODE> est une spécificité de
<STRONG>Linux</STRONG>. C'est un système de fichiers virtuel, et en tant que tel
il ne prend aucun espace disque. C'est un moyen très pratique d'obtenir
des informations sur le système, d'autant plus que la plupart des
fichiers dans ce répertoire sont lisibles (enfin, avec un peu
d'habitude). Beaucoup de programmes, en fait, collectent des
informations depuis des fichiers de <CODE>/proc</CODE>, les formatent à leur
façon puis les affichent. C'est le cas pour tous les programmes qui
affichent des informations sur les processus, et nous en avons déjà vu
quelques-uns (<CODE>top</CODE>, <CODE>ps</CODE> et autres). <CODE>/proc</CODE> est
aussi une bonne source d'informations sur votre matériel, et de la même
façon, bon nombre de programmes sont en fait des interfaces pour les
informations contenues dans <CODE>/proc</CODE>.
<p>Il existe également un sous-répertoire spécial, <CODE>/proc/sys</CODE>. Il
permet de changer certains paramètres du noyau en temps réel ou d'en
consulter.
<H1><a name="136">Informations sur les processus</a></H1>
<p>Si vous listez le contenu du répertoire <CODE>/proc</CODE>, vous verrez
beaucoup de répertoires dont le nom est un nombre. Ce sont les
répertoires contenant les informations sur tous les processus
fonctionnant à l'instant donné sur le système:
<p><font size="-4"><PRE>
$ ls -d /proc/[0-9]*
/proc/1/ /proc/302/ /proc/451/ /proc/496/ /proc/556/ /proc/633/
/proc/127/ /proc/317/ /proc/452/ /proc/497/ /proc/557/ /proc/718/
/proc/2/ /proc/339/ /proc/453/ /proc/5/ /proc/558/ /proc/755/
/proc/250/ /proc/385/ /proc/454/ /proc/501/ /proc/559/ /proc/760/
/proc/260/ /proc/4/ /proc/455/ /proc/504/ /proc/565/ /proc/761/
/proc/275/ /proc/402/ /proc/463/ /proc/505/ /proc/569/ /proc/769/
/proc/290/ /proc/433/ /proc/487/ /proc/509/ /proc/594/ /proc/774/
/proc/3/ /proc/450/ /proc/491/ /proc/554/ /proc/595/
</PRE></font>
<p>Notez qu'en tant qu'utilisateur, vous ne pouvez (fort logiquement)
afficher les informations que sur vos propres processus. Mettons-nous
donc en tant que <CODE>root</CODE> et voyons quelle information est
disponible depuis le processus 127:
<p><font size="-4"><PRE>
$ su
Password:
$ cd /proc/127
$ ls -l
total 0
-r--r--r-- 1 root root 0 d c 14 19:53 cmdline
lrwx------ 1 root root 0 d c 14 19:53 cwd -> //
-r-------- 1 root root 0 d c 14 19:53 environ
lrwx------ 1 root root 0 d c 14 19:53 exe -> /usr/sbin/apmd*
dr-x------ 2 root root 0 d c 14 19:53 fd/
pr--r--r-- 1 root root 0 d c 14 19:53 maps|
-rw------- 1 root root 0 d c 14 19:53 mem
lrwx------ 1 root root 0 d c 14 19:53 root -> //
-r--r--r-- 1 root root 0 d c 14 19:53 stat
-r--r--r-- 1 root root 0 d c 14 19:53 statm
-r--r--r-- 1 root root 0 d c 14 19:53 status
$
</PRE></font>
<p>Chaque répertoire contient les mêmes entrées. Voici une brève
description de quelques-unes de ces entrées:
<ul><li><STRONG><CODE>cmdline</CODE></STRONG>: Ce (pseudo-)fichier contient l'intégralité de la
ligne de commande utilisée pour invoquer le processus. Elle n'est pas
formatée: il n'y a aucun espace entre le programme et ses arguments, et
il n'y a pas non plus de saut de ligne à la fin du fichier.
<li><STRONG><CODE>cwd</CODE></STRONG>: Ce lien symbolique pointe sur le répertoire de travail
en cours ("current working directory" en anglais, d'où le nom)
du processus.
<li><STRONG><CODE>environ</CODE></STRONG>: Ce fichier contient toutes les variables
d'environnement pour le processus, sous la forme <CODE>VARIABLE=valeur</CODE>.
De même que pour <CODE>cmdline</CODE>, la sortie n'est pas formatée du tout:
pas de saut de ligne pour séparer les différentes variables, et pas de
saut de ligne à la fin non plus.
<li><STRONG><CODE>exe</CODE></STRONG>: C'est un lien symbolique pointant sur le fichier
exécutable correspondant au processus en cours d'exécution.
<li><STRONG><CODE>fd</CODE></STRONG>: Ce sous-répertoire contient la liste de tous les
descripteurs de fichiers actuellement ouverts par le processus. Voyez
ci-dessous.
<li><STRONG><CODE>maps</CODE></STRONG>: Quand vous affichez le contenu de ce tube nommé (avec
<CODE>cat</CODE> par exemple), vous pouvez voir toutes les parties de
l'espace d'adressage du processus qui sont actuellement des projections
en mémoire de fichiers. Les champs, de gauche à droite, sont: la plage
d'adresses de la projection mémoire, les permissions associées à cette
projection, le décalage depuis le début du fichier où commence la
projection, le périphérique sur lequel le fichier projeté se trouve, le
numéro d'i-noeud du fichier, et enfin le nom du fichier lui-même.
Voyez <CODE>mmap(2)</CODE>.
<li><STRONG><CODE>root</CODE></STRONG>: C'est un lien symbolique qui pointe sur le répertoire
racine utilisé par le processus. Habituellement, ce sera <CODE>/</CODE>, mais
voyez <CODE>chroot(2)</CODE>.
<li><STRONG><CODE>status</CODE></STRONG>: Ce fichier contient diverses informations sur le
processus: le nom de l'exécutable, son état actuel, son <EM>PID</EM> et son
<EM>PPID</EM>, ses <EM>UID</EM> et <EM>GID</EM> réels et effectifs, son occupation mémoire
et autres.</ul>
<p>Si nous listons le contenu du répertoire <CODE>fd</CODE>, nous obtenons ceci:
<p><font size="-4"><PRE>
$ ls -l fd
total 0
lrwx------ 1 root root 64 déc 16 22:04 0 -> /dev/console
l-wx------ 1 root root 64 déc 16 22:04 1 -> pipe:[128]
l-wx------ 1 root root 64 déc 16 22:04 2 -> pipe:[129]
l-wx------ 1 root root 64 déc 16 22:04 21 -> pipe:[130]
lrwx------ 1 root root 64 déc 16 22:04 3 -> /dev/apm_bios
lr-x------ 1 root root 64 déc 16 22:04 7 -> pipe:[130]
lrwx------ 1 root root 64 déc 16 22:04 9 -> /dev/console
$
</PRE></font>
<p>C'est en fait la liste des descripteurs de fichiers ouverts par le
processus. Chaque descripteur ouvert est matérialisé par un lien
symbolique dont le nom est le numéro du descripteur, et qui pointe sur
le fichier ouvert par le biais de ce descripteur<a name="bodynote18" href="026.html#note18">[18]</a>. Vous pouvez
également remarquer les permissions des liens symboliques: c'est le seul
endroit où elles ont un sens pour les liens symboliques, puisqu'elles
sont le reflet des droits avec lesquels le fichier correspondant au
descripteur a été ouvert.
<H1><a name="137">Informations sur le matériel</a></H1>
<p>Outre les répertoires des différents processus, <CODE>/proc</CODE> contient
aussi une foule de renseignements sur le matériel présent sur votre
machine. Une liste des fichiers du répertoire <CODE>/proc</CODE> donne ceci:
<p><font size="-4"><PRE>
$ ls -d [a-z]*
apm dma interrupts loadavg mounts rtc swaps
bus/ fb ioports locks mtrr scsi/ sys/
cmdline filesystems kcore meminfo net/ self/ tty/
cpuinfo fs/ kmsg misc partitions slabinfo uptime
devices ide/ ksyms modules pci stat version
$
</PRE></font>
<p>Par exemple, si nous regardons le contenu de <CODE>interrupts</CODE>,
nous pouvons constater qu'il contient la liste des interruptions
actuellement utilisées par le système, ainsi que le périphérique qui les
occupe. De même, <CODE>ioports</CODE> contiendra la liste des plages
d'entrée/sortie actuellement occupées, et enfin <CODE>dma</CODE> fait de même
avec les canaux <EM>DMA</EM>. Donc, si vous voulez repérer un conflit,
regardez le contenu de ces trois fichiers:
<p><font size="+1"><PRE>
$ cat interrupts
CPU0
0: 127648 XT-PIC timer
1: 5191 XT-PIC keyboard
2: 0 XT-PIC cascade
5: 1402 XT-PIC xirc2ps_cs
8: 1 XT-PIC rtc
10: 0 XT-PIC ESS Solo1
12: 2631 XT-PIC PS/2 Mouse
13: 1 XT-PIC fpu
14: 73434 XT-PIC ide0
15: 80234 XT-PIC ide1
NMI: 0
$ cat ioports
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
0300-030f : xirc2ps_cs
0376-0376 : ide1
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial(auto)
1050-1057 : ide0
1058-105f : ide1
1080-108f : ESS Solo1
10c0-10cf : ESS Solo1
10d4-10df : ESS Solo1
10ec-10ef : ESS Solo1
$ cat dma
4: cascade
$
</PRE></font>
<p>Ou, plus simplement, utilisez la commande <CODE>lsdev</CODE>, qui regroupe
les informations de ces trois fichiers et classe les informations par
périphérique, ce qui est quand même nettement plus
pratique<a name="bodynote19" href="026.html#note19">[19]</a>:
<p><font size="-3"><PRE>
$ lsdev
Device DMA IRQ I/O Ports
------------------------------------------------
cascade 4 2
dma 0080-008f
dma1 0000-001f
dma2 00c0-00df
ESS 1080-108f 10c0-10cf 10d4-10df 10ec-10ef
fpu 13 00f0-00ff
ide0 14 01f0-01f7 03f6-03f6 1050-1057
ide1 15 0170-0177 0376-0376 1058-105f
keyboard 1 0060-006f
Mouse 12
pic1 0020-003f
pic2 00a0-00bf
rtc 8 0070-007f
serial 03f8-03ff
Solo1 10
timer 0 0040-005f
vga+ 03c0-03df
xirc2ps_cs 5 0300-030f
$
</PRE></font>
<p>Une énumération complète des fichiers présents serait trop longue,
néanmoins voici la description de quelques-uns d'entre eux:
<ul><li><STRONG><CODE>cpuinfo</CODE></STRONG>: Ce fichier contient, comme son nom l'indique (en
anglais), des informations sur le ou les processeur(s) présent(s) sur
votre machine.
<li><STRONG><CODE>modules</CODE></STRONG>: Ce fichier contient la liste des modules
actuellement utilisés dans le noyau ainsi que leur compteur
d'utilisations. En fait, c'est la même information que celle reportée
par la commande <CODE>lsmod</CODE>.
<li><STRONG><CODE>meminfo</CODE></STRONG>: Ce fichier contient des informations sur
l'utilisation qui est faite de la mémoire à l'instant où vous affichez
son contenu. Une sortie plus clairement formatée est disponible avec la
commande <CODE>free</CODE>.
<li><STRONG><CODE>apm</CODE></STRONG>: Si vous avez un ordinateur portable, afficher le
contenu de ce fichier vous permet de voir l'état de votre batterie. Vous
pouvez savoir si l'alimentation externe est branchée, la charge courante
de votre batterie, et si le <STRONG>BIOS</STRONG> <EM>APM</EM> de votre portable le
permet (malheureusement ce n'est pas le cas de tous), la durée de vie
restante, en minutes. Le fichier n'est pas très lisible en tant que tel,
vous aurez donc avantage à utiliser la commande <CODE>apm</CODE> à la
place, qui donne les mêmes informations dans un format plus lisible (si
on comprend l'anglais...).
<li><STRONG><CODE>bus</CODE></STRONG>: Ce sous-répertoire contient des informations sur tous
les périphériques trouvés sur les différents bus de votre machine. Les
informations qu'il renferme sont en général peu lisibles, et sont pour
la plupart traitées et remises en forme par des utilitaires externes:
<CODE>lspcidrake</CODE>, <CODE>lspnp</CODE>, etc.</ul>
<H1><a name="138">Le sous-répertoire <CODE>/proc/sys</CODE></a></H1>
<p>Le rôle de ce sous-répertoire est de reporter différents paramètres du
noyau, et de pouvoir changer en temps réel certains de ces paramètres. A
la différence de tous les autres fichiers dans <CODE>/proc</CODE>, certains
fichiers de ce répertoire sont accessibles en écriture, mais par
<CODE>root</CODE> seulement.
<p>Une liste des répertoires et fichiers présents serait trop longue,
d'autant plus qu'ils dépendront en grande partie de votre système d'une
part, et que la plupart des fichiers ne seront utiles que pour des
programmes hautement spécialisés. Voici toutefois trois utilisations
courantes de ce sous-répertoire:
<ul><li><STRONG>Autoriser le routage</STRONG>: Même si le noyau par défaut de
<STRONG>Linux-Mandrake</STRONG> est capable de router, il faut l'y autoriser
explicitement. Pour cela, il suffit de taper la commande suivante en
tant que <CODE>root</CODE>:
<p><font size="+1"><PRE>
$ echo 1 >/proc/sys/net/ipv4/ip_forward
</PRE></font>
<p>Remplacez le 1 par un 0 si vous voulez interdire le routage.
<li><STRONG>Empêcher l'usurpation d'adresse IP</STRONG>: ("IP Spoofing"
en anglais) L'usurpation d'adresse IP consiste à faire croire qu'un
paquet provenant de l'extérieur vient de l'interface même par laquelle
il arrive. C'est une technique couramment employé par les
<STRONG>crackers</STRONG><a name="bodynote20" href="026.html#note20">[20]</a>,
mais vous pouvez faire en sorte que le noyau empêche ce genre
d'intrusion pour vous. Il vous suffit de taper:
<p><font size="0"><PRE>
$ echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter
</PRE></font>
<p>et ce type d'attaque devient impossible.
<li><STRONG>Augmentation de la capacité des tables de fichiers et
d'i-noeuds</STRONG>: La taille de la table des fichiers ouverts et de la
table des i-noeuds en mémoire est dynamique sous <STRONG>Linux</STRONG>. Les
valeurs par défaut sont très largement suffisantes pour une utilisation
normale, mais elles peuvent ne pas suffire si votre machine fait office
de serveur important (un serveur de bases de données par exemple). Le
premier obstacle est justement le fait que les processus ne peuvent plus
ouvrir de fichiers parce que la table est pleine, il faut donc en
augmenter la taille. Parallèlement, il faut aussi augmenter la taille
de la table des i-noeuds. Ces deux lignes résoudront le problème:
<p><font size="+2"><PRE>
$ echo 8192 >/proc/sys/fs/file-max
$ echo 16384 >/proc/sys/fs/inode-max
</PRE></font>
<p>Pour que ces paramètres soient appliqués dès le démarrage du système,
vous voudrez sans doute rajouter ces deux lignes dans
<CODE>/etc/rc.d/rc.local</CODE> pour vous éviter d'avoir à les retaper à
retaper à chaque fois.</ul>
<hr><a href="016.html">Suivant : <STRONG>Samba</STRONG></a><br><a href="014.html">Précédent : Le système de fichiers de
<STRONG>Linux</STRONG>: <STRONG>ext2fs</STRONG></a><br><a href="../">Retour</a><br><hr>Copyright © 2000 <a href="http://www.mandrakesoft.com/">MandrakeSoft</a></BODY></HTML>
See more files for this project here