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

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *