GNU/Linux >> Tutoriales Linux >  >> Linux

Comando lsof en Linux con ejemplos

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]

Nota: Para la mayoría de los comandos, ejecute 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:

  1. 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
  1. Ver solo archivos que usan tcp o udp conexión proporcionando el tipo de protocolo:
sudo lsof -i [udp or tcp]
  1. 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]
  1. 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.

  1. 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 .

  1. 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.

  1. 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.


Linux
  1. Comando wc Linux con ejemplos

  2. Comando Linux Tee con ejemplos

  3. Comando JQ en Linux con ejemplos

  4. 7 ejemplos del comando lsof en Linux

  5. Comando rsync de Linux con ejemplos prácticos

15 comandos ps de Linux con ejemplos

Comando Find de Linux con ejemplos prácticos

Comando lsof en Linux (10 ejemplos)

Comando IP de Linux con ejemplos

Tutorial de comando de búsqueda de Linux (con ejemplos)

Comando Linux comm con ejemplos