Lsof (ls Open Files) o listado de archivos abiertos es una gran aplicación pero muy desconocida y que nos puede sacar de muchas dudas o apuros.
Lsof es una herramienta muy completa, por lo que en éste mini – manual solo se muestra la información que más vamos a necesitar.
NOTA: Si se quiere saber más sobre el uso de lsof ejecutad “man lsof “.
Instalación.
Lsof no es un comando propiament e dicho de Linux, pero con apt-get install lsoft podemos instalarlo.
Utilidad de lsof

Como he dicho antes, lsof muestra los archivos y procesos abiertos en el momento del chequeo, por lo que nos será de utilidad para llevar un seguimiento de seguridad o de procesos bloqueados.
A continuación expongo algunos casos prácticos:
Desmontando un CD rebelde.
# umount /cdrom
umount: /cdrom: device is busy
Vaya, ¡¿por qué no se desmonta y me dice que el dispositivo está ocupado?! No se ha desmontado porque algun proceso esta haciendo uso del CDROM y hasta que no lo libere no podremos desmontarlo, el problema es que desconocemos que aplicacion se encuent ra usando dicho CDROM, mediante lsof podremos conocerlo.
# lsof +D /cdrom
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
konqueror 621 zx80 cwd DIR 3,64 2048 57344 /cdrom

lsof nos dice que el proceso konqueror está usando el directorio /cdrom con el usuario zx80.

La solución es sencilla entoces, basta con cerrar konqueror y problema resuelto. Para los que usamos mucho la consola y llegamos a tener unas cuantas sesiones abiertas pasa que en vez de konqueror puede salir bash.

Esto es debido a que alguna de las consolas está dentro del directorio activo del cd- rom, por lo que bastaría salirse del directorio de trabajo del CD o cerrar ese bash.
# kill 621
Ya podemos desmontar.
Quien está detrás de una conexión.
Esta vez usamos la herramienta netstat. Para quien no conozca esta herramient a decir que es un monitor de red. Nos dirá qué conexiones activas tenemos y mucha información sobre ellas. Vamos a ver qué conexiones tenemos activas:
# netstat – n
Active Internet connections (only servers)
Proto Recv- Q Send- Q Local Address Foreign Address State
tcp 0 0 *:printer *:* LISTEN
tcp 0 0 localhost:www *:* LISTEN
tcp 0 0 *:6000 *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN

Nos mues tra información sobre algunos puertos en espera (Listen) pero desconocemos qué aplicación está detrás. Me llama la atención el puerto TCP 6000, así que voy a ver quien está detrás:
# lsoft – i :6000
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
X 279 root 3u Ipv4 349 TCP *:6000 (LISTEN)

Vemos que la aplicacion X es la culpable de que el puer to 6000 esté abierto y a la espera.

Qué procesos están usando un directorio.
Una de las utilidades que más se usan es averiguar qué aplicaciones están trabajando en un directorio concreto. Se usa esta opción sobre todo para vigilar el uso de troyanos o espias. SI quisiera saber qué procesos están usando mi directorio pondría lo siguiente:
# lsof +D /home / trucoslinux
xmms 7680 zx80 cwd DIR 3,67 4096 1175041 /home / trucoslinux
xmms 7681 zx80 cwd DIR 3,67 4096 1175041 /home / trucoslinux
nedit 15073 zx80 cwd DIR 3,67 4096 1175041 /home / trucoslinux
wterm 15316 root cwd DIR 3,67 4096 1175041 /home / trucoslinux

Vemos que mi directorio HOME lo están usando 2 usuarios, yo mismo y root, y aparte me muest ra
las aplicaciones que hacen uso del directorio, Genial !!
Una versión recortada es el uso de la “d” en minuscula, que solo nos dará la aplicación en curso, sin
los archivos que dicha aplicación esté usando.
# lsof +D /home / trucoslinux
xmms 7680 zx80 cwd DIR 3,67 4096 1175041 /home / trucoslinux
xmms 7681 zx80 cwd DIR 3,67 4096 1175041 /home / trucoslinux
nedit 15073 zx80 cwd DIR 3,67 4096 1175041 /home / trucoslinux
wterm 15316 root cwd DIR 3,67 4096 1175041 /home /  trucoslinux

Otros usos.

Estos son otros usos de la herramienta lsof, que aunque son algo menos usados nos pueden
sacar de algun apuro o duda.
# lsof – g n: Donde n es un ID de grupo. Esto muest ra los archivos abiertos por un grupo que
queramos. Si quisieramos ver los archivos de varios grupos a la vez, los separarñiamos por comas:
# lsof – g wheel,users
# lsof – u n: Donde n es un ID de usuario, lo que nos mostrará los archivos abiertos por ese
usuario. Al igual que con los grupos, se pueden especificar varios usuarios de una vez.
# lsof – l: Para no convertir el ID a nombre de usuario, útil en casos de logeos corruptos o sistemas
lentos.
#lsof – N: Nos muestra los archivos NFS abiertos.