Saltar al contenido

40 «Comando lsof» simple y efectivo en el sistema Linux

40 "Comando lsof" simple y efectivo en el sistema Linux

El comando lsof es uno de los comandos de terminal de Linux más convincentes 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 referirse a varios tipos de archivos, incluidos archivos normales, directorios, transmisiones de red, ejecución de referencias, archivos de bloque, etc. El uso más común de lsof es la depuración de problemas del sistema. Los administradores de red de Linux también confían en lsof al 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.

«Comando lsof» más útil en Linux


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

comando lsof en Linux

1. Listar 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 del sistema creados por procesos subyacentes y el kernel de Linux. La información de salida se divide en varias columnas, como COMANDO, PID, USUARIO, FD y TIPO.

$ lsof
$ lsof | less

COMMAND denota el programa que invocó el archivo, PID denota la 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. Suprima los bloques del núcleo


El resultado del comando anterior contiene una gran cantidad de archivos de bloque que abre el núcleo y tiene poco sentido para la mayoría de los usuarios no técnicos. Afortunadamente, lsof nos permite suprimir estos archivos usando el -si opción.

$ lsof -b

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

3. Lista de archivos basados ​​en el nombre de usuario


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

$ lsof -u abc

Este comando enumerará los archivos abiertos por el usuario a B C. También puede usar varios nombres de usuario al mismo tiempo usando 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 puedes agregar el ^ (negación) operador delante de un nombre de usuario. Causará que lsof omita los 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. Puedes usar el -yo opción para enumerar todos los archivos de red abiertos actualmente usando lsof.

$ lsof -i

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

$ lsof -i4
$ lsof -i6

5. Listar 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 el Protocolo de Control de Transmisión es el protocolo de comunicación de facto utilizado por las redes modernas. Para enumerar todos los procesos TCP, use el siguiente comando.

$ lsof -i TCP

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

$ lsof -i UDP

6. Lista de procesos que se ejecutan en puertos específicos


los -yo La opción 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 definir reglas robustas de iptables para Linux.

$ lsof -i TCP:22

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

$ lsof -i TCP:443

7. Lista de procesos que se ejecutan en un rango 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á los procesos que se ejecutan en cualquier puerto TCP entre 1-1024 y enumerará todos los archivos activos creados por estos procesos.

Salida de lsof utilizando rangos de puertos

8. Listar archivos usando PID


Un PID o ID de proceso es un identificador único utilizado para etiquetar procesos del sistema operativo. El comando lsof permite a los administradores buscar y enumerar archivos en función de su PID. El siguiente comando enumera todos los archivos asociados con el ID de proceso 1.

$ lsof -p 1

También puede especificar múltiples PID utilizando una lista separada por comas. Sin embargo, asegúrese de no usar 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á aquellos archivos abiertos por el proceso 111.

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


La jerarquía del sistema de archivos de Linux es muy robusta 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/

los / proc El directorio contiene información sobre la ejecución activa de procesos. Puede inspeccionar fácilmente esta información utilizando lsof en distribuciones de Linux y BSD.

10. Listar los zócalos de dominio de Unix


La utilidad lsof nos permite enumerar todos los archivos de socket Unix o los sockets IPC (comunicación entre procesos). Estos archivos permiten que el host se comunique con otros procesos en la máquina. Eche un vistazo rápido al siguiente ejemplo para ver cómo funciona esto en la vida real.

$ lsof -U

Para buscar todos los archivos de socket Unix que tienen una ID de proceso distinta, 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 de 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 que se ejecutan actualmente 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 solamente. Simplemente podemos buscar un PID específico y alimentarlo a otros comandos.

12. Lista de archivos basados ​​en el dispositivo


Los archivos de dispositivo son un tipo especial de archivo en sistemas Linux y BSD. 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 enumerar todos los archivos abiertos de un dispositivo específico.

$ lsof /dev/sda9 | less

Puede enumerar sus dispositivos de bloqueo utilizando el lsblk mando. La mayoría de las distribuciones modernas de Linux mantienen estos archivos en el / dev directorio.

13 Lista de archivos de terminal


los / dev El directorio también contiene archivos de dispositivos especiales como / dev / tty. Estos son archivos de dispositivos únicos que proporcionan acceso al terminal para un proceso determinado. Puede aprovechar lsof para enumerar todos los archivos abiertos que están asociados con el 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 apunta a una consola específica. El último ejemplo enumera los archivos asociados con su puerto serie (/ dev / ttyS0).

14. Listar archivos abiertos en directorios


Puede usar el comando lsof para enumerar todos los archivos abiertos en un directorio específico. El siguiente comando ilustra esto usando 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. Listar recursivamente 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 corresponde. Tenga en cuenta que esto puede llevar mucho tiempo si Documentos es grande y tiene muchos subdirectorios.

16. Listar archivos abiertos basados ​​en 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 escriba esto en su emulador de terminal Linux favorito 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 comienzan con la cadena de cromo. Este comando los presentará a todos en la salida.

parámetro de nombre de proceso para lsof Linux

17. Lista de identificación 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 activos actualmente junto con su información PPID. El último comando toma un número PID y muestra el PPID para ese proceso.

18. Lista de PID que han abierto un archivo


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

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

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

19. Lista de archivos basados ​​en descriptores de archivo


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

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

El primer comando generará cada archivo abierto en el directorio de trabajo actual. El segundo comando enumera los archivos que pertenecen al usuario xyz. los -un Se requiere la opción para este bit, y el comando no funcionará como se espera sin esta opción.

20. Salida de pantalla 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. Necesitarás pasar el -F opción junto a listas de caracteres para identificación de campo.

$ lsof -F
$ lsof -FucsS

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

21. Lista de artículos fallidos


A menudo, lsof no puede encontrar algunos elementos que el usuario solicitó. Es bastante difícil encontrar esos elementos, ya que la producción producida por lsof es muy extensa. Por suerte, el -V La opción permite a lsof imprimir estos artículos 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 puede usarse para encontrar si hay algún comando de proceso cuyos nombres comiencen con ssh o http. El último ejemplo ilustra el uso de -V para ID de proceso.

22. Mostrar información de TCP / TPI


Por defecto, 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 usas solo -T, desactivará todos los informes TCP / TPI.

23. Desactivar conversión de número de puerto


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

$ lsof -i -Tqs -P

Puede comparar el tiempo empleado por este comando con el tiempo empleado por el mismo comando pero sin el -PAG opción. Utilizaremos una herramienta de terminal Linux estándar 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.

conversión de puerto disbale

24. Deshabilitar la conversión del nombre de host


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

$ lsof -i -n

Esta vez, lsof no convertirá los números de red en nombres de host. Use 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. Activar 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

Este comando generará todas las conexiones UDP en curso cada 5 segundos hasta que finalice el comando usando Ctrl + C. También puede usar el + r opción, 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 los puertos TCP


Podemos enumerar todos los procesos que escuchan puertos TCP utilizando la utilidad lsof. Haremos uso de varios parámetros ya mostrados para realizar esta tarea. Mira el siguiente ejemplo para descubrir cómo funciona esto.

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

Este comando deshabilita la conversión de nombres de host y nombres de puerto utilizando el -norte y -PAG opción, que se fusionan entre sí. los -s La opción le dice a lsof que solo estamos interesados ​​en los procesos que escuchan los puertos TCP.

27. Lista de procesos basados ​​en protocolos


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

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

El primer comando muestra todos los archivos TCP que utilizan el puerto https, que es 443 de forma predeterminada. 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 usan conexiones IPv4.

$ lsof -i4 -a -i UDP:ntp

28. Visualizar 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 muestra 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 nuestra guía sobre el comando grep de Linux 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 enumeraremos 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

los -notario público La opción deshabilita la conversión de los nombres de host y puerto. Se utiliza para acelerar el proceso general y no es obligatorio.

30. Listar todas las conexiones SSH activas


También podemos enumerar todas las conexiones ssh realizadas desde / a 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

Los dos comandos anteriores funcionan de manera bastante similar. Sin embargo, este último es más rápido debido al uso de algunos indicadores de inhibición como -norte y -PAG.

31. Lista de procesos 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 utilizando Linux, que se ejecuta junto con lsof.

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

Entonces, simplemente pasando el archivo particular a lsof dentro de backticks, podemos hacer esto. Puede reemplazar cualquiera de los anteriores con archivos que desea inspeccionar y obtener una lista de los procesos que están accediendo a eso. Utilizar el -t opción 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


Como lsof proporciona la información de propiedad de los archivos abiertos, podemos utilizarla para eliminar un proceso desde el terminal. El siguiente comando ilustra cómo crear todos los procesos propiedad del usuario ABC utilizando 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 distribuciones de Linux más recientes requerirán que tengas sudo privilegios si desea eliminar los procesos de otros usuarios.

33. Mostrar archivos usando expresiones regulares


La utilidad lsof permite a los administradores filtrar la información utilizando patrones de expresión regulares. 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 qué procesos están utilizando NFS


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

$ lsof -N

El resultado 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 con el comando grep y ayudan a reducir los problemas relacionados con las soluciones NAS y SAN de Linux.

35. Lista de archivos usados ​​pero eliminados


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

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

Este comando enumerará el PID de todos los archivos que el kernel del sistema operativo ha eliminado recientemente pero que aún ocupa espacio en su máquina. Puede usar estos PID para eliminar estos procesos.

36. Cuenta el número de entradas


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

$ 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 ejecutar. 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

los -w La opción suprimirá cualquier advertencia potencial. Deberías usar el + w opción para volver a habilitar esta función.

$ lsof -t -i -nP +w

De esta manera, podemos establecer el parámetro de advertencia según sea necesario. A menudo es útil cuando se usa junto con scripts de shell de Linux.

38. Mostrar información de 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 para los indicadores del compilador y el cargador son útiles tanto para los desarrolladores del sistema como para los administradores.

lsof información de la versión

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 experimentados de Linux.

40. Mostrar página de manual


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

$ man lsof

Esto le proporcionará toda la información requerida para manejar lsof y usarla para las tareas diarias de monitoreo del sistema. Es extremadamente útil para los nuevos usuarios, y siempre debe consultar esto 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 parezca complejo para muchos, el uso de esta herramienta no es diferente de 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 regularmente para obtener más guías sobre emocionantes comandos de Linux.