GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Fehlerbehebung mit dem proc-Dateisystem unter Linux

Der Prozess Dateisystem ist ein wichtiges Merkmal von Linux, das Sie nicht ignorieren können. proc ist ein Pseudo- oder virtuelles Dateisystem, das eine Schnittstelle zu Kernel-Datenstrukturen bereitstellt. Mit anderen Worten, proc ist kein tatsächliches Dateisystem im realen Sinne; Stattdessen befindet es sich nur im Arbeitsspeicher und nicht auf einer Festplatte. Es wird automatisch vom System gemountet.

Die meisten seiner Inhalte sind normale Dateien und Verzeichnisse, sodass Sie die meisten regulären Linux-Tools verwenden können, um im proc zu navigieren Dateisystem. Die Beispiele in diesem Artikel sollten auf jeder Linux-Distribution gleich ausgeführt werden. Mein System verwendet:

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

Grundlegende Verwendung von Prozessen

Um herauszufinden, wo die /proc Dateisystem befindet, führen Sie mount aus Befehl und suchen Sie nach proc . Hier sehen Sie diesen Proc ist auf /proc gemountet Verzeichnis:

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

Wechseln Sie in das Verzeichnis /proc Verzeichnis und durchsuchen Sie es. Sie werden viele Verzeichnisse mit Nummern sehen; die Zahlen sind nur Prozess-IDs (PIDs) für die Prozesse, die ausgeführt werden. Die Dateien mit Namen sind allgemeine Dateien, die systemweit gelten und sich nicht auf einen bestimmten Prozess beziehen:

 $ CD / CD / Proc / 
$ PWD
/ Proc
$ ls
1 157 22827 33 3413 3618 384 4709 512 5571 66 741 798 88 Konsolen Schlüssel SCSI
10 15868 23 3340 3414 362 385 4768 513 5581 6723 742 799 880 CPUINFO Key-Benutzer Self-/> 101 15900 23323 3341 3415 3622 39 4769 514 56 68 7466 8 891 Crypto KMSG Slabinfo
1033 16 23370 3342 346 363 392 4770 515 5637 69 747 80 9 Geräte KPageCount Softirqs
104 17 23380 3343 3467 364 394 48 516 5652 7 75 800 906 discstats kpageflags stat
10416 17580 23383 3344 347 365 4 4804 517 57 70 76 8367 928 DMA Loadavg Swaps
105 18 23469 3346 349 37 40 4805 518 58 7071 77 839 96 Treiberschlösser SYS
106 19 23491 3365 35 37 4 4094 4807 519 59 71 78 840 98 EXECDDOMAINS MDSTAT SYSRQ-Trigger
107 2 23524 3366 351 375 4096 482 52 6 7199 783 842 9838 FB MEMINFO SYSVIPC
11 20767 23527 3392 352 376 41 483 53 601 72 784 8446 99 Filesystems MISS TIMER_LISTE
11412 21 24 3397 3523 377 4180 49 5347 61 73 785 85 993 FS-Module Timer_stats
12 21014 26 3398 358 378 42 494 5348 62 735 786 86 994 Interrupts montiert Tty
120 21035 27 34 359 379 428 495 54 624 736 79 869 9970 IOMEM MTRR-Betriebszeit
1263 21059 28 3408 36 38 43 508 5421 625 737 793 87 ACPI IOPORTS Net-Version
1265 21083 29 3409 360 380 44    509   5463  63    738   794   870   buddyinfo  ipmi      PageTypeinfo VMallocinfo
1272 22 30 3410 3602 381 45 51 5464 636 739 795 874 Bus IRQ-Partitionen VMSTAT
13 22055 31 3411 3603 382 46 510 5500 64 74 796 878 CGROUPS Kallsyms Sched_debug ZoneInfo
14 22074 32     3412  361   383   47    511   5519  65    740   797   879   cmdline    kcore        schedstat
$

Beginnen Sie mit der Untersuchung einiger allgemeiner systemweiter Dateien. Zum Beispiel /proc/cpuinfo zeigt Informationen über die CPU im System an – insbesondere Hersteller, Modell, Anzahl der Kerne, Geschwindigkeit, CPU-Flags usw.:

$ cat /proc/cpuinfo 

Ebenso /proc/meminfo liefert Informationen über den Primärspeicher oder RAM auf dem System. Es bietet auch zusätzliche Statistiken, z. B. wie viel Speicher verwendet wird, frei ist und so weiter:

$ cat /proc/meminfo 

Um alle geladenen Kernel-Module anzuzeigen, schauen Sie sich /proc/modules an Datei:

$ cat /proc/modules 

Um zu sehen, welche Dateisysteme von Ihrem System unterstützt werden, schauen Sie unter /proc/filesystems nach :

$ cat /proc/filesystems 

Sehen Sie sich als Nächstes die Pro-Prozess-Dateien an. zum Beispiel systemd , die eine PID von 1:

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

Wechseln Sie in das Verzeichnis mit dem Namen 1 innerhalb von /proc und sehen, was da ist. Es sind viele Dateien vorhanden, und ihre Namen sind einigermaßen selbsterklärend:

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

$ ls
attr        cmdline          environ  io         mem         ns             pagemap      sched Stack-Task
Autogrup-Comm EXE-Limits mountinfo numa_maps patch_state-statstat stat timers
AUXV COREDUMP_FILTER FD loginuid montiert oom_adj Persönlichkeit SessionId statm uid_map
CGROUP CPUSET FDINFO MAP_FILES MOUNTSTATS STATUS WCHAN
CLEAR_REFS CWD gid_map  maps       net         oom_score_adj  root         smaps      syscall
$

Um herauszufinden, ob diese Dateien für jeden der Prozesse vorhanden sind, wählen Sie die aktuelle Shell-ID aus. Sie können diese Informationen abrufen, indem Sie echo $$ ausführen . $$ ist eine spezielle Variable, die die PID der aktuellen Shell speichert. Gehen Sie zu /proc und CD in das Verzeichnis mit der gleichen Nummer wie die PID. Die Dateien sind fast identisch mit denen für PID 1 oder systemd:

$ echo $$
21059
$
$ cd /proc/21059
$ pwd
/proc/21059
$
$ ls
Attr CMDLINE-Umgebung IO MEM NS PAGEMAP-Schutzstapel-Task
Autogrup-Comm-Exe-Limits MountInfo Numa_Maps Patch_state-Zeitplan-Statistik-Timer
AUXV COREDUMP_FILTER FD Loginuid-Halterungen OOM_ADJ Persönlichkeit SessionID StatM UID_MAP
fdinfo   map_files  mountstats  oom_score      projid_map   setgroups  status   wchan
clear_refs  cwd              gid_map  maps       net         oom_score_adj  root         smaps  >  > $precall
$syscall<

Um zu sehen, was diese Dateien enthalten, führen Sie einen Prozess mit langer Laufzeit aus. Öffnen Sie ein Terminal und führen Sie tty aus Befehl, um zu sehen, welches Terminal Sie verwenden. Geben Sie dann die Katze ein Befehl und drücken Sie Enter . Dieser Befehl sitzt und wartet auf Ihre Eingabe:

$ tty
/dev/pts/2
$
$ cat

Öffnen Sie ein anderes Terminal und finden Sie die PID von cat mit pgrep Befehl:

$ pgrep cat
24335
$

Untersuchen Sie jetzt die allererste Pro-Prozess-Datei, cmdline . Diese Datei zeigt, wie die Befehlszeile ausgeführt wird, ob Parameter verwendet werden usw.:

$ cat /proc/24335/cmdline 
cat$

Sehen Sie sich als Nächstes das Verzeichnis mit dem Namen cwd an , was eine Art symbolischer Link (Symlink) zu dem Verzeichnis ist, in dem sich die cat Befehl wurde ausgeführt; in diesem Fall ist das /root :

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

Wenn eine Binärdatei ausgeführt und ein Prozess gestartet wird, werden standardmäßig einige Dateien geöffnet. Im Allgemeinen öffnet es einen Standard in (stdin ), Standardausgabe (stdout ) und ein Standardfehler (stderr ). Wenn Sie die fd auflisten Verzeichnis unter /proc/ gefolgt von der PID, Sie können sehen, dass drei symbolische Links zurückgegeben werden, die alle auf das Terminal zeigen (pts2 ), die verwendet wurde, um den Befehl auszuführen:

$ ls -l  /proc/24335/fd/
insgesamt 0
lrwx------. 1 root root 64 Mär  4 03:35 0 -> /dev/pts/2
lrwx------. 1 root root 64 Mär  4 03:35 1 -> /dev/pts/2
lrwx------. 1 root root 64 Mär  4 03:35 2 -> /dev/pts/2
$

Eine weitere wichtige Datei ist exe , was ein symbolischer Link ist, der auf den absoluten Pfad der ausgeführten Binärdatei zeigt. In diesem Fall ist es der Pfad der Katze Befehl:

$ ls -l /proc/24335/exe
lrwxrwxrwx. 1 root root 0 Mär  4 03:35 /proc/24335/exe -> /usr/bin/cat
$

Ebenso, wenn Sie Katze die Umgebung pro Prozessdatei können Sie alle Umgebungsvariablen anzeigen, die für cat definiert sind Prozess:

$ cat /proc/24335/environ 

Wichtige Dateien in proc

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Die obigen Beispiele liefern viele Informationen über laufende Prozesse und Ihr System im Allgemeinen, die beim Debuggen und Beheben von Problemen helfen können.

Wichtige Dateien pro Prozess

Im Folgenden finden Sie wichtige Pro-Prozess-Dateien, nach denen Sie in /proc/ suchen sollten Dateisystem:

  • /proc/$pid/cmdline Enthält die vollständige Befehlszeile für den Prozess
  • /proc/$pid/cwd Symbolischer Link zum aktuellen Arbeitsverzeichnis des Prozesses
  • /proc/$pid/environ Enthält die anfängliche Umgebung, die beim Programmstart gesetzt wurde
  • /proc/$pid/exe Symbolischer Link zum Pfad der ausgeführten Datei
  • /proc/$pid/fd Unterverzeichnis zum Auflisten von Dateien, die vom Prozess geöffnet wurden
  • /proc/$pid/io Enthält I/O-Statistiken für den Prozess
  • /proc/$pid/limits Zeigt das Prozessressourcenlimit an
  • /proc/$pid/maps Aktuell zugeordnete Speicherbereiche und Zugriffsberechtigungen
  • /proc/$pid/stack Ablaufverfolgung von Funktionsaufrufen im Kernel-Stack des Prozesses
  • /proc/$pid/stat Statusinformationen zum Vorgang
  • /proc/$pid/task/ Verzeichnis, das Thread-Informationen enthält

Wichtige systemweite Dateien

Hier ist eine Liste wichtiger allgemeiner Dateien (d. h. nicht prozessspezifisch):

  • /proc/cmdline Argumente, die während der Bootzeit an den Linux-Kernel übergeben werden
  • /proc/cpuinfo CPU-bezogene Informationen
  • /proc/meminfo Statistiken zur Speichernutzung
  • /proc/filesystems Auflistung der vom Kernel unterstützten Dateisysteme
  • /proc/modules Aktuell geladene Kernel-Module
  • /proc/partitions Informationen über jede Partition auf dem System
  • /proc/swaps Informationen über Swap Space auf dem System
  • /proc/self Verzeichnis bezieht sich auf den Prozess, der auf /proc zugreift Dateisystem
  • /proc/slabinfo Informationen über Kernel-Caches
  • /proc/sys Diverse Dateien und Unterverzeichnisse über Kernel-Variablen

Weitere Schritte

Diese Übersicht über die proc filesystem berührt nur die Möglichkeiten, die es bietet. Weitere Informationen finden Sie unter proc durch Eingabe von man proc auf die Manpage von Befehl oder Zugriff auf die Online-Version der proc-Manpage.


Linux
  1. Eine Einführung in die Verwendung von tcpdump auf der Linux-Befehlszeile

  2. Verwenden der Kraft in der Linux-Befehlszeile

  3. Überprüfen Sie den Speicherplatz in Linux mit den Befehlen df und du

  4. Untersuchen des Linux /proc-Dateisystems

  5. Verwenden des mkfs-Befehls in Linux zum Formatieren des Dateisystems auf einer Festplatte oder Partition

Eine Anleitung für Anfänger zum Navigieren im Linux-Dateisystem

So sichern Sie das Linux-Dateisystem mit dem Dump-Befehl

Verwenden des Antivirus ClamAV auf Ubuntu 18.04

Tutorial zur Verwendung des Timeout-Befehls unter Linux

Tutorial zur Verwendung des letzten Befehls im Linux-Terminal

Verwenden von vmstat zum Beheben von Leistungsproblemen unter Linux