40 “comando lsof” simple y eficaz en el sistema Linux

El comando lsof es uno de los más atractivos para administradores y usuarios avanzados. El nombre lsof significa “Lista de archivos abiertos” y proporciona información sobre todos los archivos abiertos por algún proceso. Los archivos abiertos pueden hacer referencia a varios tipos de archivos, incluidos archivos normales, directorios, flujos de red, referencia de ejecución, archivos de bloque, etc. El uso más común de lsof es depurar problemas del sistema. Los administradores de red de Linux también confían en lsof para solucionar problemas de red. Nuestros editores han seleccionado 40 ejemplos simples pero extremadamente útiles de lsof para ayudar a los usuarios a aprender este comando con más detalle.

El “comando lsof” más útil en Linux

Dado que considera todo en su sistema como un archivo, es obligatorio tener un mejor control sobre sus archivos. La utilidad lsof le permite hacer precisamente esto y proporciona mucha más información adicional útil en la depuración. Los administradores de red pueden usar lsof para revisar sockets de red abiertos y fortalecer la seguridad de su red usando esta información.

comando lsof en Linux

1. Lista de todos los archivos abiertos

En su uso más simple, lsof imprime todos los archivos abiertos actualmente. No entre en pánico cuando vea un montón de archivos desconocidos. Son archivos de sistema creados por procesos subyacentes y el kernel de Linux. La información de salida se divide en varias columnas, como COMMAND, PID, USER, FD y TYPE.

$ lsof
$ lsof | less

COMMAND indica el programa que invocó el archivo, PID indica el ID del proceso, TYPE representa el tipo de archivo y FD es el descriptor del archivo. Sabrá más sobre ellos a medida que avance en esta guía.

2. Suprimir bloques de kernel

La salida del comando anterior contiene muchos archivos de bloque que abre el kernel y tiene poco sentido para la mayoría de los usuarios no técnicos. Afortunadamente, lsof nos permite suprimir estos archivos usando la opción -b .

$ lsof -b

Ahora lsof evitará enumerar los bloques del kernel y garantizará que comandos como stat , lstat y readlink funcionen sin ningún problema. Debe utilizar esta opción siempre que trabaje con archivos de sistema de bajo nivel, etc.

3. Listar archivos según el nombre de usuario

Podemos listar fácilmente todos los archivos abiertos para un usuario específico usando el comando lsof Linux. Simplemente agregue la opción -u , seguida del nombre de usuario.

$ lsof -u abc

Este comando enumerará los archivos abiertos por el usuario abc . También puede utilizar varios nombres de usuario al mismo tiempo utilizando una lista separada por comas. Sin embargo, fallará si hay espacios entre los nombres de usuario.

$ lsof -u aaa,bbb,ccc

Ahora enumerará los archivos abiertos por los tres usuarios hipotéticos. También puede agregar el operador ^ (negación) delante de un nombre de usuario. Hará que lsof omita archivos abiertos por esos usuarios.

$ lsof -u ^xyz

4. Lista de archivos de red

Los archivos de red son archivos asociados con la pila TCP / IP, a saber, sockets. Puede usar la opción -i para listar todos los archivos de red abiertos actualmente usando lsof.

$ lsof -i

Imprimirá todos los archivos de red junto con su tipo y protocolos asociados. Utilice -i4 o -i6 para enumerar los archivos IPv4 e IPv6.

$ lsof -i4
$ lsof -i6

5. Enumere todos los archivos TCP / UDP

Los siguientes comandos demuestran cómo usar lsof para imprimir todos los procesos TCP y UDP abiertos actualmente. TCP o Transmission Control Protocol es el protocolo de comunicación de facto utilizado por las redes modernas. Para enumerar todos los procesos de TCP, use el siguiente comando.

$ lsof -i TCP

UDP o User Datagram Protocol es un protocolo sin estado que se utiliza para transferencias de datos de baja latencia. Puede usar el siguiente comando para listar todos los procesos UDP usando lsof.

$ lsof -i UDP

6. Enumere los procesos que se ejecutan en puertos específicos

La opción -i también permite a los administradores enumerar todos los archivos que se ejecutan en un puerto específico. Esto es útil en la resolución de problemas de red y permite a los administradores .

$ lsof -i TCP:22

Este comando enumerará los procesos que se están ejecutando en el puerto TCP 22. El demonio ssh generalmente se ejecuta en el puerto 22. También puede verificar otros puertos. El siguiente comando busca todos los procesos que se ejecutan en el puerto 443.

$ lsof -i TCP:443

7. Enumere los procesos que se ejecutan en una variedad de puertos

El siguiente comando enumera todos los archivos creados por procesos que se ejecutan en un rango específico de puertos. Simplemente estamos definiendo el rango, y lsof generará cualquier archivo que pueda asociar con cualquiera de estos números de puerto.

$ lsof -i TCP:1-1024

Ahora, lsof buscará procesos que se ejecuten en cualquier puerto TCP entre 1-1024 y enumerará todos los archivos activos creados por estos procesos.

salida lsof usando rangos de puertos

8. Listar archivos usando PID

Un PID o ID de proceso es un identificador único que se utiliza para etiquetar los procesos del sistema operativo. El comando lsof permite a los administradores buscar y listar archivos según su PID. El siguiente comando enumera todos los archivos asociados con el ID de proceso 1.

$ lsof -p 1

También puede especificar varios PID mediante una lista separada por comas. Sin embargo, asegúrese de no utilizar ningún espacio en blanco, de lo contrario el comando no funcionará como se esperaba.

$ lsof -p 1,2,3,^111

Este comando enumerará todos los archivos abiertos por los procesos 1, 2 y 3. Omitirá los archivos abiertos por el proceso 111.

9. Listar archivos de un sistema de archivos específico

La es muy sólida y permite a los administradores realizar varias operaciones en ellos. Puede usar el comando lsof en Linux para imprimir todos los archivos abiertos en un sistema de archivos específico, como se muestra a continuación.

$ lsof /proc
$ lsof /run/
$ lsof /sys/

El directorio / proc contiene información sobre los procesos que se ejecutan activamente. Puede inspeccionar fácilmente esta información utilizando lsof en distribuciones de Linux y BSD.

10. Lista de sockets de dominio Unix

La utilidad lsof nos permite listar todos los archivos de socket Unix o sockets IPC (Inter-Process Communication). Estos archivos permiten al host comunicarse con otros procesos de la máquina. Eche un vistazo rápido al siguiente ejemplo para ver cómo funciona esto en la vida real.

$ lsof -U

Para encontrar todos los archivos de socket de Unix que tienen un ID de proceso distinto, use el siguiente comando lsof.

$ lsof -U -a -p 18250

Reemplace 18250 con el PID del proceso que desea ver. Presentará todos los sockets de dominio Unix que contienen el mismo PID.

11. Listar todos los PID activos

La utilidad lsof también permite a los administradores enumerar todos los procesos actualmente en ejecución utilizando su PID. Esto es útil en varias situaciones, como canalizar el resultado al comando kill de Linux, etc.

$ lsof -t
$ lsof -t -i

El primer comando simplemente realiza un lsof habitual y luego omite todos los campos de salida excepto los PID. La segunda variante muestra los PID de los procesos de red únicamente. Podemos simplemente hacer grep para un PID específico y alimentarlo a otros comandos.

12. Listar archivos según el dispositivo

Los archivos de dispositivo son un tipo especial de archivo en . Por lo general, actúan como una interfaz para diferentes controladores de dispositivos y no se comportan como archivos normales. El siguiente ejemplo nos muestra cómo listar todos los archivos abiertos de un dispositivo específico.

$ lsof /dev/sda9 | less

Puede listar sus dispositivos de bloqueo usando el comando lsblk . La mayoría de las distribuciones modernas de Linux mantienen estos archivos en el directorio / dev .

13 Lista de archivos de terminal

El directorio / dev también contiene archivos de dispositivos especiales como / dev / tty . Estos son archivos de dispositivo únicos que brindan acceso al terminal para un proceso determinado. Puede aprovechar lsof para enumerar todos los archivos abiertos que están asociados con la terminal.

$ lsof /dev/tty*
$ lsof /dev/tty2
$ lsof /dev/ttyS0

El primer comando enumera los archivos abiertos para todos los terminales de control, mientras que el segundo comando se dirige a una consola específica. El ejemplo final enumera los archivos asociados con su puerto serie (/ dev / ttyS0).

14. Lista de archivos abiertos en directorios

Puede utilizar el comando lsof para enumerar todos los archivos abiertos en un directorio específico. El siguiente comando ilustra esto con un ejemplo simple pero práctico.

$ lsof +D Documents
$ sudo lsof +D ~/

El primer comando enumera todos los archivos abiertos en el directorio Documentos. El segundo comando enumera todos los archivos abiertos en el directorio de inicio y sus subdirectorios. El segundo comando funcionará incluso sin sudo,  pero mostrará algunas advertencias en la salida.

15. Lista recursiva de archivos abiertos en directorios

El comando anterior solo mostrará los archivos que se abren en el directorio Documentos. No mostrará ningún archivo abierto en los subdirectorios de Documentos. Afortunadamente, lsof proporciona otra opción útil para habilitar esto. Mire el siguiente ejemplo para comprender mejor esta opción.

$ lsof +d Documents
$ sudo lsof +d ~/

Este comando mostrará todos los archivos abiertos en el directorio Documentos y luego descenderá a los subdirectorios, si los hay. Tenga en cuenta que esto puede llevar mucho tiempo si Documentos es grande y tiene muchos subdirectorios.

16. Lista de archivos abiertos según el proceso

Anteriormente, hemos enumerado todos los archivos abiertos utilizando sus PID. Sin embargo, también podemos imprimir la lista de archivos activos en un momento dado usando su nombre de proceso. Eche un vistazo al siguiente ejemplo y escríbalo en su para ver cómo funcionan.

$ lsof -c chrome

Este comando generará todos los archivos abiertos generados por el proceso de Chrome. Tenga en cuenta que puede haber varios procesos cuyos nombres comiencen con la cadena chrome. Este comando los presentará todos en la salida.

parámetro de nombre de proceso para lsof Linux

17. Enumere el ID del proceso principal (PPID)

La utilidad lsof permite a los administradores enumerar el número de identificación del proceso principal (PPID) junto con los campos de salida regulares. Deberá pasar la opción -R para habilitar esto, como se ilustra a continuación.

$ lsof -R
$ lsof -p [PID HERE] -R

El primer comando imprime todos los procesos actualmente activos junto con su información PPID. El último comando toma un número PID y muestra el PPID para ese proceso.

18. Enumere los PID que han abierto un archivo

El siguiente comando enumera todos los ID de proceso que han abierto un archivo específico. Aquí estamos usando la opción -t introducida anteriormente.

$ lsof -t /usr/share/mime/mime.cache

Dado que la opción -t solo proporciona los PID, la aprovechamos para producir nuestra salida esperada. Este comando enumerará todos los ID de proceso que han abierto el documento /usr/share/mime/mime.cache .

19. Listar archivos basados ​​en descriptores de archivos

Podemos indicarle a lsof que enumere los archivos abiertos en función de los descriptores de archivo. El siguiente comando ilustra cómo encontrar todos los archivos abiertos actualmente que tienen el campo FD (Descriptor de archivo) configurado como cwd (Directorio de trabajo actual).

$ lsof -d cwd
$ lsof -u xyz -d cwd -a

El primer comando generará todos los archivos abiertos en el directorio de trabajo actual. El segundo comando enumera los archivos que pertenecen al usuario xyz. La opción -a es necesaria para este bit y el comando no funcionará como se esperaba sin esta opción.

20. Mostrar salida para otros programas

El comando lsof permite a los administradores producir resultados para analizar con herramientas externas como awk, Perl y el lenguaje de programación C. Deberá pasar la opción -F junto con las listas de caracteres para la identificación del campo.

$ lsof -F
$ lsof -FucsS

El primer comando produce una salida útil que se puede guardar usando el operador de redirección ( > ) y analizar más tarde. El segundo ejemplo modifica la salida para acomodar datos adicionales como nombre de comando de proceso, ID de usuario, identificación de flujo y tamaño.

21. Lista de elementos fallidos

A menudo, lsof no encuentra algunos elementos solicitados por el usuario. Es bastante difícil encontrar esos elementos ya que la salida producida por lsof es muy extensa. Afortunadamente, la opción -V permite a lsof imprimir estos elementos de manera muy conveniente.

$ lsof -V
$ lsof -c ssh -c http -V
$ lsof -p 12312312 -V

El primer ejemplo enumerará todos los archivos que lsof no pudo encontrar. El segundo ejemplo se puede utilizar para averiguar si hay algún comando de proceso cuyos nombres comiencen con ssh o http. El ejemplo final ilustra el uso de -V para ID de proceso.

22. Mostrar información de TCP / TPI

De forma predeterminada, lsof proporciona poca información sobre las conexiones TCP / TPI. Solo proporciona informes sobre los estados de conexión. Sin embargo, podemos aprovechar la opción -T para habilitar funciones de informes adicionales, como se muestra a continuación.

$ lsof -i -Tq
$ lsof -i -Tqs

El primer comando mostrará la longitud de la cola (q) en su salida. El segundo comando mostrará los estados de conexión junto con la longitud de la cola. El valor predeterminado es -Ts, y cuando solo usa -T , desactivará todos los informes de TCP / TPI.

23. Deshabilitar la conversión de número de puerto

La opción -P permite a los administradores deshabilitar la conversión de números de puerto a nombres cuando buscan archivos de red o sockets Unix. Puede ahorrar una cantidad de tiempo considerable cuando hay demasiados archivos de este tipo.

$ lsof -i -Tqs -P

Puede comparar el tiempo que tarda este comando con el tiempo que tarda el mismo comando pero sin la opción -P . Usaremos una herramienta estándar de terminal de Linux llamada tiempo para este propósito.

$ time lsof -i -Tqs
$ time lsof -i -Tqs -P

El tiempo de ejecución se ha reducido a uno por sexto en mi máquina.

disbale conversión de puerto

24. Deshabilitar la conversión de nombre de host

Al igual que los nombres de los puertos, también podemos desactivar la conversión del nombre de host de los números de red. También resultará en un aumento significativo en el rendimiento, como verá. El comando de tiempo de Linux volverá a ser útil para probar esto.

$ lsof -i -n

Esta vez, lsof no convertirá los números de red en nombres de host. Utilice los siguientes comandos para verificar el cambio en la velocidad de ejecución.

$ time lsof -i
$ time lsof -i -n
$ time lsof -i -n -P

25. Habilitar el modo de repetición

El comando lsof en Linux proporciona un modo de repetición conveniente para monitorear operaciones en vivo sin salir de la consola de salida. Eche un vistazo a los ejemplos a continuación para aprender esto con más detalle.

$ lsof -r 5 -i UDP

Esta salida del comando voluntad todas las conexiones UDP en curso en cada 5 segundos hasta que termina el comando usando Ctrl + C . También puede usar la opción + r , que se cerrará automáticamente si no hay cargos adicionales en la salida.

$ lsof +r 5 -i UDP

26. Enumere todos los procesos que escuchan puertos TCP

Podemos listar todos los procesos que están escuchando puertos TCP usando la utilidad lsof. Haremos uso de varios parámetros ya mostrados para realizar esta tarea. Mire el siguiente ejemplo para descubrir cómo funciona esto.

$ lsof -nP -i TCP -s TCP:LISTEN

Este comando desactiva la conversión de nombres de host y nombres de puerto utilizando el -n y -P opción, que se combinan entre sí. La opción -s le dice a lsof que solo nos interesan los procesos que escuchan puertos TCP.

27. Listar procesos basados ​​en protocolos

También podemos definir protocolos específicos que nos interesan. Un vistazo rápido a los siguientes comandos lo ayudará a comprender esto mucho mejor.

$ lsof -i TCP:https
$ lsof -i UDP:ntp

El primer comando muestra todos los archivos TCP que están usando el puerto https, que es 443 por defecto. El último comando muestra todos los archivos UDP que utilizan el puerto NTP (Protocolo de tiempo de red). El siguiente comando muestra todos los archivos UDP que utilizan conexiones IPv4.

$ lsof -i4 -a -i UDP:ntp

28. Mostrar la cantidad total de conexiones TCP / UDP

Podemos usar algunas herramientas de terminal tradicionales como grep y awk para imprimir el número total de conexiones TCP o UDP activas. El siguiente comando demuestra este lsof junto con awk, sort y uniq.

$ lsof -i | awk '{print $8}' | sort | uniq -c | grep 'TCP\|UDP'

Aquí hemos utilizado varios comandos para realizar nuestra tarea. La parte awk imprime la sección NODE de la salida proporcionada por lsof, uniq cuenta el número de líneas y grep busca los patrones dados. Visite para obtener más información sobre la búsqueda de patrones.

29. Enumere las conexiones de red establecidas

El siguiente comando muestra cómo obtener todas las conexiones de red establecidas utilizando herramientas estándar de Linux. Primero listaremos todos los archivos de red y luego extraeremos datos específicos de la salida proporcionada por lsof usando awk y grep.

$ lsof -i -nP | grep ESTABLISHED | awk '{print $1, $9}' | sort -u

La opción -nP deshabilita la conversión de nombres de puertos y hosts. Se utiliza para acelerar el proceso general y no es obligatorio.

30. Enumere todas las conexiones SSH activas

También podemos enumerar todas las conexiones ssh realizadas desde / hacia nuestro sistema usando lsof y grep. Eche un vistazo rápido a los siguientes ejemplos para ver cómo funciona esto en tiempo real.

$ lsof -i TCP | grep ssh | grep ESTABLISHED
$ lsof -nP -iTCP -sTCP:ESTABLISHED | grep SSH

Ambos comandos anteriores funcionan de manera bastante similar. Sin embargo, el último es más rápido debido al uso de algunos indicadores de inhibición como -n y -P .

31. Procesos de lista basados ​​en el acceso a archivos

El comando lsof también permite a los administradores del sistema determinar qué procesos están usando un archivo específico. Los siguientes comandos muestran esto usando Linux, que comandos junto con lsof.

$ lsof `which lsof`
$ lsof `which kate`

Entonces, simplemente pasando el archivo en particular a lsof con comillas invertidas, podemos hacer esto. Puede reemplazar cualquiera de los anteriores con archivos que desee inspeccionar y obtener una lista de los procesos que acceden a ellos. Utilice la opción -t para recuperar solo los PID.

$ lsof -t `which chrome`
$ lsof -t `which nmap`

lista de procesos basada en el acceso a archivos

32. Eliminar procesos propiedad del usuario

Dado que lsof proporciona la información de propiedad de los archivos abiertos, podemos utilizarla para matar un proceso desde la terminal. El siguiente comando ilustra cómo crear todos los procesos propiedad del usuario ABC usando el comando kill junto con lsof.

$ sudo kill -9 `lsof -t -u ABC`

Debe reemplazar ABC con un nombre de usuario real para eliminar con éxito los procesos generados por ese usuario. Las más requerirán que tenga privilegios de sudo si desea eliminar los procesos de otros usuarios.

33. Mostrar archivos usando expresiones regulares

La utilidad lsof permite a los administradores filtrar información utilizando patrones de expresión regular. Deberá colocar el patrón especificado dentro de dos barras diagonales (/) para que esto funcione. Por ejemplo, el siguiente ejemplo enumerará todos los comandos que tienen más de seis caracteres.

$ lsof -c /^......*/

Tenga en cuenta que las barras diagonales son obligatorias cuando se utilizan expresiones regulares con lsof. Cada uno de los seis puntos representa un solo carácter, mientras que el asterisco (*) indica que cualquier cosa después de estos seis caracteres es elegible.

34. Enumere los procesos que utilizan NFS

Podemos enumerar fácilmente todos los procesos que están ocupando recursos NFS (Network File System) en nuestro servidor. El comando lsof en Linux expone la opción -N para esta tarea. Vea el siguiente ejemplo para comprenderlo con más detalle.

$ lsof -N

La salida de este comando contendrá información como los identificadores de proceso junto con su punto de montaje. Estos datos son muy fáciles de extraer mediante el comando grep y ayudan a reducir los problemas relacionados con .

35. Lista de archivos usados ​​pero eliminados

El comando lsof nos permite determinar qué archivos han sido utilizados por algunos procesos anteriormente y están actualmente eliminados. Esto es útil en varias situaciones, como cuando se verifica el espacio en disco con .

$ lsof /var/log | grep -i "deleted"

Este comando listará el PID de todos los archivos que han sido eliminados recientemente por el kernel del sistema operativo pero que aún ocupan espacio en su máquina. Puede utilizar estos PID para eliminar estos procesos.

36. Contar el número de entradas

Dado que la salida producida por lsof contiene muchas entradas, a menudo resulta difícil visualizarlas. Podemos contar fácilmente el número de líneas presentes en esta salida canalizando estos datos a una herramienta de Linux práctica y útil llamada wc. Eche un vistazo al siguiente ejemplo para ver cómo funciona.

$ lsof | wc -l
$ lsof -t -i -nP | wc -l

Los comandos anteriores alimentan la salida de lsof a wc y muestran el número total de filas presentes en la salida de lsof.

37. Activar / desactivar mensajes de advertencia

Algunos comandos lsof pueden mostrarle mensajes de advertencia al ejecutarlos. Afortunadamente, podemos habilitar / deshabilitar estas advertencias como mejor nos parezca. Para deshabilitar la advertencia en la salida de lsof, use el siguiente comando.

$ lsof -t -i -nP -w

La opción -w suprimirá cualquier advertencia potencial. Debe utilizar la opción + w para volver a habilitar esta función.

$ lsof -t -i -nP +w

De esta manera, podemos configurar el parámetro de advertencia según sea necesario. Suele ser útil cuando se utiliza junto con .

38. Mostrar información sobre la versión

La utilidad lsof puede tener algunas variaciones entre las variantes de Linux y BSD. Podemos enumerar la información de la versión de lsof en estas máquinas y ver información útil como el número de revisión, la fecha de compilación, la versión del compilador, etc.

$ lsof -v

También nos muestra todos los parámetros de configuración utilizados para construir el producto final binario. Además, los valores de los indicadores del compilador y del cargador son útiles tanto para los desarrolladores del sistema como para los administradores.

información de la versión de lsof

39. Mostrar página de ayuda

La página de ayuda de lsof contiene información resumida de todas las opciones de línea de comandos disponibles y su uso básico. Puede consultar esto siempre que no esté seguro de una opción en particular.

$ lsof --help

Esta página devuelve todas las combinaciones posibles de los parámetros de lsof y es útil tanto para usuarios principiantes como para usuarios experimentados de Linux.

40. Mostrar la página del manual

El manual contiene una discusión en profundidad de la utilidad lsof y explica los parámetros disponibles en detalle. Definitivamente debería consultar este manual si es un nuevo usuario de Linux sin experiencia previa con lsof o similares

$ man lsof

Esto le proporcionará toda la información necesaria para manejar lsof y usarlo para las tareas diarias de monitoreo del sistema. Es extremadamente útil para los nuevos usuarios, y siempre debe consultarlo cuando tenga problemas con lsof.

Pensamientos finales

El comando lsof en Linux es una herramienta de monitoreo convincente que permite a los administradores visualizar cómo los procesos están usando varios archivos. Aunque parece complejo para muchos, el uso de esta herramienta no es diferente a otras herramientas tradicionales de línea de comandos. Nuestros editores han seleccionado estos 40 ejemplos simples pero prácticos de Linux para ayudarlo a comenzar su viaje con esta increíble herramienta. Con suerte, le proporcionamos la información esencial que estaba buscando. Ahora debería poder manejar lsof por su cuenta. Déjenos un comentario si tiene alguna pregunta sobre la utilidad lsof y visítenos con regularidad para obtener más guías sobre emocionantes comandos de Linux.

Leave a Comment

Your email address will not be published. Required fields are marked *