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.[1]
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.[2]
Modo de uso
editarlsof [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 (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
editarListar 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