GNU/Linux >> Tutoriales Linux >  >> Linux

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

lsof significa Lista de archivos abiertos.

Es fácil recordar el comando lsof si piensa en él como "ls + of", donde ls significa lista y of significa archivos abiertos.

Es una utilidad de línea de comandos que se utiliza para enumerar la información sobre los archivos que varios procesos abren. En Unix, todo es un archivo (tuberías, sockets, directorios, dispositivos, etc.). Entonces, al usar lsof, puede obtener información sobre cualquier archivo abierto.

1. Introducción a lsof

Simplemente escribiendo lsof proporcionará una lista de todos los archivos abiertos pertenecientes a todos los procesos activos.

# lsof

COMMAND  PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init       1       root  cwd       DIR        8,1      4096          2 /
init       1       root  txt       REG        8,1    124704     917562 /sbin/init
init       1       root    0u      CHR        1,3       0t0       4369 /dev/null
init       1       root    1u      CHR        1,3       0t0       4369 /dev/null
init       1       root    2u      CHR        1,3       0t0       4369 /dev/null
init       1       root    3r     FIFO        0,8       0t0       6323 pipe
...

De forma predeterminada, se muestra un archivo por línea. La mayoría de las columnas se explican por sí mismas. Explicaremos los detalles sobre un par de columnas crípticas (FD y TYPE).

FD:representa el descriptor del archivo. Algunos de los valores de FD son,

  • cwd:directorio de trabajo actual
  • txt:archivo de texto
  • mem:archivo asignado a la memoria
  • mmap:dispositivo de memoria asignada
  • NÚMERO:representa el descriptor de archivo real. El carácter después del número, es decir, '1u', representa el modo en que se abre el archivo. r para leer, w para escribir, u para leer y escribir.

TIPO:especifica el tipo de archivo. Algunos de los valores de TYPE son,

  • REG:archivo normal
  • DIR – Directorio
  • FIFO:primero en entrar, primero en salir
  • CHR:archivo especial de caracteres

Para obtener una lista completa de FD y TIPO, consulte man lsof.

2. Lista de procesos que abrieron un archivo específico

Puede enumerar solo los procesos que abrieron un archivo específico proporcionando el nombre del archivo como argumentos.

# lsof /var/log/syslog

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd 488 syslog    1w   REG    8,1     1151 268940 /var/log/syslog

3. Lista de archivos abiertos en un directorio

Puede enumerar los procesos que abrieron archivos en un directorio específico usando la opción '+D'. +D también recurrirá a los subdirectorios. Si no desea que lsof recurra, utilice la opción '+d'.

# lsof +D /var/log/

COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd  488 syslog   1w   REG    8,1     1151 268940 /var/log/syslog
rsyslogd  488 syslog   2w   REG    8,1     2405 269616 /var/log/auth.log
console-k 144   root   9w   REG    8,1    10871 269369 /var/log/ConsoleKit/history

4. Enumere los archivos abiertos según los nombres de los procesos que comienzan con

Puede enumerar los archivos abiertos por nombres de proceso que comienzan con una cadena, usando la opción '-c'. -c seguido del nombre del proceso enumerará los archivos abiertos por el proceso que comienzan con ese nombre de proceso. Puede dar múltiples interruptores -c en una sola línea de comando.

# lsof -c ssh -c init

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init         1       root  txt    REG        8,1   124704  917562 /sbin/init
init         1       root  mem    REG        8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
init         1       root  mem    REG        8,1    30684 1442694 /lib/i386-linux-gnu/librt-2.13.so
...
ssh-agent 1528 lakshmanan    1u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    2u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    3u  unix 0xdf70e240      0t0   10464 /tmp/ssh-sUymKXxw1495/agent.1495

5. Listar procesos usando un punto de montaje

En algún momento, cuando intentamos desmontar un directorio, el sistema dirá el error "Dispositivo o recurso ocupado". Entonces, debemos averiguar cuáles son todos los procesos que usan el punto de montaje y eliminar esos procesos para desmontar el directorio. Usando lsof podemos encontrar esos procesos.

# lsof /home

Lo siguiente también funcionará.

# lsof +D /home/

6. Lista de archivos abiertos por un usuario específico

Para encontrar la lista de archivos abiertos por un usuario específico, use la opción '-u'.

# lsof -u lakshmanan

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
update-no 1892 lakshmanan   20r  FIFO        0,8      0t0      14536 pipe
update-no 1892 lakshmanan   21w  FIFO        0,8      0t0      14536 pipe
bash      1995 lakshmanan  cwd    DIR        8,1     4096     393218 /home/lakshmanan

A veces, es posible que desee enumerar los archivos abiertos por todos los usuarios, espere algunos 1 o 2. En ese caso, puede usar '^' para excluir solo a un usuario en particular de la siguiente manera

# lsof -u ^lakshmanan

COMMAND    PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
rtkit-dae 1380      rtkit    7u     0000        0,9         0       4360 anon_inode
udisks-da 1584       root  cwd       DIR        8,1      4096          2 /

El comando anterior enumeró todos los archivos abiertos por todos los usuarios, espere el usuario 'lakshmanan'.

7. Listar todos los archivos abiertos por un proceso específico

Puede enumerar todos los archivos abiertos por un proceso específico usando la opción '-p'. A veces será útil obtener más información sobre un proceso específico.

# lsof -p 1753

COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    1753 lakshmanan  cwd    DIR    8,1     4096  393571 /home/lakshmanan/test.txt
bash    1753 lakshmanan  rtd    DIR    8,1     4096       2 /
bash    1753 lakshmanan  255u   CHR  136,0      0t0       3 /dev/pts/0
...

8. Elimina todos los procesos que pertenecen a un usuario en particular

Cuando desee eliminar todos los procesos que tienen archivos abiertos por un usuario específico, puede usar la opción '-t' para mostrar la salida solo con la identificación del proceso y pasarla a eliminar de la siguiente manera

# kill -9 `lsof -t -u lakshmanan`

El comando anterior eliminará todos los procesos pertenecientes al usuario 'lakshmanan', que tiene archivos abiertos.

Del mismo modo, también puede usar '-t' de muchas maneras. Por ejemplo, para enumerar el ID de proceso de un proceso que abrió /var/log/syslog puede hacerlo

# lsof -t /var/log/syslog

489

Hablando de matar, ¿sabías que hay 4 formas de matar un proceso?

9. Combina más opciones de lista usando OR/AND

De manera predeterminada, cuando usa más de una opción de lista en lsof, aparecerán en OR. Por ejemplo,

# lsof -u lakshmanan -c init

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
init         1       root  cwd    DIR        8,1     4096          2 /
init         1       root  txt    REG        8,1   124704     917562 /sbin/init
bash      1995 lakshmanan    2u   CHR      136,2      0t0          5 /dev/pts/2
bash      1995 lakshmanan  255u   CHR      136,2      0t0          5 /dev/pts/2
...

El comando anterior utiliza dos opciones de lista, '-u' y '-c'. Entonces, el comando enumerará el proceso que pertenece al usuario 'lakshmanan' y el nombre del proceso comienza con 'init'.

Pero cuando desea enumerar un proceso que pertenece al usuario 'lakshmanan' y el nombre del proceso comienza con 'init', puede usar la opción '-a'.

# lsof -u lakshmanan -c init -a

El comando anterior no generará nada, porque no existe un proceso llamado 'init' que pertenezca al usuario 'lakshmanan'.

10. Ejecuta lsof en modo de repetición

lsof también es compatible con el modo de repetición. Primero enumerará los archivos en función de los parámetros dados, y los retrasará durante segundos específicos y volverá a enumerar los archivos en función de los parámetros dados. Puede ser interrumpido por una señal.

El modo de repetición se puede habilitar usando '-r' o '+r'. Si se usa '+r', el modo de repetición finalizará cuando no se encuentren archivos abiertos. '-r' continuará enumerando, retrasando, enumerando hasta que se produzca una interrupción, independientemente de si los archivos están abiertos o no.

Cada salida de ciclo se separará usando ‘=======’. También especifica el retraso de tiempo como '-r' | '+r'.

# lsof -u lakshmanan -c init -a -r5

=======
=======
COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
inita.sh 2971 lakshmanan  cwd    DIR    8,1     4096  393218 /home/lakshmanan
inita.sh 2971 lakshmanan  rtd    DIR    8,1     4096       2 /
inita.sh 2971 lakshmanan  txt    REG    8,1    83848  524315 /bin/dash
inita.sh 2971 lakshmanan  mem    REG    8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
inita.sh 2971 lakshmanan  mem    REG    8,1   117960 1442612 /lib/i386-linux-gnu/ld-2.13.so
inita.sh 2971 lakshmanan    0u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    1u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    2u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan   10r   REG    8,1       20  393578 /home/lakshmanan/inita.sh
=======

En la salida anterior, durante los primeros 5 segundos, no hay salida. Después de eso, se inicia un script llamado "inita.sh" y enumera la salida.

Encontrar conexión de red

Las conexiones de red también son archivos. Entonces podemos encontrar información sobre ellos usando lsof.

11. Listar todas las conexiones de red

Puede enumerar todas las conexiones de red abiertas usando la opción '-i'.

# lsof -i

COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae  515 avahi   13u  IPv4   6848      0t0  UDP *:mdns
avahi-dae  515 avahi   16u  IPv6   6851      0t0  UDP *:52060
cupsd     1075  root    5u  IPv6  22512      0t0  TCP ip6-localhost:ipp (LISTEN)

También puede usar '-i4' o '-i6' para listar solo 'IPV4' o 'IPV6' respectivamente.

12. Listar todos los archivos de red en uso por un proceso específico

Puede enumerar todos los archivos de red que utiliza un proceso de la siguiente manera

# lsof -i -a -p 234

También puede usar lo siguiente

# lsof -i -a -c ssh

El comando anterior enumerará los archivos de red abiertos por los procesos que comienzan con ssh.

13. Lista de procesos que están escuchando en un puerto en particular

Puede enumerar los procesos que están escuchando en un puerto en particular usando '-i' con ':' de la siguiente manera

# lsof -i :25

COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2541 Debian-exim    3u  IPv4   8677       TCP localhost:smtp (LISTEN)

14. Listar todas las conexiones TCP o UDP

Puede listar todas las conexiones TCP o UDP especificando el protocolo usando '-i'.

# lsof -i tcp; lsof -i udp;

15. Listar todos los archivos del sistema de archivos de red (NFS)

Puede enumerar todos los archivos NFS usando la opción '-N'. El siguiente comando lsof enumerará todos los archivos NFS utilizados por el usuario 'lakshmanan'.

# lsof -N -u lakshmanan -a

Linux
  1. 7 ejemplos del comando lsof en Linux

  2. Ejemplos prácticos del comando rsync en Linux

  3. 7 ejemplos de comandos Linux df

  4. 8 ejemplos de comandos TR de Linux

  5. Ejemplos de comandos rm en Linux

Comando SS en Linux con ejemplos útiles

Comando lsof de Linux explicado con 12 ejemplos prácticos

Ejemplos de comandos id en Linux

Ejemplos de comandos lsattr en Linux

Comando lsof en Linux con ejemplos

Comando Linux comm con ejemplos