Introducción
El lsof
comando significa LiSt Open Files y muestra los archivos abiertos y qué proceso los utiliza. Dado que Linux ve cada objeto como un archivo, como dispositivos, directorios, etc., los archivos abiertos no identificados impiden que los usuarios los modifiquen.
Además, la gran cantidad de archivos dificulta la búsqueda de procesos maliciosos. El lsof
El comando ayuda a identificar estos procesos para que pueda terminarlos.
Este artículo explicará cómo usar el Comando lsof en Linux con ejemplos.
Requisitos previos
- Acceso a la terminal.
- Privilegios del grupo Sudo.
- Privilegios de raíz para algunos comandos.
Sintaxis del comando lsof
El lsof
la sintaxis del comando es:
lsof [options]
lsof
con sudo
para evitar errores de "permiso denegado".
Opciones del comando lsof
El lsof
El comando tiene muchas opciones. La siguiente tabla incluye los argumentos que se usan con más frecuencia:
Opción | Descripción |
---|---|
lsof | Enumera todos los archivos abiertos. |
-b | Suprime bloqueos del kernel. |
/ [file system] / | Muestra los archivos abiertos en un sistema de archivos en particular. |
/dev/tty* | Muestra archivos asociados con el terminal. |
-u [username] | Imprime todos los archivos abiertos por un usuario. |
-u ^[username] | Imprime todos los archivos abiertos por todos excepto por un usuario específico. |
-c [process] | Enumera todos los archivos a los que accede un proceso en particular. |
-p [process ID] | Muestra todos los archivos abiertos asociados con un ID de proceso específico. |
-p ^[process ID] | Muestra los archivos abiertos por todos los demás PID. |
-R | Enumera los ID de procesos principales. |
+D [directory path] | Imprime todos los archivos abiertos en un directorio. |
-i | Muestra todos los archivos a los que se accede mediante conexiones de red. |
-i [IP version number] | Filtrar archivos según su IP. |
- i [udp or tcp] | Filtrar archivos abiertos según el tipo de conexión (TCP o UDP). |
-i :[port number] | Busca procesos que se ejecutan en un puerto específico. |
-i :[port range] | Encuentra procesos que se ejecutan en rangos de puertos específicos. |
-t [file name] | Enumera los ID de los procesos que han accedido a un archivo en particular. |
# kill -9 'lsof -t -u [user] ' | Elimina todos los procesos de usuario. |
-d mem | Muestra todos los archivos mapeados en memoria. |
[path] | grep deleted | Imprime archivos eliminados bloqueados. |
man | Abre la página del manual. |
Ejemplos de comandos lsof
lsof
incorpora diferentes argumentos que permiten a los usuarios gestionar las actividades de administración del sistema y de la red. A continuación se describen los lsof
más comunes casos de uso.
Lista de todos los archivos
Cuando se ejecuta sin opciones, lsof
enumera todos los archivos abiertos por cualquier proceso:
sudo lsof
El lsof
El comando genera muchos detalles. Por lo tanto, canalice siempre lsof
con less
para mostrar la salida una página a la vez.
sudo lsof | less
Para navegar hasta el final de la lista, pulsa Intro o flecha hacia abajo . Salga de la lista con Q .
El lsof
la salida consta de diferentes columnas. Sin embargo, no todas las columnas se aplican a todos los tipos de archivos. El encabezado se ve así:
Las columnas predeterminadas en lsof
salida son:
- MANDO - Se refiere al comando asociado con el proceso que abrió el archivo.
- PID - El número de identificación del proceso que ejecuta el archivo.
- TID - Representa un número de identificación de tarea para el proceso respectivo. Está en blanco si un proceso, no una tarea, ha abierto el archivo.
- TASKCMD - Se refiere al nombre del comando en la primera columna. Sin embargo, TASKCMD puede diferir cuando una tarea cambia su nombre de comando.
- USUARIO - Nombra al usuario que ejecuta el proceso. La columna contiene el ID de usuario o el nombre.
- FD - Es el descriptor de archivo que utiliza el proceso para asociarse con el archivo.
- TIPO - Muestra el tipo de archivo y su número de identificación.
- DISPOSITIVO - Imprime números de dispositivos relacionados con el archivo.
- TALLA/NO - Representa el valor o el archivo tomado durante el tiempo de ejecución (tamaño o desplazamiento).
- NODO - El número de nodo del archivo local o el número de inodo del directorio/directorio principal.
- NOMBRE - Muestra la ruta o el enlace al archivo.
Ocultar bloques del núcleo
El lsof
predeterminado La salida también incluye archivos que abre el kernel. Para suprimir los bloqueos del núcleo, ejecute lsof
con el -b
bandera:
sudo lsof -b
Mostrar archivos de un sistema de archivos específico
Usa el lsof
Comando para mostrar archivos abiertos en un sistema de archivos en particular:
sudo lsof / [file system] /
Por ejemplo, para ver todos los archivos abiertos en el sys
directorio, ejecute:
sudo lsof / sys/
Imprimir archivos de terminal
Enumere todos los archivos abiertos conectados a la terminal apuntando al dev
directorio con lsof
:
lsof /dev/tty*
Mostrar todos los archivos a los que accede un usuario
Usa lsof
con un -u
bandera para mostrar los archivos abiertos por un usuario específico:
sudo lsof -u [username]
Por ejemplo:
lsof -u saraz
El comando enumera los archivos abiertos por saraz .
Para imprimir todos los archivos abiertos por todos excepto por un usuario específico, ejecute:
sudo lsof -u ^[username]
Por ejemplo:
lsof -u ^saraz
El resultado muestra archivos controlados por usuarios distintos de saraz .
Mostrar archivos utilizados por un proceso
El -c
flag abre todos los archivos usados por un proceso:
sudo lsof -c [process]
Por ejemplo, para listar archivos abiertos por wpa_suppl
procesar, ejecutar:
sudo lsof -c wpa_suppl
Otra opción es usar solo una parte del nombre del programa:
sudo lsof -c wpa
lsof
devuelve todos los programas que comienzan con el término wpa
, que incluye wpa_suppl .
Además, el -c
La opción da la misma salida que la tubería lsof
con grep :
sudo lsof | grep wpa_suppl
Imprimir archivos abiertos por un PID específico
Usa el -p
opción para filtrar archivos específicos por el número de identificación del proceso (PID). Por ejemplo, el siguiente resultado muestra todos los archivos con PID 635.
sudo lsof -p 635
Por otro lado, agregue un signo de intercalación ^
símbolo para imprimir archivos abiertos por todos los demás procesos:
sudo lsof -p ^635
Además, combinar lsof
con el -R
marca agrega el número de identificación del proceso principal (PPID) a la salida.
Para obtener información de PPID para un PID específico, ejecute:
sudo lsof -p [PID] -R
Por ejemplo, para obtener el PPID del 635 PID, escriba:
sudo lsof -p 635 -R
El resultado muestra la columna PPID agregada al encabezado.
Mostrar archivos en un directorio
Para ver todos los archivos que se han abierto en un directorio, use el siguiente comando:
sudo lsof +D [directory path]
Esta opción también repite los subdirectorios. Para evitar la repetición, utilice el +d
bandera.
Mostrar archivos accedidos por conexiones de red
Usa el -i
marcar con lsof
para comprobar qué archivos se abren mediante una conexión de red. Ejecute este comando:
sudo lsof -i
El ejemplo anterior imprime archivos abiertos por una conexión de red, independientemente del tipo de conexión.
El -i
flag añade mucha versatilidad a lsof
, lo que permite a los usuarios filtrar archivos en función de diferentes criterios. Usa lsof -i [options]
a:
- Filtrar archivos según su IP con:
sudo lsof -i [IP version number]
Por ejemplo, ejecute este comando para mostrar solo archivos IPv4:
sudo lsof -i 4
Por el contrario, imprima solo archivos IPv6 con:
sudo lsof -i 6
- Ver solo archivos que usan tcp o udp conexión proporcionando el tipo de protocolo:
sudo lsof -i [udp or tcp]
- Encuentre procesos que se ejecutan en un puerto específico . Esta opción es útil para verificar qué archivo impide que otra aplicación se vincule a un puerto específico. Ejecute el comando con el número de puerto o el nombre del servicio de la columna de nombre:
sudo lsof -i :[port number/name]
- Imprimir todos los archivos abiertos en intervalos de puertos específicos .
Por ejemplo, para listar archivos abiertos de rangos de puertos UDP 1-1024, ejecute:
Lista de ID de procesos que tienen archivos abiertos
Para ver los PID de los procesos que han abierto un archivo en particular, use -t
y proporcione el nombre del archivo.
lsof -t [file name]
Eliminar todos los procesos del usuario
El -t
flag también elimina todos los procesos de un usuario específico. Por ejemplo, para eliminar todos los procesos del usuario notsara , ejecute este comando como root:
# kill -9 'lsof -t -u notsara'
Imprimir todos los archivos asignados a la memoria
lsof
imprime qué procesos tienen archivos mapeados en memoria. Para mostrar estos procesos, ejecute:
lsof -d mem
Mostrar archivos eliminados bloqueados
A veces, un proceso mantiene bloqueados los archivos grandes incluso después de que se hayan eliminado, lo que consume espacio en disco.
Usa Lsof
para encontrar archivos que se eliminan en Linux pero que aún están bloqueados por uno o más procesos.
Por ejemplo, busque archivos eliminados del directorio raíz usando una barra inclinada (/
) como símbolo de ruta:
sudo lsof [path] | grep deleted
Combina múltiples opciones
El lsof
El comando permite múltiples elementos de búsqueda en la línea de comando. Usa Y y O lógica para combinar diferentes argumentos para obtener resultados específicos. A continuación se muestran los ejemplos más comunes.
- Lista de archivos abiertos por un usuario en particular o proceso con:
sudo lsof -u [username] -c [process]
La salida imprime ambos archivos abiertos por el usuario saraz y los utilizados por el proceso snapd .
- Mostrar solo archivos que coincidan con el primer término de búsqueda y el segundo término de búsqueda con el operador lógico
-a
(y):
sudo lsof -u [username] -c [process] -a
En este caso, lsof
muestra solo los archivos abiertos por el usuario saraz y el golpe proceso.
- Buscar todas las conexiones de red de un usuario:
sudo lsof -i -u [username] -a
El -i
y -a
banderas con el lsof
comando imprimir toda la actividad del usuario root .
Más información sobre lsof
El lsof
El comando tiene más opciones que cualquier otro comando de Linux. El man
La página tiene casi 2000 líneas y ofrece mucha información.
Para explorar las posibilidades del comando, ejecute:
man lsof
Conclusión
Este tutorial le muestra cómo usar el lsof
comando para solucionar posibles problemas de seguridad y del sistema con ejemplos prácticos.
A continuación, aprenda a copiar archivos y directorios en Linux y compare dos archivos con el comando diff de Linux.