GNU/Linux >> Tutoriels Linux >  >> Linux

Dépannage à l'aide du système de fichiers proc sous Linux

Le proc Le système de fichiers est une fonctionnalité importante de Linux que vous ne pouvez pas ignorer. proc est un pseudo ou système de fichiers virtuel qui fournit une interface aux structures de données du noyau. En d'autres termes, proc n'est pas un système de fichiers réel au sens du monde réel ; au lieu de cela, il réside uniquement en mémoire et non sur un disque. Il est automatiquement monté par le système.

La plupart de son contenu est constitué de fichiers et de répertoires réguliers, vous pouvez donc utiliser la plupart des outils Linux classiques pour naviguer dans le proc système de fichiers. Les exemples de cet article doivent s'exécuter de la même manière sur n'importe quelle distribution Linux. Mon système utilise :

$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server version 7.8 (Maipo)
$
 
$ uname  -r
3.10.0- 1127.el7.x86_64

Utilisation de base des procédures

Pour savoir où se trouve le fichier /proc le système de fichiers réside, exécutez le montage commande et recherchez proc . Ici, vous pouvez voir que proc est monté sur le /proc répertoire :

montage $ | grep proc 
proc sur /proc type proc (rw,nosuid,nodev,noexec,relatime)
systemd-1 sur /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=26, pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9506)
nfsd sur /proc/fs/nfsd type nfsd (rw,relatime)
binfmt_misc sur /proc/ sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
$

Déplacez-vous dans /proc répertoire et explorez-le. Vous verrez beaucoup de répertoires avec des numéros; les nombres ne sont que des ID de processus (PID) pour les processus en cours d'exécution. Les fichiers avec des noms sont des fichiers généraux applicables à l'ensemble du système et non liés à un processus spécifique :

$ cd /proc/
$ pwd
/proc
$ ls
1      157    22827  33    3413  3618  384   4709  512   5571  66    741   798   88    si console        > 10 15868 23 3340 3414 362 385 4768 513 5581 6723 742 799 880 CPUINFO Key-Users Self
101 15900 23323 3341 3415 3622 39 4769 514 56 68 74668 891 363 392 4770 515 5637 69 747 80 9 Dispositifs KpageCount Softtirqs
104 17 23380 3343 3467 364 394 48 516 5652 7 75 800 906 DISKSTATS KPAGEFLAGS STAT
928 DMA LOADAVG Swaps
105 18 23469 3346 349 37 40 4805 518 58 7071 77 839 96 LOCKS DUVERS SYS
106 19 23491 3365 35 37 4 4094 4807 519 59 71 78 840 98 EXECDOMAINS MDSTAT SYSRQ TRIGGER
107 2 23524 3366 351 375 4096 482 52 6 7199 783 842 9838 FB MEMINFO SYSVIPC
1120767 23527 3392 352 376 41010101010101023527 3392 352 376 4101010101010101023 784 8446 99 Systèmes de fichiers MISC TIMER_LIST
11412 21 24 3397 3523 377 4180 49 5347 61 73 785 85 993 FS Modules TIMER_STATS
12 21014 26 3398 358 378 42 494 5348 62 735 786 86 994 /> 120 21035 27 34 359 379 428 495 54 624 736 79 869 9970 IOMEM MTRR UPTime
1263 21059 28 3408 36 38 43 508 5421 625 737 793 87 ACPI IOPORTS VERSION
44    509   5463  63    738   794   870   infos-amis  ipmi      PageTypeInfo vmallocinfo
1272 22 30 3410 3602 381 45 51 5464 636 739 795 874 Bus Irq Partitions VMSTAT
13 22055 31 3411 3603 382 46 510 5500 64 74 796 878 Cgroupes Kallsyms 32     3412  361   383   47    511   5519  65    740   797   879   cmdline    kcore        schedstat
$

Commencez par explorer quelques fichiers généraux à l'échelle du système. Par exemple, /proc/cpuinfo affiche des informations sur le processeur du système, en particulier sa marque, son modèle, le nombre de cœurs, sa vitesse, les indicateurs du processeur, etc. :

$ cat /proc/cpuinfo 

De même, /proc/meminfo fournit des informations sur la mémoire principale ou la RAM du système. Il fournit également des statistiques supplémentaires, comme la quantité de mémoire utilisée, libre, etc. :

$ cat /proc/meminfo 

Pour voir tous les modules du noyau qui sont chargés, regardez le /proc/modules fichier :

$ cat /proc/modules 

Pour voir quels systèmes de fichiers sont pris en charge par votre système, consultez /proc/filesystems :

$ cat /proc/filesystems 

Ensuite, regardez les fichiers par processus ; par exemple, systemd , dont le PID est 1 :

$ ps aux | grep -i systemd | head -1
racine         1  0.0  0.0 195976  9088 ? Ss   03 mars   0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
$

Déplacer vers le répertoire nommé 1 dans /proc et voir ce qu'il y a. De nombreux fichiers sont présents et leurs noms sont quelque peu explicites :

$ cd /proc/1
$ pwd
/proc/1
$

$ ls
attr        cmdline          environ  io         mem         ns             pagemap      sched tâche de pile
AutoGroup Comm exe limite MountInfo numa_maps patch_state schedstat stat tirs
Auxv coredump_filter fd Loginuid monte oom_adj personnalité sessiond statm uid_map
cgroup cpuset fdinfo map_files Mountstats oom_score projid_map set statut wchan $

Pour savoir si ces fichiers sont présents pour chacun des processus, choisissez l'ID du shell actuel. Vous pouvez obtenir ces informations en exécutant echo $$ . $$ est une variable spéciale qui enregistre le PID du shell actuel. Allez dans /proc et cd dans le répertoire avec le même numéro que le PID. Les fichiers sont presque identiques à ceux pour PID 1 ou systemd :

$ echo $$
21059
$
$ cd /proc/21059
$ pwd
/proc/21059
$
$ ls
attr cmdline environnement io mem ns pagemap sched stack tâche
autogroup comm exe limites montInfo numa_maps patch_state schedstat stat tirs
Auxv coredump_filter fd loginuid monts oom_adj personnalité sessiond statm uid_map
cgroup cpuset fdinfo   map_files  mountstats  oom_score      projid_map   setgroups  status   wchan
clear_refs  cwd              gid_map  maps       net         oom_score_adj  root         smaps     />$

Pour voir ce que contiennent ces fichiers, exécutez un processus de longue durée. Ouvrez un terminal et exécutez le tty commande pour voir quel terminal vous utilisez. Tapez ensuite le chat commande et appuyez sur Entrée . Cette commande va s'asseoir et attendre votre entrée :

$ tty
/dev/pts/2
$
$ cat

Ouvrez un autre terminal et trouvez le PID de cat en utilisant pgrep commande :

$ pgrep chat
24335
$

Maintenant, explorez le tout premier fichier par processus, cmdline . Ce fichier montre comment la ligne de commande est exécutée, si des paramètres sont utilisés, etc. :

$ cat /proc/24335/cmdline 
cat$

Ensuite, regardez le répertoire appelé cwd , qui est une sorte de lien symbolique (symlink) vers le répertoire où se trouve le cat la commande a été exécutée ; dans ce cas, c'est /root :

$ ls -l  /proc/24335/cwd
lrwxrwxrwx. 1 root root 0 4 mars 03:35 /proc/24335/cwd -> /root
$

Si un binaire est exécuté et qu'un processus est généré, il ouvre quelques fichiers par défaut. En général, il ouvre un standard en (stdin ), sortie standard (stdout ) et une erreur standard (stderr ). Si vous indiquez le fd répertoire sous /proc/ suivi du PID, vous pouvez voir qu'il renvoie trois liens symboliques, tous pointant vers le terminal (pts2 ) qui a été utilisé pour exécuter la commande :

$ ls -l  /proc/24335/fd/
total 0
lrwx------. 1 root root 64 Mar  4 03:35 0 -> /dev/pts/2
lrwx------. 1 root root 64 Mar  4 03:35 1 -> /dev/pts/2
lrwx------. 1 root root 64 Mar  4 03:35 2 -> /dev/pts/2
$

Un autre fichier important est exe , qui est un lien symbolique pointant vers le chemin absolu du binaire qui a été exécuté. Dans ce cas, c'est le chemin du chat commande :

$ ls -l /proc/24335/exe
lrwxrwxrwx. 1 root root 04 mars 03:35 /proc/24335/exe -> /usr/bin/cat
$

De même, si vous chat l'environnement fichier par processus, vous pouvez afficher toutes les variables d'environnement définies pour le cat processus :

$ cat /proc/24335/environ 

Fichiers importants dans le processus

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Les exemples ci-dessus fournissent de nombreuses informations sur les processus en cours d'exécution et sur votre système en général, qui peuvent vous aider à résoudre les problèmes de débogage et de dépannage.

Fichiers importants par processus

Voici les fichiers par processus importants à rechercher dans /proc/ système de fichiers :

  • /proc/$pid/cmdline Contient la ligne de commande complète pour le processus
  • /proc/$pid/cwd Lien symbolique vers le répertoire de travail courant du processus
  • /proc/$pid/environ Contient l'environnement initial défini au démarrage du programme
  • /proc/$pid/exe Lien symbolique vers le chemin du fichier qui a été exécuté
  • /proc/$pid/fd Sous-répertoire pour lister les fichiers qui ont été ouverts par le processus
  • /proc/$pid/io Contient des statistiques d'E/S pour le processus
  • /proc/$pid/limits Affiche la limite des ressources du processus
  • /proc/$pid/maps Régions de mémoire actuellement mappées et autorisations d'accès
  • /proc/$pid/pile Trace des appels de fonction dans la pile noyau du processus
  • /proc/$pid/stat Informations sur l'état du processus
  • /proc/$pid/task/ Répertoire contenant des informations sur les fils de discussion

Fichiers importants à l'échelle du système

Voici une liste de fichiers généraux importants (c'est-à-dire non spécifiques à un processus) :

  • /proc/cmdline Arguments transmis au noyau Linux lors du démarrage
  • /proc/cpuinfo Informations relatives au processeur
  • /proc/meminfo Statistiques d'utilisation de la mémoire
  • /proc/filesystems Liste des systèmes de fichiers pris en charge par le noyau
  • /proc/modules Modules du noyau actuellement chargés
  • /proc/partitions Informations sur chaque partition du système
  • /proc/swaps Informations sur l'espace d'échange sur le système
  • /proc/self Le répertoire fait référence au processus accédant à /proc système de fichiers
  • /proc/slabinfo Informations sur les caches du noyau
  • /proc/sys Divers fichiers et sous-répertoires sur les variables du noyau

Étapes supplémentaires

Cet aperçu de la proc filesystem n'aborde que les possibilités qu'il offre. Pour plus d'informations, consultez proc la page de manuel de en saisissant le man proc commande ou accéder à la version en ligne de la page de manuel proc.


Linux
  1. Une introduction à l'utilisation de tcpdump sur la ligne de commande Linux

  2. Utilisation de la force sur la ligne de commande Linux

  3. Vérifier l'espace disque sous Linux à l'aide des commandes df et du

  4. Utilisation de la commande mkfs sous Linux pour formater le système de fichiers sur un disque ou une partition

  5. Où se trouve le système de fichiers du sous-système Linux dans Windows 10 ?

Un guide du débutant pour naviguer dans le système de fichiers Linux

Comment sauvegarder le système de fichiers Linux à l'aide de la commande dump

Utilisation de l'antivirus ClamAV sur Ubuntu 18.04

Tutoriel sur l'utilisation de la commande Timeout sous Linux

Tutoriel sur l'utilisation de la dernière commande dans le terminal Linux

Utilisation de vmstat pour résoudre les problèmes de performances sous Linux