Die Linux-Befehlszeile bietet viele Tools, mit denen Sie mehr über Prozesse erfahren, die derzeit in Ihrem System aktiv sind. Ein solches Dienstprogramm ist pmap, das die Speicherzuordnung des Prozesses meldet. In diesem Tutorial werden wir die Grundlagen von pmap anhand einiger leicht verständlicher Beispiele besprechen.
Aber bevor wir das tun, ist es erwähnenswert, dass alle Beispiele hier auf einem Ubuntu 20.04 LTS-Rechner getestet wurden.
Linux-pmap-Befehl
Mit dem Befehl pmap in Linux können Sie die Speicherzuordnung eines oder mehrerer Prozesse anzeigen. Es folgt die Syntax:
pmap [Optionen] PID [...]
Und so erklärt es die Manpage des Tools:
Der pmap-Befehl zeigt die Speicherabbildung eines Prozesses oder von Prozessen an.
Im Folgenden finden Sie einige Beispiele im Q&A-Stil, die Ihnen eine noch bessere Vorstellung davon vermitteln sollen, wie der Befehl pmap funktioniert.
Q1. Wie benutzt man pmap?
Die grundlegende Verwendung ist einfach. Führen Sie einfach den Befehl „pmap“ ohne Option aus. Natürlich müssen Sie eine Prozess-PID als Eingabe übergeben.
Zum Beispiel habe ich pmap folgendermaßen verwendet:
pmap 5146
Und hier ist ein Teil der produzierten Ausgabe:
5146:Gedit
000055bde4835000 8K R-X-- Gedit
000055bde4a36000 4K R ---- anon]
00007FC910000000 132K RW --- [anon]
00007FC910021000 65404K ----- [anon]
00007FC9180000000000000000000000000000000000000000 000M-00007FC9180. --- [ anon ]
00007fc91c750000 204K r---- UbuntuMono-R.ttf
00007fc91c783000 644K r-x-- libaspell.so.15.2.0
00007fc91c8 ---- libaspell. 204K .so.15.2.0
00007fc91ca24000 20K r---- libaspell.so.15.2.0
00007fc91ca29000 4K rw--- libaspell.so.15.2.0
00007fc91ca2a000 --x libenchant_aspell.so
00007FC91CA2C000 2044K ------ libenchant_aspell.so
00007fc91cc2b000 4k r ---- libenchant_aspell.so
00007FC91CC2C000 4K000 4K000 4K000 4K000 4K000 4K000 4K000 4K000 4K000 4K000 4KWANGE--F. r-x-- libenchant_hspell.so
00007fc91cc38000 2044K ----- libenchant_hspell.so 00007FC91CE37000 4K R ---- libenchant_hspell.so
00007FC91CE38000 12K RW --- libenchant_hspell.so
00007fc911b000 428K R-X- ----- libhunspell-1.6.so.0.0.1
00007fc91d0a5000 4K r---- libhunspell-1.6.so.0.0.1
00007fc91d0a6000 16K rw--- libhunspell-1.6.so. 0.0.1
00007fc91d0aa000 16K r-x-- libenchant_myspell.so
00007fc91d0ae000 2048K ----- libenchant_myspell.so
00007fc91d2ae000 4K r----
...
...
Also los geht's, die Ausgabe zeigt Ihnen zuerst den Namen des Prozesses und dann folgt die Memory Map.
Q2. Wie kann pmap erweiterte Ausgabe anzeigen?
Um pmap dazu zu bringen, die Ausgabe im erweiterten Format anzuzeigen, verwenden Sie die Befehlszeilenoption -x. Zum Beispiel:
pmap -x 5146
Das Folgende ist ein Teil der erzeugten Ausgabe:
5146:Gedit
Adresse KBYTES RSS DIRECTE MODE MAPPING
0000555BDE4835000 8 4 0 R-X-- GEDIT
0000555BDE4835000 0 0 R-X-GEDIT
0000555BDE4A36000 4 4 4 R- --- gedit
000055bde4a36000 0 0 0 r ---- gedit
000055bde4a37000 4 4 4 --- rw gedit
000055bde4a37000 0 0 0 --- rw gedit
000055bde5d32000 13944 13692 13692 RW --- [Anon]
000055bde5d32000 0 0 0 RW --- [Anon]
00007FC910000000 132 44 44 RW --- [Anon]
00007FC910000000 0 0 0 0 RW --- -[anon]
00007fc910021000 65404 0 0 ----- [anon]
00007fc910021000 0 0 0 ----- [anon]
0000007fc918000000 896 896 896 rw --- [anon ]
00007fc918000000 0 0 0 rw--- [ anon ]
00007fc9180e0000 64640 0 0 ----- [ anon ]
0 0007fc9180e0000 0 0 0 ----- [anon]
00007fc91c750000 204 136 0 r ---- Ubuntumono-r.ttf
0000007fc91c750000 0 0 r ---- Ubuntumono-r.ttf
00007FC91C783000 644 472 0 R-X-- Libaspell.SO.15.2.0
00007fc91c783000 0 0 R-X-- libaspell.so.15.2.0
00007FC91C824000 2048 0 ------------ .15.2.0
00007FC91C824000 0 0 0 ----- libaspell.SO.15.2.0
00007FC91CA24000 20 20 20 R ---- libaspell.so.15.2.0
00007fc91ca24000 0 0 0 0 r ---- libaspell.so.15.2.0
00007fc91ca29000 4 4 4 rw --- libaspell.so.15.2.0
00007fc91ca29000 0 0 0 rw ---- libaspell.so.15.29000 .0
00007fc91ca2a000 8 8 0 r-x-- libenchant_aspell.so
00007fc91ca2a000 0 0 r-x-- libenchant_aspell.so
00007fc91ca2c000 2044 0-libenchant_aspell.so 00007 fc91ca2c000 0 0 0 ----- libenchant_aspell.so
00007fc91cc2b000 4 4 r ---- libenchant_aspell.so
00007fc91cc2b000 0 0 r ---- libenchant_aspell.so
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .
...
...
Beachten Sie, dass Sie, wenn Sie noch mehr Details benötigen, die Befehlszeilenoption -X verwenden können.
Q3. Wie kann man pmap dazu bringen, das Geräteformat in der Ausgabe anzuzeigen?
Dies kann mit der Befehlszeilenoption -d erfolgen. Zum Beispiel:
pmap -d 5146
Und hier ist ein Teil der erzeugten Ausgabe:
5146:Gedit
Adresskbytes-Modus-Offset-Geräte-Mapping
0000555BDE4835000 8 R-X-00000000000000 008:00008 GEDIT
0000555BDE4A36000 4 R --- 00000000001000 008:00008 00008:00008 00008:00008 00008:00008 00008:00008 00008:00008 00008:00008 00008:00008 00008:00008 00008:00008 000055BDE4A37000 4 RW --- 0000000000002000 008:00008 GEDIT
0000555BDE5D32000 13944 RW --- 000000000000000000 000:0000000000000000000000000000 132 RW-00000000000000 00000 000:0000 000:0000 000:0000 000 0000000 0000000000 132 rw- 65404 ----- 000000000000000000 000:00000 [anon]
00007fc918000000 896 RW --- 00000000000000 000:00000 [anon]
00007FC91800000000000000000 000 [anon]00007FC91C750000 204 R ---- 000000000000000000 008:00008 UBUNTUMONO-R.TTF
00007FC91C783000 644 R-X-- 000000000000000000 008:0000008.lebaspaspaspell.So.So.SO.15.2.2.2. 008:00008 libaspell.so.15.2.0
00007fc91ca24000 20 r---- 00000000000a1000 008:00008 libaspell.so.15.2.0
00007FC91CA29000 4 RW --- 00000000000A6000 008:00008 libaspell.SO.15.2.0
00007FC91CA2A000 8 R-X-0000000000000000 0000:00008 LIBENCH-FRAHNEGASPELL.SOSPELL. .SO
00007FC91CC2B000 4 R ---- 0000000000001000 008:00008 libenchant_aspell libenchant_hspell.so
00007FC91CC38000 2044 ------ 000000000000B000 008:00008 libenchant_hspell.so
0000007FC91CE37000 4 R ---- 00000000000000000000A000 008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008:00008 00008 008:00008 libenchant_hspell.so
...
...
...
Sie können also sehen, dass in der Ausgabe eine neue Spalte „Gerät“ hinzugefügt wurde.
Q4. Wie entferne ich die pmap-Ausgabe von Kopf- und Fußzeilen?
Wenn Sie Dinge wie Spaltennamen in der pmap-Ausgabe nicht sehen möchten, können Sie die Befehlszeilenoption -q verwenden.
Zum Beispiel:
pmap -q -d 5146
Es folgte die Ausgabe:
5146:gedit
000055bde4835000 8R-x-- 0000000000000000 008:00008 gedit
000055bde4a36000 4R ---- 0 Millionen Milliarden tausend 008:00008 gedit
000055bde4a37000 4 rw --- 0000000000002000 008:00008 GEDIT
000055BDE5D32000 13944 RW --- 0000000000000000 000:00000 [ANON]
00007FC910000000 132 RW --- 0000000000000000 000:00000 [ANON]
0000007fc910021000 65040404040404040404040404040404040404040404040404040404. [Anon]
00007fc918000000 896 rw --- 0000000000000000 000:00000 [Anon]
00007fc9180e0000 64640 ----- 0000000000000000 000:00000 [Anon]
00007fc91c750000 204 R ---- 0000000000000000 008:00008 Ubuntumono-r.ttf
00007FC91C783000 644 R-X-000000000000 008:000088 libaspell
00007fc91ca24000 20 r---- 00000000000a1000 008:00008 libaspell.so.15.2.0
00007fc91ca29000 4 rw--- 00000000000a6000 008 :00000a6000 008 .15.2.0
00007FC91CA2A000 8 R-X-- 0000000000000000 008:00008 libenchant_aspell 008:00008 libenchant_aspell.so
00007FC91CC2C000 4 RW --- 00000000002000 008:00008 libenchant_aspell 0000000000b000 008:00008 libenchant_hspellSo können Sie sehen, dass der Header aus der Ausgabe entfernt wurde.
Q5. Wie kann man pmap dazu bringen, vollständige Pfade in der Ausgabe anzuzeigen?
Falls Sie möchten, dass pmap den vollständigen Pfad zu den Dateien in der Mapping-Spalte anzeigt, können Sie die Befehlszeilenoption -p verwenden.
Zum Beispiel:
pmap -p 5146Und hier ist die Ausgabe dieses Befehls:
5146: gedit
000055bde4835000 8K r-x-- /usr/bin/gedit
000055bde4a36000 4K r---- /usr/bin/gedit
000055bde4a37000 -4K rw--- / bin / gedit
000055bde5d32000 13944K rw --- [Anon]
00007fc910000000 132K rw --- [Anon]
00007fc910021000 65404K ----- [Anon]
00007fc918000000 896K rw--- [ anon ]
00007fc9180e0000 64640K ----- [ anon ]
00007fc91c750000 204K r---- /usr/share/fonts/truetype/ubuntu/UbuntuMono-R.ttf
00007fc91c783000 644K r-x-- /usr/lib/x86_64-linux-gnu/libaspell.so.15.2.0
00007fc91c824000 2048K ----- /usr/lib/x86_64-linux-gnu/libaspell.so .15.2.0
00007fc91ca24000 20K r---- /usr/lib/x86_64-linux-gnu/libaspell.so.15.2.0
00007fc91ca29000 4K rw--- /usr/lib/x86_64- linux-gnu/libaspell.so.15.2.0
00007fc91ca2a000 8K r-x-- /usr/lib/x86_64-linux-gnu/enchant/libenchant_aspell.so
00007fc91ca2c000 2044K ----- /usr/ lib/x86_64-linux-gnu/enchant/libenchant_aspell. so
00007fc91cc2b000 4K r---- /usr/lib/x86_64-linux-gnu/enchant/libenchant_aspell.so
00007fc91cc2c000 4K rw--- /usr/lib/x86_64-linux-gnu/enchant /libenchant_aspell.so
00007fc91cc2d000 44K r-x-- /usr/lib/x86_64-linux-gnu/enchant/libenchant_hspell.so
00007fc91cc38000 2044K ----- /usr/lib/x86_64-linux-gnu /enchant/libenchant_hspell.so
00007fc91ce37000 4K r---- /usr/lib/x86_64-linux-gnu/enchant/libenchant_hspell.so
00007fc91ce38000 12K rw--- /usr/x86_64-lib/x86_64- linux-gnu/enchant/libenchant_hspell.so
00007fc91ce3b000 428K r-x-- /usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91cea6000 2044K ----- / usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91d0a5000 4K r---- /usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91d0a6000 16K rw--- /usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91d0aa000 16K r-x-- /usr/lib/x86_64-linux-gnu/ enchant/libenchant_myspell.so
00007f c91d0ae000 2048K ----- /usr/lib/x86_64-linux-gnu/enchant/libenchant_myspell.so
00007fc91d2ae000 4K r---- /usr/lib/x86_64-linux-gnu/enchant/libenchant_myspell.so
00007fc91d2af000 4K rw--- /usr/lib/x86_64-linux-gnu/enchant/libenchant_myspell.so
00007fc91d2b0000 44K r-x-- /usr/lib/x86_64-linux-gnu/enchant_ispell.libenchant.so so
00007fc91d2bb000 2048K ----- /usr/lib/x86_64-linux-gnu/enchant/libenchant_ispell.soSie können also sehen, dass Dateinamen mit vollständigen Pfaden in der Ausgabe erzeugt werden.
Schlussfolgerung
Wenn Ihre Arbeit den Umgang mit Prozessspeicherkarten beinhaltet, ist dieses Tool genau das Richtige für Sie. In diesem Tutorial haben wir die grundlegende Verwendung dieses Befehls beschrieben. Wenn Sie alles, was wir hier besprochen haben, geübt haben, besuchen Sie die Manpage des Tools, um mehr darüber zu erfahren.