Linux pmap Kommando-Tutorial für Anfänger (5 Beispiele)
Die Linux-Kommandozeile bietet eine Menge Werkzeuge, die Ihnen helfen, mehr über die Prozesse zu erfahren, die derzeit in Ihrem System aktiv sind. Ein solches Dienstprogramm ist pmap, das die Prozess-Speicherabbildung meldet. In diesem Tutorial werden wir die Grundlagen von pmap anhand einiger leicht verständlicher Beispiele diskutieren.
Aber bevor wir das tun, ist es erwähnenswert, dass alle Beispiele hier auf einer Ubuntu 18.04 LTS-Maschine getestet wurden.
Linux-Pmap-Befehl
Der pmap-Befehl unter Linux lässt Sie die Speicherzuordnung eines oder mehrerer Prozesse sehen. Die Syntax ist wie folgt:
pmap [options] pid [...]
Und so erklärt es die Manpage des Tools:
The pmap command reports the memory map of a process or processes.
Nachfolgend finden Sie einige Beispiele im Q&A-Stil, die Ihnen eine noch bessere Vorstellung davon geben sollen, wie der Befehl pmap funktioniert.
Q1. Wie wird pmap verwendet?
Die grundlegende Verwendung ist einfach. Führen Sie einfach den ‚pmap‘-Befehl ohne jede Option aus. Natürlich müssen Sie eine Prozess-PID als Eingabe übergeben.
Zum Beispiel habe ich pmap auf die folgende Weise verwendet:
pmap 5146
Und hier ist ein Teil des Outputs, der produziert wurde:
5146: gedit 000055bde4835000 8K r-x-- gedit 000055bde4a36000 4K r---- gedit 000055bde4a37000 4K rw--- gedit 000055bde5d32000 13944K rw--- [ anon ] 00007fc910000000 132K rw--- [ anon ] 00007fc910021000 65404K ----- [ anon ] 00007fc918000000 896K rw--- [ anon ] 00007fc9180e0000 64640K ----- [ anon ] 00007fc91c750000 204K r---- UbuntuMono-R.ttf 00007fc91c783000 644K r-x-- libaspell.so.15.2.0 00007fc91c824000 2048K ----- libaspell.so.15.2.0 00007fc91ca24000 20K r---- libaspell.so.15.2.0 00007fc91ca29000 4K rw--- libaspell.so.15.2.0 00007fc91ca2a000 8K r-x-- libenchant_aspell.so 00007fc91ca2c000 2044K ----- libenchant_aspell.so 00007fc91cc2b000 4K r---- libenchant_aspell.so 00007fc91cc2c000 4K rw--- libenchant_aspell.so 00007fc91cc2d000 44K r-x-- libenchant_hspell.so 00007fc91cc38000 2044K ----- libenchant_hspell.so 00007fc91ce37000 4K r---- libenchant_hspell.so 00007fc91ce38000 12K rw--- libenchant_hspell.so 00007fc91ce3b000 428K r-x-- libhunspell-1.6.so.0.0.1 00007fc91cea6000 2044K ----- 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---- libenchant_myspell.so ... ... ...
Also, da haben Sie es, die Ausgabe zeigt Ihnen zuerst den Namen des Prozesses und dann folgt die Speicherübersicht.
Q2. Wie lässt sich die erweiterte Ausgabe von pmap anzeigen?
Um pmap show im erweiterten Format auszugeben, verwenden Sie die Kommandozeilenoption -x. Zum Beispiel:
pmap -x 5146
Nachfolgend ist ein Teil des produzierten Outputs aufgeführt:
5146: gedit Address Kbytes RSS Dirty Mode Mapping 000055bde4835000 8 4 0 r-x-- gedit 000055bde4835000 0 0 0 r-x-- gedit 000055bde4a36000 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 rw--- [ anon ] 00007fc910021000 65404 0 0 ----- [ anon ] 00007fc910021000 0 0 0 ----- [ anon ] 00007fc918000000 896 896 896 rw--- [ anon ] 00007fc918000000 0 0 0 rw--- [ anon ] 00007fc9180e0000 64640 0 0 ----- [ anon ] 00007fc9180e0000 0 0 0 ----- [ anon ] 00007fc91c750000 204 136 0 r---- UbuntuMono-R.ttf 00007fc91c750000 0 0 0 r---- UbuntuMono-R.ttf 00007fc91c783000 644 472 0 r-x-- libaspell.so.15.2.0 00007fc91c783000 0 0 0 r-x-- libaspell.so.15.2.0 00007fc91c824000 2048 0 0 ----- libaspell.so.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 r---- libaspell.so.15.2.0 00007fc91ca29000 4 4 4 rw--- libaspell.so.15.2.0 00007fc91ca29000 0 0 0 rw--- libaspell.so.15.2.0 00007fc91ca2a000 8 8 0 r-x-- libenchant_aspell.so 00007fc91ca2a000 0 0 0 r-x-- libenchant_aspell.so 00007fc91ca2c000 2044 0 0 ----- libenchant_aspell.so 00007fc91ca2c000 0 0 0 ----- libenchant_aspell.so 00007fc91cc2b000 4 4 4 r---- libenchant_aspell.so 00007fc91cc2b000 0 0 0 r---- libenchant_aspell.so ... ... ...
Beachten Sie, dass Sie, wenn Sie noch mehr Details benötigen, die Kommandozeilenoption -X verwenden können.
Q3. Wie kann man pmap dazu bringen, bei der Ausgabe das Geräteformat anzuzeigen?
Dies kann mit der Kommandozeilenoption -d geschehen. Zum Beispiel:
pmap -d 5146
Und hier ist ein Teil des produzierten Outputs:
5146: gedit Address Kbytes Mode Offset Device Mapping 000055bde4835000 8 r-x-- 0000000000000000 008:00008 gedit 000055bde4a36000 4 r---- 0000000000001000 008:00008 gedit 000055bde4a37000 4 rw--- 0000000000002000 008:00008 gedit 000055bde5d32000 13944 rw--- 0000000000000000 000:00000 [ anon ] 00007fc910000000 132 rw--- 0000000000000000 000:00000 [ anon ] 00007fc910021000 65404 ----- 0000000000000000 000:00000 [ 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-- 0000000000000000 008:00008 libaspell.so.15.2.0 00007fc91c824000 2048 ----- 00000000000a1000 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 008:00008 libenchant_aspell.so 00007fc91ca2c000 2044 ----- 0000000000002000 008:00008 libenchant_aspell.so 00007fc91cc2b000 4 r---- 0000000000001000 008:00008 libenchant_aspell.so 00007fc91cc2c000 4 rw--- 0000000000002000 008:00008 libenchant_aspell.so 00007fc91cc2d000 44 r-x-- 0000000000000000 008:00008 libenchant_hspell.so 00007fc91cc38000 2044 ----- 000000000000b000 008:00008 libenchant_hspell.so 00007fc91ce37000 4 r---- 000000000000a000 008:00008 libenchant_hspell.so 00007fc91ce38000 12 rw--- 000000000000b000 008:00008 libenchant_hspell.so ... ... ...
So können Sie sehen, dass eine neue Spalte ‚Gerät‘ in der Ausgabe hinzugefügt wurde.
Q4. Wie kann man die pmap-Ausgabe von Kopf- und Fußzeilen entfernen?
Wenn Sie Dinge wie Spaltennamen in der pmap-Ausgabe nicht sehen wollen, können Sie die Kommandozeilenoption -q verwenden.
Zum Beispiel:
pmap -q -d 5146
Nachfolgend die Ausgabe:
5146: gedit 000055bde4835000 8 r-x-- 0000000000000000 008:00008 gedit 000055bde4a36000 4 r---- 0000000000001000 008:00008 gedit 000055bde4a37000 4 rw--- 0000000000002000 008:00008 gedit 000055bde5d32000 13944 rw--- 0000000000000000 000:00000 [ anon ] 00007fc910000000 132 rw--- 0000000000000000 000:00000 [ anon ] 00007fc910021000 65404 ----- 0000000000000000 000:00000 [ 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-- 0000000000000000 008:00008 libaspell.so.15.2.0 00007fc91c824000 2048 ----- 00000000000a1000 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 008:00008 libenchant_aspell.so 00007fc91ca2c000 2044 ----- 0000000000002000 008:00008 libenchant_aspell.so 00007fc91cc2b000 4 r---- 0000000000001000 008:00008 libenchant_aspell.so 00007fc91cc2c000 4 rw--- 0000000000002000 008:00008 libenchant_aspell.so 00007fc91cc2d000 44 r-x-- 0000000000000000 008:00008 libenchant_hspell.so 00007fc91cc38000 2044 ----- 000000000000b000 008:00008 libenchant_hspell.so 00007fc91ce37000 4 r---- 000000000000a000 008:00008 libenchant_hspell.so 00007fc91ce38000 12 rw--- 000000000000b000 008:00008 libenchant_hspell.so
So können Sie sehen, dass der Header aus der Ausgabe entfernt wurde.
Q5. Wie bringt man pmap dazu, volle Pfade in der Ausgabe anzuzeigen?
Wenn Sie möchten, dass pmap den vollständigen Pfad zu den Dateien in der Mapping-Spalte anzeigt, können Sie die Kommandozeilenoption -p verwenden.
Zum Beispiel:
pmap -p 5146
Und hier ist die Ausgabe, die durch diesen Befehl erzeugt wird:
5146: gedit 000055bde4835000 8K r-x-- /usr/bin/gedit 000055bde4a36000 4K r---- /usr/bin/gedit 000055bde4a37000 4K rw--- /usr/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/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 00007fc91d0ae000 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/libenchant_ispell.so 00007fc91d2bb000 2048K ----- /usr/lib/x86_64-linux-gnu/enchant/libenchant_ispell.so
So können Sie sehen, dass bei der Ausgabe Dateinamen mit vollständigen Pfaden erzeugt werden.
Fazit
Wenn Sie sich bei Ihrer Arbeit mit Prozess-Speicherabbildungen beschäftigen, ist dieses Tool für Sie geeignet. In diesem Tutorial haben wir die grundlegende Verwendung dieses Befehls beschrieben. Wenn Sie mit den Übungen, die wir hier besprochen haben, fertig sind, gehen Sie zur Manpage des Tools, um mehr darüber zu erfahren.