Anteriormente demostré el uso de la herramienta fuser
para listar los procesos utilizando cierto archivo. Esta herramienta discrimina qué tipo de uso se le está dando al archivo, y entre ellos, permite determinar si un archivo ha sido cargado como módulo mapeado en memoria o como librería compartida.
Veamos cómo funciona tomando, la libc
como ejemplo. La libc
es la librería estándar del lenguaje C y es utilizada por casi todo programa que ha sido desarrollado en C. La shell Bash es unpo de los muchos programas escritos en C, con ldd
es posible listar todas las librerías compartidas de las cuales depende un ejecutable:
emi@hal9000:~$ which bash /bin/bash emi@hal9000:~$ ldd /bin/bash linux-vdso.so.1 (0x00007fff749ef000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f2ded2a9000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2ded0a5000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2decd06000) /lib64/ld-linux-x86-64.so.2 (0x00007f2ded4d3000)
Se observa que, entre las diferentes librerías dinámicas que enlaza el binario, se encuentra listada la libc
, cargada desde el archivo /lib/x86_64-linux-gnu/libc.so.6
. Sin embargo, se trata de un enlace simbólico a la versión instalada:
emi@hal9000:~$ ll /lib/x86_64-linux-gnu/libc.so.6 lrwxrwxrwx 1 root root 12 Feb 6 2019 /lib/x86_64-linux-gnu/libc.so.6 -> libc-2.24.so emi@hal9000:~$ file /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc.so.6: symbolic link to libc-2.24.so emi@hal9000:~$ file /lib/x86_64-linux-gnu/libc-2.24.so /lib/x86_64-linux-gnu/libc-2.24.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=775143e680ff0cd4cd51cce1ce8ca216e635a1d6, for GNU/Linux 2.6.32, stripped
Ahora bien, para saber qué procesos en ejecución están haciendo uso de esta librería compartida, es posible recurrir a la herramienta fuser
:
emi@hal9000:~$ fuser -v /lib/x86_64-linux-gnu/libc-2.24.so USER PID ACCESS COMMAND /lib/x86_64-linux-gnu/libc-2.24.so: emi 2087 ....m sh emi 2130 ....m dbus-launch emi 2131 ....m dbus-daemon emi 2176 ....m xfce4-session emi 2178 ....m at-spi-bus-laun emi 2183 ....m dbus-daemon emi 2185 ....m at-spi2-registr emi 2189 ....m xfconfd emi 2196 ....m xfwm4 emi 2197 ....m Thunar emi 2199 ....m xfce4-panel emi 2200 ....m xfsettingsd emi 2202 ....m xfdesktop emi 2210 ....m xfce4-terminal emi 2211 ....m owncloud emi 2216 ....m xfce4-power-man emi 2247 ....m gvfsd emi 2392 ....m panel-6-systray emi 2393 ....m panel-2-actions emi 2394 ....m panel-17-pulsea emi 2403 ....m gvfs-udisks2-vo emi 2406 ....m pulseaudio emi 2427 ....m bash emi 2441 ....m polkit-gnome-au emi 2444 ....m xscreensaver emi 2450 ....m applet.py emi 2551 ....m firefox-esr emi 2605 ....m Web Content emi 2648 ....m Web Content emi 2671 ....m Web Content emi 2673 ....m Web Content emi 3359 ....m gvfsd-metadata emi 3363 ....m gvfsd-trash emi 3583 ....m geany emi 3593 ....m bash
La opción -v
permite listar todos los procesos de forma similar a ps
. Cada línea corresponde con un proceso en ejecución. Se muestra el nombre de usuario con el cual corre el proceso, el PID, y el nombre del archivo binario o comando.
En esta salida, la columna "ACCESS" determina el tipo de acceso. Todos aquellos procesos que estén usando el archivo como librería compartida o módulo cargado, aparecen listados con una letra m
en esta columna.
Si se desea, es posible filtrar la salida con grep
:
emi@hal9000:~$ fuser -v /lib/x86_64-linux-gnu/libc-2.24.so 2>&1 | grep '....m' emi 2087 ....m sh emi 2130 ....m dbus-launch emi 2131 ....m dbus-daemon emi 2176 ....m xfce4-session emi 2178 ....m at-spi-bus-laun emi 2183 ....m dbus-daemon emi 2185 ....m at-spi2-registr emi 2189 ....m xfconfd emi 2196 ....m xfwm4 emi 2197 ....m Thunar emi 2199 ....m xfce4-panel emi 2200 ....m xfsettingsd emi 2202 ....m xfdesktop emi 2210 ....m xfce4-terminal emi 2211 ....m owncloud emi 2216 ....m xfce4-power-man emi 2247 ....m gvfsd emi 2392 ....m panel-6-systray emi 2393 ....m panel-2-actions emi 2394 ....m panel-17-pulsea emi 2403 ....m gvfs-udisks2-vo emi 2406 ....m pulseaudio emi 2427 ....m bash emi 2441 ....m polkit-gnome-au emi 2444 ....m xscreensaver emi 2450 ....m applet.py emi 2551 ....m firefox-esr emi 2605 ....m Web Content emi 2648 ....m Web Content emi 2671 ....m Web Content emi 2673 ....m Web Content emi 3359 ....m gvfsd-metadata emi 3363 ....m gvfsd-trash emi 3583 ....m geany emi 3593 ....m bash emi 4937 ....m tumblerd emi 4966 ....m grep