Lsof

lsof (Lista de archivos abiertos, en español) es una conocida herramienta de monitorización de sistemas operativos tipo Unix que se utiliza para mostrar todos los archivos de disco que mantienen abiertos los procesos, incluyendo los sockets de red abiertos, tuberías, entre otros tipos.

El comando lsof brinda al usuario información detallada acerca del contexto donde se utiliza el archivo. Entre la información se encuentra:  
 nombre e id del proceso,
 nombre o id del usuario que lanzó dicho proceso,
 El descriptor de archivo junto con el modo de apertura (lectura,escritura,etc.. ),
 El tipo de nodo asociado al archivo: Tubería (FIFO), Socket IPV4, Socket IPv6, Directorio, Bloque de Dispositivo,etc..
 La ruta absoluta del archivo o bien información relativa según el tipo,
 El contexto de seguridad SELinux

lsof es software libre y su autor original es Victor A. Abell.

Modo de uso
 lsof [PARÁMETROS] [ARCHIVO..]

En la invocación del comando lsof, se permite identificar que procesos están utilizando el o los archivos indicados.

Alguno de los parámetros que posee lsof son:
-a Permite que las opciones (parámetros) sean requisitos para listar. Útil cuando se "filtra" usando -c, -g, -u o -p.
-c CADENA Lista los archivos de los procesos que comiencen con CADENA
-d FDs Determina que se deben excluir el o los Descriptores de Archivos (FD) del listado. Los valores se separan por comas.
+d DIRECTORIO Lista los procesos que utilicen el directorio o bien alguno de los archivos que contenga.
+D DIRECTORIO idem al anterior pero recursivo:incluye a los subdirectorios y archivos que estos contengan
-i Lista los sockets abiertos.
-g GID Lista los archivos lanzados por el GID (ID de Grupo) indicado.
-n No resuelve los nombres de dominio.
-p PID Lista los archivos abiertos por el proceso con el PID (ID de Proceso) indicado.
-P No resuelve los nombres de los puertos (conexiones).
[+|-]r [N [mCADENA]] Imprime en pantalla el resultado cada N segundos, si no se especifica se ejecuta cada 15. Si se utiliza el prefijo '-' se repite esta operación hasta que el usuario lo cancele (), en cambio si se utiliza el prefijo '+', el proceso termina cuando no haya archivos listados. Adicionalmente entre cada actualización es posible indicarle cual es la cadena de texto que separa cada resultado, a través mCADENA. En caso de no indicarle ninguna cadena, por default se utiliza '======='.
-u [usuario|UID] Lista los archivos abiertos por el usuario o bien UID (ID de Usuario).
-U Lista los sockets UNIX (IPC sockets).

Si no se indica ningún parámetro lsof enumera todos los archivos abiertos en ese momento, que normalmente suelen ser bastantes.

Ejemplos 
Listar los archivos abiertos por el proceso firefox. Se utilizaron expresiones regulares para garantizar que sea dicho proceso:

lsof -c "/\bfirefox\b/"

Listar los procesos que hacen uso del archivo /home/usuario/archivo.txt:

lsof /home/usuario/archivo.txt

Listar los archivos abiertos pertenecientes al home del usuario actual. La tilde (~) es el alias del home del usuario:

lsof +D ~

Listar los sockets abiertos por el proceso  cuyo nombre contenga "java" (filtrado por grep):

lsof -i -n -P | grep java

Resultado:
    java    11819 lyonn   34u  IPv6  52669       TCP *:1095 (LISTEN)
    java    11819 lyonn   37u  IPv6  52671       TCP *:53872 (LISTEN)
    java    11819 lyonn   39u  IPv6  52732       TCP 10.225.183.218:41525->10.225.183.218:35812 (ESTABLISHED)
    java    11880 lyonn   34u  IPv6  52743       TCP *:1096 (LISTEN)
    java    11880 lyonn   37u  IPv6  52745       TCP *:33029 (LISTEN)
    java    11880 lyonn   39u  IPv6  52757       TCP 10.225.183.218:41530->10.225.18

Véase también 
 Anexo:Programas para Unix
 ps (Unix)

Referencias

Enlaces externos 
 Página del autor de lsof
 Sitio (espejo) que contiene el código fuente y binarios, entre otros recursos.

Redes informáticas
Software para Unix
Software para Linux