# 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

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 (ctrl+C), 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: