Outils pour utilisateurs

Outils du site


start:parcours_linux:proc

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

start:parcours_linux:proc [2020/06/01 23:39] – créée gerardadminstart:parcours_linux:proc [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +===== Le point de montage du pseudo système de fichiers du noyau ("/proc") =====
 +
 +Ce répertoire représente le point de montage du pseudo système de fichiers du noyau. Ce dernier contient des fichiers permettant d’accéder aux informations sur le matériel, la configuration du noyau et sur les processus en cours d’exécution. [5] .
 +
 +
 +
 +On retrouvera donc un répertoire par processus actif. Chacun porte le numéro du processus (PID). Il est constitué des fichiers suivants :
 +
 +
 +
 +    * cmdline contient la ligne de commande qui a créé le processus.
 +
 +    * status contient des informations sur l’état du processus (en attente, en exécution, propriétaire... ).
 +
 +    * exe est un lien vers le fichier exécutable utilisé par le processus.
 +
 +
 +
 +Dans le répertoire /proc, on retrouve des fichiers contenants des informations générales sur le système. Comme :
 +
 +
 +
 +    * uptime donnant le temps de fonctionnement du système.
 +
 +    * stat donnant diverses statistiques sur l’utilisation des ressources du système (CPU, mémoire... ).
 +
 +    * meminfo donnant un récapitulatif de l’utilisation de la mémoire.
 +
 +    * cpuinfo donnant une description des CPU du système.
 +
 +====== Répertoire /proc ======
 +
 +==Qu'est-ce que "/proc" ?==
 +
 +**/proc** est un système de fichier utilisé par le noyau pour envoyer des informations aux différents processus d'ou le nom **/proc**.
 +
 +La modification des fichiers qu'il contient peut changer des paramètres du noyau à la volée.
 +
 +A la différence des autres répertoires, **/proc** est stocké en mémoire et non sur le disque dur.
 +
 +Voici, par exemple, l'intérieur du fichier **cpuinfo**. Pour le consulter rapidement :
 +
 +  cat /proc/cpuinfo
 +
 +En voici le résultat :
 +
 +  processor : 0
 +  vendor_id : GenuineIntel
 +  cpu family : 15
 +  model : 1
 +  model name : Intel(R) Celeron(R) CPU 1.80GHz
 +  stepping : 3
 +  cpu MHz : 1804.811
 +  cache size : 128 KB
 +  fdiv_bug : no
 +  hlt_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 clflush dts acpi mmx fxsr sse sse2 ss ht tm
 +  bogomips : 3579.90
 +
 +==Les informations utiles du noyau :==
 +
 +^  Fichier  ^ Description  ^
 +|/proc/cpuinfo |Concerne les informations sur le Processeur ( Modèle, famille, taille du cache, etc ... ).\\ \\ |
 +|/proc/meminfo |Concerne les informations sur la mémoire physique ( Ram ), l'espace du "Swap", etc ... .\\ \\ |
 +|/proc/mounts |Concerne les informations sur les systèmes de fichiers déjà montés.\\ \\ |
 +|/proc/devices |Concerne les informations sur les périphériques disponibles.\\ \\ |
 +|/proc/modules |Concerne les informations sur les modules activés dans le noyau.\\ \\ |
 +|/proc/cmdline |Concerne les informations sur les paramètres donnés au noyau lors de la mise en route.|
 +
 +D'autres fichiers sont bien évidemment présents dans ce répertoire. Certains sont très sensibles comme **kcore**, à éviter d'éditer ou de modifier.
 +\\ \\
 +==Information sur les processus en cours :==
 +
 +Nous pouvons nous aider du système de fichiers **/proc** pour extraire des données en cours d'exécution. Le répertoire **/proc** contient des sous-répertoires numérotés correspondant au numéro d'identification de processus (PID). Ainsi, pour chaque processus en cours d'exécution, nous avons un sous-répertoire qui porte comme nom le PID de chacun. Ces sous-répertoires contiennent des fichiers qui fournissent des détails important de l'état et l'environnement d'un processus.
 +\\ \\
 +==Recherchons un processus en cours d'exécution :==
 +
 +  ps -aef | grep mozilla
 +
 +Résultat :
 +
 +  xxxxxxx       12807  11544   5 Apr30 ?             00:22:07    /usr/lib/mozilla-1.6/mozilla-bin
 +
 +L'exécution de la commande nous montre un processus de Mozilla en cours avec le PID numéro 12807 . Il devrait donc exister un sous-répertoire dans **/proc** portant ce numéro.
 +
 +Vérifions :
 +
 +  ls -l /proc/1280
 +
 +Résultat :
 +
 +  total 0
 +  -r-------- 1 standby standby 0 mai 1 02:52 auxv
 +  -r--r--r-- 1 standby standby 0 mai 1 01:05 cmdline
 +  lrwxrwxrwx 1 standby standby 0 mai 1 02:52 cwd -> /home/standby/
 +  -r-------- 1 standby standby 0 mai 1 02:52 environ
 +  lrwxrwxrwx 1 standby standby 0 mai 1 01:05 exe ->   /usr/lib/mozilla-1.6/mozilla-bin*
 +  dr-x------ 2 standby standby 0 mai 1 02:52 fd/
 +  -r--r--r-- 1 standby standby 0 mai 1 02:52 maps
 +  -rw------- 1 standby standby 0 mai 1 02:52 mem
 +  -r--r--r-- 1 standby standby 0 mai 1 02:52 mounts
 +  lrwxrwxrwx 1 standby standby 0 mai 1 02:52 root -> //
 +  -r--r--r-- 1 standby standby 0 mai 1 01:05 stat
 +  -r--r--r-- 1 standby standby 0 mai 1 02:52 statm
 +  -r--r--r-- 1 standby standby 0 mai 1 02:40 status
 +  dr-xr-xr-x 3 standby standby 0 mai 1 02:52 task/
 +  -r--r--r-- 1 standby standby 0 mai 1 02:52 wchan
 +
 +==Interagir avec le noyau directement grâce à /proc :==
 +
 +
 +La plupart des fichiers dans **/proc** ne sont qu'en lecture seule, excepté le répertoire **/proc/sys** qui lui est en lecture/écriture ce qui implique que l'on peut modifier l'état du noyau instantanément en modifiant ces fichiers.
 +
 +**ATTENTION :** Vous agissez directement sur le noyau, il faut donc être très délicat !
 +
 +**/proc/sys/kernel** contient les informations sur le fonctionnement général du noyau. Ce répertoire héberge le nom de domaine et le nom d'hôte pour les ordinateurs du réseau, cette configuration se trouve dans les fichiers **domainname** et **hostname**. Ceux-ci peuvent être configurés pour modifier ces noms.
 +
 +Testons et commençons par voir le hostname affecté à notre machine :
 +
 +  * hostname
 +  * POSTE1    ( Sans nom de domaine )
 +  * POSTE1.domainname.com ( Avec nom de domaine )
 +
 +Vérifions si nous trouvons la même chose dans ce fameux répertoire. Voyons le nom de domaine :
 +
 +  $ cat /proc/sys/kernel/domainname
 +                       ( Sans nom de domaine )
 +  domainname.com ( Avec nom de domaine )
 +
 +
 +Vérifions cette fois le hostname de la machine :
 +
 +  $ cat /proc/sys/kernel/hostname
 +  POSTE1  ( Sans nom de domaine )
 +  POSTE1  ( Avec nom de domaine )
 +
 +
 +Nous pouvons donc constater que les commande interagissent avec ce répertoire, **/proc**, plus précisément dans ce cas, **/proc/sys/kernel/** avec les fichiers **hostname** et **domainname**.
 +
 +Tentons d'interagir cette fois-ci avec le noyau. Pour cela nous allons modifier le **hostname** par ligne de commande puis vérifier ce que la machine nous répondra lorsque nous lui demanderons quel est notre **hostname**.
 +
 +  $ echo "nouveau-hostname" > /proc/sys/kernel/hostname
 +  $ hostname
 +  nouveau-hostname    ( Sans nom de domaine )
 +  nouveau-hostname.domainname.com    ( Avec nom de domaine )
 +
 +Nous voyons bien que le noyau vient d'être modifieé. Bien des fichiers peuvent être modifiés mais attention à ne pas faire tout et n'importe quoi.
 +
 +Un exemple assez sympathique, modifier en temps réel le noyau de façon à ne plus permettre de réponse de votre machine sur le réseau. Pour être plus clair, nous allons lui demander de ne plus répondre à la commande **PING**, cela va nous permettre de nous cacher du réseau.
 +
 +Nouveau-hostname :
 +
 +  $ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
 +  $ ping POSTE1
 +
 +Pas de réponse, si ce n'est qu'il vous montre que des packets on été envoyés mais sans retour.
 +
 +Pour remettre par défaut cette valeur aussi rapidement, il suffit de remplacer la valeur 1 par 0 :
 +
 +  $ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
 +  $ ping POSTE1
 +  64 bytes from POSTE1.domainname.com (192.168.x.x): icmp_seq=1 ttl=64 time=0.028 ms
 +
 +La machine répond de nouveau !
 +
 +En 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. Donc ne faîtes pas de bêtises ;-) .
 +
 +----