Lsof es una potente herramienta disponible en la shell de Linux que lista los ficheros abiertos en la máquina. Partiendo de esta base, podemos conocer rápidamente que ficheros mantiene abiertos un determinado proceso (PID), también muestra información adicional como el puerto utilizado por dichos servicios/ficheros, sockets en uso, etc.

Lanzando el comando lsof sin ningún parámetro listará todos los ficheros abiertos en la máquina en ese momento, no es recomendable ya que como imaginaréis saldrán una cantidad enorme.

Personalmente, lo que más utilizo en el día a día es lo siguiente:

Listar los ficheros abiertos de un determinado PID:

lsof -p PID

Ejemplo, vamos a listar los ficheros abiertos de un PID perteneciente a apache, también veremos los sockets y puertos en los que escucha el proceso:

lsof -p 15826
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 15826 apache cwd DIR 8,2 4096 2 /
httpd 15826 apache rtd DIR 8,2 4096 2 /
httpd 15826 apache txt REG 8,2 312340 6764473 /usr/sbin/httpd
httpd 15826 apache DEL REG 8,2 6761188 /usr/lib/libldap-2.3.so.0.2.15.#prelink#.MN10ei
httpd 15826 apache mem REG 8,2 1009712 8585265 /lib/libdb-4.3.so
httpd 15826 apache mem REG 8,2 125744 8589007 /lib/libpthread-2.5.so
httpd 15826 apache mem REG 8,2 15704 8585423 /lib/libuuid.so.1.2
httpd 15826 apache mem REG 8,2 6764446 /usr/lib/libpq.so.4.1 (path inode=6765089)
httpd 15826 apache mem REG 8,2 101404 8589003 /lib/libnsl-2.5.so
httpd 15826 apache mem REG 8,2 133056 8589019 /lib/libexpat.so.0.5.0
httpd 15826 apache mem REG 8,2 190712 6764712 /usr/lib/libgssapi_krb5.so.2.2
httpd 15826 apache mem REG 8,2 16428 8589004 /lib/libdl-2.5.so
httpd 15826 apache mem REG 8,2 281116 8585251 /lib/libssl.so.0.9.8b
httpd 15826 apache mem REG 8,2 75028 6751429 /usr/lib/libz.so.1.2.3
httpd 15826 apache mem REG 8,2 33648 6764709 /usr/lib/libkrb5support.so.0.1
httpd 15826 apache mem REG 8,2 7880 8585403 /lib/libkeyutils-1.2.so
httpd 15826 apache mem REG 8,2 5500 6981504 /usr/lib/httpd/modules/mod_authn_file.so
httpd 15826 apache mem REG 8,2 1597968 8588999 /lib/libc-2.5.so
httpd 15826 apache mem REG 8,2 9628 6981376 /usr/lib/httpd/modules/mod_auth_basic.so
httpd 15826 apache mem REG 8,2 9632 6981500 /usr/lib/httpd/modules/mod_authn_alias.so
httpd 15826 apache mem REG 8,2 5500 6981501 /usr/lib/httpd/modules/mod_authn_anon.so
httpd 15826 apache mem REG 8,2 5500 6981381 /usr/lib/httpd/modules/mod_authn_dbm.so
httpd 15826 apache mem REG 8,2 5504 6981503 /usr/lib/httpd/modules/mod_authn_default.so
httpd 15826 apache mem REG 8,2 9628 6981509 /usr/lib/httpd/modules/mod_authz_host.so
httpd 15826 apache mem REG 8,2 5500 6981511 /usr/lib/httpd/modules/mod_authz_user.so
httpd 15826 apache mem REG 8,2 9600 6981510 /usr/lib/httpd/modules/mod_authz_owner.so
httpd 15826 apache mem REG 8,2 9668 6981508 /usr/lib/httpd/modules/mod_authz_groupfile.so
httpd 15826 apache mem REG 8,2 385180 6757974 /usr/lib/libsqlite3.so.0.8.6
httpd 15826 apache mem REG 8,2 600052 6764711 /usr/lib/libkrb5.so.3.3
httpd 15826 apache mem REG 8,2 157304 6764710 /usr/lib/libk5crypto.so.3.1
httpd 15826 apache mem REG 8,2 9628 6981506 /usr/lib/httpd/modules/mod_authz_dbm.so
httpd 15826 apache mem REG 8,2 5472 6981507 /usr/lib/httpd/modules/mod_authz_default.so
httpd 15826 apache mem REG 8,2 26112 6981505 /usr/lib/httpd/modules/mod_authnz_ldap.so
httpd 15826 apache mem REG 8,2 5536 6981416 /usr/lib/httpd/modules/mod_logio.so
httpd 15826 apache mem REG 8,2 5496 6981403 /usr/lib/httpd/modules/mod_env.so
httpd 15826 apache mem REG 8,2 17980 6981522 /usr/lib/httpd/modules/mod_ext_filter.so
httpd 15826 apache mem REG 8,2 22348 6981532 /usr/lib/httpd/modules/mod_mime_magic.so
httpd 15826 apache mem REG 8,2 9660 6981521 /usr/lib/httpd/modules/mod_expires.so
httpd 15826 apache mem REG 8,2 17916 6981399 /usr/lib/httpd/modules/mod_deflate.so
httpd 15826 apache mem REG 8,2 13820 6981408 /usr/lib/httpd/modules/mod_headers.so
....
etc...

Véis que muestra información de gran utilidad, como el servicio/comando al que pertenece el proceso (COMMAND), el PID, usuario que lo está ejecutando (USER), el descriptor de archivo (FD), tipo de nodo asociado con el fichero (TYPE), número de dispositivo (DEVICE), el tamaño del fichero y el nombre/ruta al mismo.

Recomiendo ver las páginas man (man lsof) para ver una descripción extendida de cada columna.

Listar ficheros abiertos en un dispositivo o partición:

Para evitar el típico fallo de no poder desmontarlo porque la partición está en uso:

lsof /particion

Comprobar servicios/puertos que están escuchando:

lsof -i -nP
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
portmap 2139 rpc 3u IPv4 5220 UDP *:111
portmap 2139 rpc 4u IPv4 5221 TCP *:111 (LISTEN)
rpc.statd 2164 rpcuser 3u IPv4 5285 UDP *:647
rpc.statd 2164 rpcuser 6u IPv4 5264 UDP *:644
rpc.statd 2164 rpcuser 7u IPv4 5297 TCP *:650 (LISTEN)
sendmail 2437 root 4u IPv4 1484615119 TCP 127.0.0.1:25 (LISTEN)
mysqld 2753 mysql 10u IPv4 615583079 TCP *:3306 (LISTEN)
httpd 3063 root 3u IPv6 583456545 TCP *:80 (LISTEN)
httpd 3063 root 5u IPv6 583456550 TCP *:443 (LISTEN)

Listar ficheros abiertos de un determinado usuario:

lsof -u alex

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
gnome-key 2862 alex cwd DIR 8,3 4096 107912 /var/lib/gdm
gnome-key 2862 alex rtd DIR 8,3 4096 2 /
gnome-key 2862 alex txt REG 8,3 588132 6979 /usr/bin/gnome-keyring-daemon
gnome-key 2862 alex mem REG 8,3 42974 76307 /usr/share/locale-langpack/es/LC_MESSAGES/glib20.mo
gnome-key 2862 alex mem REG 8,3 133662 76393 /usr/share/locale-langpack/es/LC_MESSAGES/libc.mo
gnome-key 2862 alex mem REG 8,3 42504 6194 /lib/tls/i686/cmov/libnss_files-2.9.so
gnome-key 2862 alex mem REG 8,3 38444 6198 /lib/tls/i686/cmov/libnss_nis-2.9.so
gnome-key 2862 alex mem REG 8,3 87804 6188 /lib/tls/i686/cmov/libnsl-2.9.so
gnome-key 2862 alex mem REG 8,3 30436 6190 /lib/tls/i686/cmov/libnss_compat-2.9.so
gnome-key 2862 alex mem REG 8,3 30765 76316 /usr/share/locale-langpack/es/LC_MESSAGES/gnome-keyring.mo
gnome-key 2862 alex mem REG 8,3 256316 13609 /usr/lib/locale/es_ES.utf8/LC_CTYPE
gnome-key 2862 alex mem REG 8,3 54 13614 /usr/lib/locale/es_ES.utf8/LC_NUMERIC
gnome-key 2862 alex mem REG 8,3 2378 13510 /usr/lib/locale/es_ES.utf8/LC_TIME
gnome-key 2862 alex mem REG 8,3 962106 13608 /usr/lib/locale/es_ES.utf8/LC_COLLATE
gnome-key 2862 alex mem REG 8,3 54740 2599 /lib/libgcc_s.so.1
gnome-key 2862 alex mem REG 8,3 149328 6185 /lib/tls/i686/cmov/libm-2.9.so
gnome-key 2862 alex mem REG 8,3 950424 10246 /usr/lib/libstdc++.so.6.0.10
gnome-key 2862 alex mem REG 8,3 99972 2663 /lib/libselinux.so.1
gnome-key 2862 alex mem REG 8,3 9676 6183 /lib/tls/i686/cmov/libdl-2.9.so
gnome-key 2862 alex mem REG 8,3 11468 2603 /lib/libgpg-error.so.0.3.0
gnome-key 2862 alex mem REG 8,3 608280 10215 /usr/lib/libsmbios.so.2.1.0
gnome-key 2862 alex mem REG 8,3 117092 9550 /usr/lib/libdbus-glib-1.so.2.1.0
gnome-key 2862 alex mem REG 8,3 338056 9345 /usr/lib/libORBit-2.so.0.1.0
...
...etc

Esto son solo unos pocos ejemplos de lo útil que puede resultar este comando, os recomiendo trastear un poco con él y veréis como seguro le sacáis partido en muchas ocasiones. Recordad:

man lsof