Příkazový řádek Linuxu nabízí mnoho nástrojů, které vám pomohou dozvědět se více o procesech, které jsou aktuálně aktivní ve vašem systému. Jedním z takových nástrojů je pmap, který hlásí mapu paměti procesu. V tomto tutoriálu probereme základy pmap pomocí několika snadno pochopitelných příkladů.
Ale než to uděláme, stojí za zmínku, že všechny příklady zde byly testovány na počítači Ubuntu 20.04 LTS.
Příkaz pmap pro Linux
Příkaz pmap v Linuxu umožňuje zobrazit mapu paměti jednoho nebo více než jednoho procesu. Následuje jeho syntaxe:
pmap [volby] pid [...]
A zde je návod, jak to vysvětluje manuálová stránka nástroje:
Příkaz pmap hlásí mapu paměti procesu nebo procesů.
Následuje několik příkladů ve stylu otázek a odpovědí, které by vám měly poskytnout ještě lepší představu o tom, jak funguje příkaz pmap.
Q1. Jak používat pmap?
Základní použití je jednoduché. Stačí provést příkaz 'pmap' bez jakékoli volby. Samozřejmě musíte jako vstup předat procesní PID.
Například jsem použil pmap následujícím způsobem:
pmap 5146
A zde je část výstupu, který byl vyroben:
000055bde4835000 8K R-X-- GEDIT
000055bde4a36000 4K R ---- Gedit
000055bde4a37000 4K RW --- Gedit
000055bde5d32000 139444K RW--[ Anon]
00007FC910000000 132K RW --- [Anon]
00007FC910021000 65404K ----- [Anon]
00007FC918000000 896K RW ---- [ANON]
00007fc91c750000 204K r---- UbuntuMono-R.ttf
00007fc91c783000 644K r-x-- 08.04.09 05.05.04 2.01.00 .so.15.2.0
00007fc91ca24000 20 000 r---- libaspell.so.15.2.0
00007fc91ca29000 4K
00007fc91ca2c000 2044K ----- libenchant_asper.so
00007fc91cc2b000 4k R ---- libenchant_asper.so
00007fc91cc2c000 4K RW ---- libenchant.so
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,0,1
----- libhunspell-1.6.so.0.0.1
00007fc91d0a5000 4K r---- libhunspell-1.6.so.0.0.1
00007fc91d0alib016 Kr..6 hu-l 1 1. 0.0.1
00007fc91d0aa000 16K r-x-- libenchant_myspell.so
00007fc91d0ae000 2048K ----- libenchant_myspell.so_40 Klf-201 000
...
...
Takže tady to je, výstup vám nejprve ukáže název procesu a poté jej následuje s mapou paměti.
Q2. Jak přimět pmap zobrazovat rozšířený výstup?
Chcete-li, aby pmap zobrazoval výstup v rozšířeném formátu, použijte volbu -x příkazového řádku. Například:
pmap -x 5146
Následuje část vytvořeného výstupu:
Adresa 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 0 R ---- Gedit
000055BDE4A37000 4 4 4 RW --- Gedit
000055bde4a37000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RW- 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 ----- [Anon]
00007FC910021000 0 0 0 ----- [Anon]
00007FC918000000 896 896 896 RW --- [ANON ]
00007fc918000000 0 0 0 rw--- [ anon ]
00007fc9180e0000 64640 64640 0 0 0 0007FC9180E0000 0 0 0 ------ [ANON]
00007FC91C750000 204 136 0 R ---- Ubuntumono-r.ttf
00007fc91c750000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 ----- LIBASPELL.SO .15.2.0
00007FC91C824000 0 0 0 ----- LIBASPELL.SO.15.2.0
00007FC91CA24000 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
00007 FC91CA2C000 0 0 0 0 ----- LIBENCHANT_ASPELL.SO
00007FC91CC2B000 4 4 R ---- LIBENCHANT_ASPELL.SO
00007FC91CC2B000 0 0 0 R ---- LIBENCHANT_ASPELL.SO
.. .. .
...
...
Všimněte si, že pokud potřebujete ještě více podrobností, můžete použít volbu -X příkazového řádku.
Q3. Jak nastavit, aby pmap zobrazoval formát zařízení ve výstupu?
To lze provést pomocí volby příkazového řádku -d. Například:
pmap -d 5146
A zde je část vytvořeného výstupu:
Adresa KBYTES režim Offsetova mapování zařízení
000055bde4835000 8 R-X-- 000000000000001000 008:00008 GEDIT
000055BDE4A37000 4 RW --- 0000000000002000 008:00008 GEDIT
000055BDE5D32000 13944 RW ---- 000000000000 [ANON]
00007FC918000000 896 RW --- 000000000000000000:00000 [ANON]
00007FC9180E 0000 64640 ------ 00000000000000 00:00 000 000 [ANON] /> 00007FC91C750000 204 R ---- 00000000000000 008:00008 UBUNTUMONO-R.TTF
00007FC91C783000 644 R-X-- 00000000000000 008:00008 LIBASPELL.SO. 008:00008 libaspell.so.15.2.0
00007fc91ca24000 20 r---- 00000000000a1000 008:00008 libaspell.so.15.2.> 00007FC91CA29000 4 RW --- 00000000000A6000 008:00008 LIBASPELL.SO.15.2.0
00007FC91CA2A000 8 R-X-00000000000000 008:00008 00000202000 0000 0000 .so
00007FC91CC2B000 4 R ---- 00000000001000 008:00008 libenchant_asper.so
00007fc91cc2c000 4 Rw --- 00000000000000 008:0000 00 ° libenchant_hspell.so
00007fc91cc38000 2044 ----- 0000000000b000 008:00008 libenchant_hspell.so
00007fc91ce37000 4 r ---- 00000000000000 0000000000. 008:00008 libenchant_hspell.so
...
...
...
Takže můžete vidět, že do výstupu byl přidán nový sloupec 'zařízení'.
4. Jak odstranit z výstupu pmap záhlaví a zápatí?
Pokud nechcete vidět věci jako názvy sloupců ve výstupu pmap, můžete použít volbu -q příkazového řádku.
Například:
pmap -q -d 5146
Následující výstup byl:
000055bde4835000 8 R-X-- 00000000000000 008:00008 GEDIT
000055BDE4A300000000000 008:00000050050050050050050050050050050050050050050000 00000000 00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000 0000000000 GEDIT
000055BDE5D32000 13944 RW --- 000000000000 000:00000 [ANON]
00007FC9100 000 132 RW --- 0000000000000000 000:00000 [ANON]
000070004 ---- p---- 000000000000 ------ 000000000000-p---- p---- 000000000000-p--c [Anon]
00007fc918000000 896 RW --- 00000000000000 000:00000 [Anon]
00007FC9180E0000 64640 ----- 0000000000000000 000:00000 [ANON]
000077fc91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c91c, 00000000000000 008:00008 Ubuntumono-r.ttf
00007FC91C783000 644 R-X-- 00000000000000 008:00008 Libasperl.So.15.2.0
00007FC91C824000 2048 ------ 008:0000881000 008:0000881 000 008:000088801000 008:
00007fc91ca24000 20 r---- 00000000000a1000 008:00008 libaspell.so.15.2.0
00007fc91ca29000 00.0 00.0007 0w 0 0 0 0 00.00 .15.2.0
00007FC91CA2A000 8 R-X-- 00000000000000 008:00008 LIBENCHANT_ASPELL.SO
00007FC91CA2C000 2044 ----- 0000000000 008:00008 LIBENCHANT_ASPELL.SO
008:00008 libenchant_asperl.so
00007fc91cc2c000 4 RW --- 00000000002000 008:000000 000000:0000 00 00 00 00 00 00008.SONDISTIONS 000000000000B000 008:00008 LIBENCHANT_HSPELL.SO
00007FC91CE37000 4 R ---- 0000000000A000 008:00008.SO
Takže můžete vidět, že záhlaví bylo odstraněno z výstupu.
O5. Jak zajistit, aby pmap zobrazoval ve výstupu úplné cesty?
V případě, že chcete, aby pmap zobrazoval úplnou cestu k souborům ve sloupci mapování, můžete použít volbu -p příkazového řádku.
Například:
pmap -p 5146
A zde je výstup vytvořený tímto příkazem:
5146: gedit
000055bde4835000 8 000 r-x-- /usr/bin/gedit
000055bde4a36000 4K r----- /usr/3000005. /7000005. /bin /gedit
000055bde5d32000 13944k RW --- [anon]
00007fc910000000 132K RW --- [Anon]
00007FC910021000 65404K ----- [Anon]
00007fc9180000 896k 896k918000000 896k918000000 896k918000000007FC918000000 rw--- [ anon ]
00007fc9180e0000 64640K ----- [ anon ]
00007fc91c750000 204K r---- /usr/share-Rubuntu/Monttu />00007fc91c783000 644 kB r-x-- /usr/lib/x86_64-linux-gnu/libaspell.so.15.2.0
00007fc91c824000 2048K/lib-us8ux----64 ... linux-gnu/libaspell.so.15.2.0
00007fc91ca2a000 8K r-x-- /usr/lib/x86_64-linux-gnu/enchant/libenchant_aspell.so --
00007 000007 /004 /usr4/20-004 lib/x86_64-linux-gnu/enchant/libenchant_aspell. so
00007fc91cc2b000 4K r---- /usr/lib/x86_64-linux-gnu/enchant/libenchant_aspell.so
00007fc91cc2c000 8 4K-linusrx-/libx-6 /libenchant_aspell.so
00007fc91cc2d000 44 kB r-x-- /usr/lib/x86_64-linux-gnu/enchant/libenchant_hspell.so
00007fc91cc38000 K---gnuxu -/6-gnu- 204 /enchant/libenchant_hspell.so
00007fc91ce37000 4K r---- /usr/lib/x86_64-linux-gnu/enchant/libenchant_hspell.so
00007fc91ce38000/lib-w/xr 6 linux-gnu/enchant/libenchant_hspell.so
00007fc91ce3b000 428 kB r-x-- /usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1 --f-2009007 usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91d0a5000 4K r---- /usr/lib/x86_64-linux-gnu/libhunspell.0.1
00007fc91d0a6000 16 kB rw--- /usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91d0aa000 /x-/-x-nus/lib-x-/8-x-g 1.6. enchant/libenchant_myspell.so
00007f c91d0ae000 2048K ----- /usr/lib/x86_64-linux-gnu/enchant/libenchant_myspell.so
00007fc91d2ae000 4K r---- /usr/lib-linux86.so
00007fc91d2af000 4K rw--- /usr/lib/x86_64-linux-gnu/enchant/libenchant_myspell.so
00007fc91d2b0000 8 44K/linusr/libl_6-nu so
00007fc91d2bb000 2048K ----- /usr/lib/x86_64-linux-gnu/enchant/libenchant_ispell.so
Můžete tedy vidět, že ve výstupu jsou vytvářeny názvy souborů s úplnými cestami.
Závěr
Pokud vaše práce zahrnuje práci s mapami paměti procesů, tento nástroj je pro vás. V tomto tutoriálu jsme popsali základní použití tohoto příkazu. Jakmile dokončíte procvičování toho, co jsme zde probrali, přejděte na manuálovou stránku nástroje, kde se o něm dozvíte více.