Tutorial del comando lsof de Linux para principiantes (15 ejemplos)

Cómo enumerar todos los archivos abiertos en Linux

los lsof El comando en Linux muestra en su salida información sobre los archivos que abren los procesos. En este artículo, discutiremos la herramienta lsof de Linux usando 15 ejemplos fáciles de entender. Tenga en cuenta que todos los ejemplos mencionados en este tutorial se han probado en Ubuntu 20.04 LTS, pero también funcionarán en otras distribuciones de Linux como Debian, Fedora y CentOS.

Acerca del comando lsof

Si desea ver r√°pidamente el nombre de los archivos que ha abierto un proceso en particular (o todos los procesos), el comando lsof le permite hacerlo. Un archivo abierto puede ser un archivo normal o un directorio, una biblioteca, un archivo especial o un dispositivo de bloque, un archivo especial de caracteres, una referencia de texto en ejecuci√≥n o incluso un flujo o un archivo de red. Tambi√©n puede enumerar los procesos por n√ļmero de puerto. Si no ha iniciado sesi√≥n como usuario ra√≠z, es posible que deba anteponer ‘sudo’ a los comandos.

Instalar el comando lsof de Linux

La mayor√≠a de las distribuciones de Linux vienen con lsof preinstalado. Si a√ļn no est√° instalado en su sistema, use los siguientes comandos:

En Ubuntu y Debian:

$ sudo apt install lsof

Y CentOS y Fedora:

$ dnf install lsof

1. Cómo enumerar todos los archivos abiertos

Para enumerar todos los archivos abiertos, ejecute el comando lsof sin argumentos:

lsof

Por ejemplo, aquí está la captura de pantalla de una parte de la salida que produjo el comando anterior en mi sistema:

Cómo enumerar todos los archivos abiertos en Linux

La primera columna representa el proceso mientras que la √ļltima columna contiene el nombre del archivo. Para obtener detalles sobre todas las columnas, dir√≠jase al comando p√°gina man.

2. Cómo listar archivos abiertos por procesos pertenecientes a un usuario específico

La herramienta también le permite listar archivos abiertos por procesos pertenecientes a un usuario específico. Se puede acceder a esta función mediante el -tu opción de línea de comandos.

lsof-u [user-name]

Por ejemplo:

lsof -u administrador

Cómo enumerar archivos abiertos por procesos que pertenecen a un usuario específico

3. C√≥mo listar archivos seg√ļn su direcci√≥n de Internet

La herramienta le permite enumerar archivos seg√ļn su direcci√≥n de Internet. Esto se puede hacer usando el -i opci√≥n de l√≠nea de comandos. Por ejemplo, si lo desea, puede hacer que los archivos IPv4 e IPv6 se muestren por separado. Para IPv4, ejecute el siguiente comando:

lsof -i 4

Por ejemplo:

Cómo enumerar archivos en función de su dirección de Internet

Del mismo modo, para IPv6, ejecute el siguiente comando:

lsof -i 6

Por ejemplo:

lsof -i 6Publicidad

Oyentes IPv6 LSOF

4. Cómo enumerar todos los archivos por nombre de aplicación

La opción de línea de comandos -c le permite abrir todos los archivos por nombre de programa.

$ lsof -c apache

No tiene que usar el nombre completo del programa ya que se muestran todos los programas que comienzan con la palabra ‘apache’. Entonces, en nuestro caso, enumerar√° todos los procesos de la aplicaci√≥n ‘apache2’.

Obtener archivos abiertos por nombre de programa

La opción -c es básicamente un atajo para los dos comandos:

$ lsof | grep apache

5. Cómo enumerar archivos específicos de un proceso

La herramienta tambi√©n le permite mostrar los archivos abiertos en funci√≥n de los n√ļmeros de identificaci√≥n del proceso (PID). Esto se puede hacer usando el -pags opci√≥n de l√≠nea de comandos.

lsof -p [PID]

Por ejemplo:

lsof -p 856

Cómo enumerar archivos específicos de un proceso

Continuando, también puede excluir PID específicos en la salida agregando el ^ símbolo ante ellos. Para excluir un PID específico, puede ejecutar el siguiente comando:

lsof -p [^PID]

Por ejemplo:

lsof -p ^1

Cómo enumerar archivos específicos de un proceso - resultado

Como puede ver en la captura de pantalla anterior, el proceso con id 1 est√° excluido de la lista.

6. Cómo enumerar las ID de los procesos que han abierto un archivo en particular

La herramienta le permite enumerar los ID de los procesos que han abierto un archivo en particular. Esto se puede hacer usando el -t opción de línea de comando.

$ lsof -t [file-name]

Por ejemplo: Publicidad

$ lsof -t /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0

Cómo enumerar los ID de los procesos que han abierto un archivo en particular

7. Cómo enumerar todos los archivos abiertos en un directorio

Si lo desea, también puede hacer que lsof busque todas las instancias abiertas de un directorio (incluidos todos los archivos y directorios que contiene). Se puede acceder a esta característica usando el +D opción de línea de comandos.

$ lsof +D [directory-path]

Por ejemplo:

$ lsof +D /usr/lib/locale

Cómo limitar lsof a un directorio en particular

8. Cómo enumerar todos los archivos de red de Internet y x.25 (HP-UX)

Esto es posible mediante el uso de la -i opci√≥n de l√≠nea de comandos que describimos anteriormente. Solo que tienes que usarlo sin ning√ļn argumento.

$ lsof-i

Cómo enumerar todos los archivos de red de Internet y x.25 (HP-UX)

9. Averig√ľe qu√© programa est√° usando un puerto

El interruptor -i del comando le permite encontrar un proceso o aplicaci√≥n que escucha un n√ļmero de puerto espec√≠fico. En el siguiente ejemplo, verifiqu√© qu√© programa est√° usando el puerto 80.

$ lsof -i :80

En lugar del n√ļmero de puerto, puede usar el nombre del servicio como se indica en el archivo /etc/services. Ejemplo para verificar qu√© aplicaci√≥n escucha en el puerto HTTPS (443):

$ lsof -i :https

Resultado:

Listar procesos por puerto abierto o servicio

Los ejemplos anteriores comprobar√°n tanto TCP como UDP. Si desea verificar solo TCP o UDP, anteponga la palabra ‘tcp’ o ‘udp’. Por ejemplo, qu√© aplicaci√≥n est√° usando el puerto 25 TCP:

$ lsof -i tcp:25

o qué aplicación usa el puerto UDP 53:

$ lsof -i udp:53

Puerto LSOD UDP 53

10. C√≥mo enumerar los archivos abiertos seg√ļn el rango de puertos

La utilidad también le permite enumerar los archivos abiertos en función de un puerto específico o rango de puertos. Por ejemplo, para mostrar archivos abiertos para el puerto 1-1024, use el siguiente comando:

$ lsof -i :1-1024

C√≥mo listar archivos abiertos seg√ļn el rango de puertos

11. C√≥mo enumerar los archivos abiertos seg√ļn el tipo de conexi√≥n (TCP o UDP)

La herramienta le permite listar archivos seg√ļn el tipo de conexi√≥n. Por ejemplo, para archivos espec√≠ficos de UDP, use el siguiente comando:

$ lsof -i udp

C√≥mo listar archivos abiertos seg√ļn el tipo de conexi√≥n (TCP o UDP)

De manera similar, puede hacer que lsof muestre archivos específicos de TCP.

12. Cómo hacer que lsof enumere el PID principal de los procesos

Tambi√©n hay una opci√≥n que obliga a lsof a enumerar el n√ļmero de identificaci√≥n del proceso principal (PPID) en la salida. La opci√≥n en cuesti√≥n es -R.

$ lsof -R

Para obtener información de PPID para un PID específico, puede ejecutar el siguiente comando:

$ lsof -p [PID] -R

Por ejemplo:

$ lsof -p 3 -R

Cómo hacer que lsof enumere el PID principal de los procesos

13. Cómo encontrar actividad en la red por usuario

Al usar una combinaci√≥n de las opciones de l√≠nea de comandos -i y -u, podemos buscar todas las conexiones de red de un usuario de Linux. Esto puede ser √ļtil si inspecciona un sistema que podr√≠a haber sido pirateado. En este ejemplo, verificamos toda la actividad de red del usuario www-data:

$ lsof -a -i -u www-data

Encuentra actividad de red por usuario en Linux

14. Enumere todos los archivos mapeados en memoria

Este comando enumera todos los archivos asignados a la memoria en Linux.

$ lsof -d mem

Buscar archivos asignados a la memoria

15. Lista todos los archivos NFS

La opción -N le muestra una lista de todos los archivos NFS (Network File System).

$lsof -N

Conclusión

A pesar de que lsof ofrece una plétora de opciones, las que hemos discutido aquí deberían ser suficientes para comenzar. Una vez que haya terminado de practicar con estos, diríjase a la herramienta página man para aprender más al respecto. Ah, y en caso de que tenga alguna duda o consulta, deje un comentario a continuación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *