GNU/Linux >> Tutoriales Linux >  >> 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 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 referirse a varios tipos de archivos, incluidos archivos normales, directorios, flujos de red, referencias de ejecución, 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 cuando solucionan 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 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 precisamente 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 la seguridad de su red usando esta información.

1. Listar todos los archivos abiertos

En su uso más simple, lsof imprime todos los archivos abiertos actualmente. No se asuste 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 COMANDO, PID, USUARIO, FD y TIPO.

$ 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 bloqueos de kernel

El resultado del comando anterior contiene una gran cantidad de 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 -b opción.

$ lsof -b
- -

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

3. Listar archivos según el nombre de usuario

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

$ lsof -u abc

Este comando enumerará los archivos abiertos por el usuario abc . 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 mostrará una lista de los archivos abiertos por los tres usuarios hipotéticos. También puede agregar la ^(negación) operador delante de un nombre de usuario. Hará que lsof omita los archivos abiertos por esos usuarios.

$ lsof -u ^xyz

4. Mostrar archivos de red

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

$ lsof -i

Imprimirá todos los archivos de red junto con su tipo y protocolos asociados. Usa -i4 o -i6 para listar 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 actualmente abiertos. TCP o Transmission Control Protocol es el protocolo de comunicación de facto utilizado por las redes modernas. Para listar 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 listar todos los procesos UDP usando lsof.

$ lsof -i UDP

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

El -i 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 sólidas de iptables de Linux.

$ lsof -i TCP:22

Este comando mostrará una lista de los procesos que se ejecutan 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. Enumerar los 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á procesos que se ejecuten en cualquier puerto TCP entre 1 y 1024 y enumerará todos los archivos activos creados por estos procesos.

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 enumerar 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 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á los archivos abiertos por el proceso 111.

9. Listar 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/

El /proc El directorio contiene información sobre procesos en ejecución activa. Puede inspeccionar fácilmente esta información usando lsof en distribuciones 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 (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 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 contengan el mismo PID.

11. Listar todos los PID activos

La utilidad lsof también permite a los administradores enumerar todos los procesos que se están ejecutando 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 únicamente. Simplemente podemos buscar un PID específico y enviarlo a otros comandos.

12. Listar archivos según el dispositivo

Los archivos de dispositivo son un tipo especial de archivo en los 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 listar sus dispositivos bloqueados usando lsblk dominio. La mayoría de las distribuciones modernas de Linux mantienen estos archivos en /dev directorio.

13 Lista de archivos de terminal

El /dev El directorio también contiene archivos de dispositivos especiales como /dev/tty . Estos son archivos de dispositivo únicos que brindan acceso a la 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 ejemplo final 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. Lista recursivamente 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, enumeramos todos los archivos abiertos usando sus PID. Sin embargo, también podemos imprimir la lista de archivos activos en un momento dado utilizando su nombre de proceso. Eche un vistazo al siguiente ejemplo y escríbalo en su emulador de terminal de 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 comiencen con la cadena chrome. Este comando los presentará todos en la salida.

17. Listar 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. Lista de 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 -t opción introducida anteriormente.

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

Dado que la opción -t solo proporciona los PID, la aprovechamos para producir el resultado esperado. Este comando mostrará una lista de todos los ID de proceso que han abierto /usr/share/mime/mime.cache documento.

19. Enumerar archivos según los 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. El -a 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. Deberá pasar la -F opción junto con las listas de caracteres para la identificación de campos.

$ lsof -F
$ lsof -FucsS

El primer comando produce una salida útil que se puede guardar usando el operador de redirección (> ) y analizado 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 puede encontrar algunos elementos que el usuario solicitó. Es bastante difícil encontrar esos artículos ya que la salida producida por lsof es muy extensa. Afortunadamente, el -V La opción permite que lsof imprima 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 usar para encontrar 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

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 de TCP/TPI.

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

La -P 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 que tarda este comando con el tiempo que tarda el mismo comando pero sin -P opción. Usaremos una herramienta de terminal estándar de Linux llamada time 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.

24. Deshabilitar la conversión de nombre de host

Al igual que los nombres de los puertos, también podemos deshabilitar la conversión de nombres de host a partir de números de red. También dará como resultado 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. 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. Habilitar 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 siguientes ejemplos 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 utilizar +r opción, que saldrá automáticamente si no hay cargos adicionales en la salida.

$ lsof +r 5 -i UDP

26. Listar todos los procesos que escuchan los puertos TCP

Podemos enumerar todos los procesos que están escuchando puertos TCP utilizando la utilidad lsof. Haremos uso de varios parámetros ya mostrados para hacer esta tarea. Mire 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 usando -n y -P opción, que se fusionan. La -s La opción le dice a lsof que solo estamos interesados ​​en procesos que escuchan puertos TCP.

27. Enumerar procesos basados ​​en protocolos

También podemos definir protocolos específicos que nos interesen. 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 utilizan el puerto https, que es 443 de forma predeterminada. El último comando muestra todos los archivos UDP que utilizan el puerto NTP (Network Time Protocol). 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 nuestra guía sobre el comando grep de Linux para obtener más información sobre la búsqueda de patrones.

29. Lista de 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

El -nP La opción deshabilita la conversión de 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/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

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

31. Enumerar procesos según el acceso a archivos

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

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

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

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

32. Eliminar procesos propiedad del usuario

Dado que lsof proporciona la información de propiedad de los archivos abiertos, podemos utilizarla para eliminar 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 distribuciones de Linux más recientes requerirán que tenga sudo privilegios 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 expresiones regulares. Deberá colocar el patrón especificado dentro de dos barras diagonales (/) para que esto funcione. Por ejemplo, el siguiente ejemplo mostrará una lista de todos los comandos que tienen más de seis caracteres.

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

Tenga en cuenta que las barras diagonales son obligatorias cuando se usan 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 utilizando recursos NFS (Network File System) en nuestro servidor. El comando lsof en Linux expone el -N opción para esta tarea. Consulte 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 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 se eliminan actualmente. Esto es útil en varias situaciones, como cuando se verifica el espacio en disco usando el comando df de Linux.

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

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

36. Número de recuento de entradas

Dado que la salida producida por lsof contiene muchas entradas, a menudo se vuelve difícil visualizarlas. Podemos contar fácilmente el número de líneas presentes en esta salida canalizando estos datos a una herramienta práctica y útil de Linux 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 de lsof pueden mostrarle mensajes de advertencia al ejecutarlos. Por suerte, 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

El -w La opción suprimirá cualquier advertencia potencial. Debes usar +w opción para volver a habilitar esta característica.

$ lsof -t -i -nP +w

Entonces, de esta manera, podemos configurar el parámetro de advertencia según sea necesario. Suele ser ú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 del cargador son útiles tanto para los desarrolladores de sistemas como para los administradores.

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 consultarlo 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 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 debería consultar este manual si es un nuevo usuario de Linux sin experiencia previa con lsof o comandos de terminal de Linux similares.

$ man lsof

Esto le proporcionará toda la información necesaria para manejar lsof y utilizarlo para las tareas diarias de supervisión del sistema. Es extremadamente útil para 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 usan 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 lsof 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éjanos un comentario si tienes alguna pregunta con respecto a la utilidad lsof y visítanos regularmente para obtener más guías sobre los emocionantes comandos de Linux.


Linux
  1. 14 ejemplos de comandos SCP para transferir archivos de forma segura en Linux

  2. Comando de apagado de Linux

  3. 7 ejemplos del comando lsof en Linux

  4. Comando ls de Linux - Lista de archivos

  5. 15 ejemplos de comandos lsof de Linux (identificar archivos abiertos)

50 ejemplos simples y útiles del comando Buscar en Linux

Cómo crear archivos en el sistema Linux:una guía definitiva

Cat Command en Linux:ejemplos esenciales y avanzados

Comando ls en Linux/UNIX

Comando tar de Linux para comprimir y extraer archivos

Comando lsof en Linux con ejemplos