En esta entrada vamos a revisar comandos que nos servirán para analizar problemas que requieran: bien saber que procesos tienen abierto un fichero, bien que ficheros tiene abiertos un proceso en Solaris y GNU/Linux.
1. Ver que procesos tienen abierto un fichero.
GNU/Linux – Ver que procesos usan una librería /lib/x86_64-linux-gnu/libm-2.19.so:
$ lsof /lib/x86_64-linux-gnu/libm-2.19.so COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME gnome-ses 1794 dudumarina mem REG 8,1 1071552 811579 /lib/x86_64-linux-gnu/libm-2.19.so ibus-ui-g 1890 dudumarina mem REG 8,1 1071552 811579 /lib/x86_64-linux-gnu/libm-2.19.so ibus-x11 1892 dudumarina mem REG 8,1 1071552 811579 /lib/x86_64-linux-gnu/libm-2.19.so ...
Solaris – Procesos que tienen abierto el fichero (directorio actual):
fuser .
2. En el otro lado, también resulta interesante saber que ficheros tiene abiertos un proceso.
Los comandos /usr/sbin/lsof -p (GNU/Linux) y pfiles (Solaris) devuelven una lista con los ficheros que tiene abiertos el proceso que se le pasa como argumento.
Linux:
ls -ltr /proc/PID/fd | wc -l lsof -p PID
Solaris:
pfiles PID
En este sentido, una funcionalidad muy útil, sería por ejemplo conocer los ficheros que tiene abiertos un programa implementado por una tercera parte (como los ficheros *.jar de un proceso java programado por un tercero).
Para finalizar, en GNU/Linux lsof -i:PORT devuelve los PID’s de procesos que usan el puerto pasado como parámetro (combinar con netstat -na | grep PORT)
/usr/sbin/lsof -i:PORT
Saludos desde el otro lado de la pantalla negra.
