Tutorial de comandos pmap de Linux para principiantes (5 ejemplos)

La línea de comandos de Linux ofrece muchas herramientas que lo ayudan a saber más sobre los procesos que están actualmente activos en su sistema. Una de esas utilidades es pmap, que informa sobre el mapa de memoria del proceso. En este tutorial, discutiremos los conceptos básicos de pmap utilizando algunos ejemplos fáciles de entender.
Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos aquí se han probado en una máquina con Ubuntu 20.04 LTS.
Comando pmap de Linux
El comando pmap en Linux le permite ver el mapa de memoria de uno o más procesos. A continuación se muestra su sintaxis:
pmap [options] pid [...]
Y así es como lo explica la página de manual de la herramienta:
The pmap command reports the memory map of a process or processes.
Los siguientes son algunos ejemplos de estilo de preguntas y respuestas que deberían darle una idea aún mejor de cómo funciona el comando pmap.
Q1. ¿Cómo usar pmap?
El uso básico es simple. Simplemente ejecute el comando ‘pmap’ sin ninguna opción. Por supuesto, debe pasar un PID de proceso como entrada.
Por ejemplo, usé pmap de la siguiente manera:
pmap 5146
Y aquí hay una parte de la salida que se produjo:
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 ... ... ...
Así que ahí lo tienes, la salida primero te muestra el nombre del proceso y luego lo sigue con el mapa de memoria.
Q2. ¿Cómo hacer que pmap muestre una salida extendida?
Para hacer que pmap muestre la salida en formato extendido, use la opción de línea de comando -x. Por ejemplo:
pmap -x 5146
A continuación se muestra una parte de la salida producida:
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 ... ... ...
Tenga en cuenta que si necesita aún más detalles, puede usar la opción de línea de comando -X.
Q3. ¿Cómo hacer que pmap muestre el formato del dispositivo en la salida?
Esto se puede hacer usando la opción de línea de comandos -d. Por ejemplo:
pmap -d 5146
Y aquí hay una parte de la salida producida:
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 ... ... ...
Entonces puede ver que se agregó una nueva columna ‘dispositivo’ en la salida.
Si no quiere ver cosas como los nombres de las columnas en la salida de pmap, puede usar la opción de línea de comandos -q.
Por ejemplo:
pmap -q -d 5146
La siguiente fue la salida:
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
Entonces puede ver que el encabezado se eliminó de la salida.
P5. ¿Cómo hacer que pmap muestre rutas completas en la salida?
En caso de que desee que pmap muestre la ruta completa a los archivos en la columna de asignación, puede usar la opción de línea de comando -p.
Por ejemplo:
pmap -p 5146
Y aquí está la salida producida por este comando:
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
Entonces puede ver que los nombres de archivo con rutas completas se producen en la salida.
Conclusión
Si su trabajo implica manejar mapas de memoria de procesos, esta herramienta es para usted. En este tutorial, hemos descrito el uso básico de este comando. Una vez que haya terminado de practicar todo lo que hemos discutido aquí, diríjase a la herramienta página man para aprender más al respecto.