LINUX

Comando lsof de Linux con ejemplos

lsof comando

El comando Lsof significa ‘Listar archivos abiertos’. Es muy útil conocer los detalles sobre los archivos que se han abierto y sus respectivos procesos. Con la ayuda de este comando, puede monitorear su sistema para ver lo que realmente está sucediendo y también averiguar los detalles sobre los archivos que están abiertos en algunas particiones en particular.

En este tutorial, enumero el uso común del comando lsof con ejemplos.

1) Lista de procesos abiertos por archivo específico

Para enumerar los procesos que fueron abiertos por algún archivo específico, simplemente ejecute el comando lsof seguido de la ruta del archivo. es decir, para ver los procesos abiertos por el archivo / var / log / messages, simplemente ejecute:

# lsof /var/log/messages

Salida de muestra:

# lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1395 root 3w REG 202,0 59932 17322 /var/log/messages

2) Listar procesos usando un punto de montaje / partición

Al intentar desmontar alguna partición, es posible que haya visto el error «Dispositivo o recurso ocupado», esto sucede porque otros procesos todavía están usando esa partición o punto de montaje en particular. Necesitamos usar lsof para descubrir esos procesos y matarlos antes de desmontar con éxito la partición. Para ver qué procesos están usando alguna partición en particular, use el comando lsof seguido del nombre de la partición de la siguiente manera:

# lsof /run

Salida de muestra:

# lsof /run
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-j 1065 root mem REG 0,17 6488064 1362725 /run/log/journal/72863e389b584a4dab36fae7f3bffda2/system.journal
systemd-j 1065 root mem REG 0,17 8 810 /run/systemd/journal/kernel-seqnum
systemd-j 1065 root 12u REG 0,17 6488064 1362725 /run/log/journal/72863e389b584a4dab36fae7f3bffda2/system.journal
systemd-u 1078 root 6u REG 0,17 8 3703 /run/udev/queue.bin
NetworkMa 1388 root 20w FIFO 0,17 0t0 3912 /run/systemd/inhibit/1.ref
rsyslogd 1395 root mem REG 0,17 6488064 1362725 /run/log/journal/72863e389b584a4dab36fae7f3bffda2/system.journal

3) Lista de archivos abiertos por algunos usuarios específicos

Para ver la lista de archivos abiertos por algún usuario en particular, use la opción «-u» junto con lsof commad.

# lsof –u username

# lsof -u root

COMMAND     PID USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME

systemd       1 root  cwd       DIR              202,0      4096          2 /

systemd       1 root  rtd       DIR              202,0      4096          2 /

systemd       1 root  txt       REG              202,0   1214424       9632 /usr/lib/systemd/systemd

systemd       1 root  mem       REG              202,0     58288      17357 /usr/lib64/libnss_files-2.17.so

systemd       1 root  mem       REG              202,0     90632       9967 /usr/lib64/libz.so.1.2.7

systemd       1 root  mem       REG              202,0     19888       9738 /usr/lib64/libattr.so.1.1.0

systemd       1 root  mem       REG              202,0    113320      17354 /usr/lib64/libnsl-2.17.so

systemd       1 root  mem       REG              202,0    153184       9838 /usr/lib64/liblzma.so.5.0.99

systemd       1 root  mem       REG              202,0    398264       9898 /usr/lib64/libpcre.so.1.2.0

systemd       1 root  mem       REG              202,0     19512      17350 /usr/lib64/libdl-2.17.so

systemd       1 root  mem       REG              202,0   2107600       9733 /usr/lib64/libc-2.17.so

systemd       1 root  mem       REG              202,0    141616       9877 /usr/lib64/libpthread-2.17.so

systemd       1 root  mem       REG              202,0     88720      17522 /usr/lib64/libgcc_s-4.8.2-20140120.so.1

systemd       1 root  mem       REG              202,0    304536       9762 /usr/lib64/libdbus-1.so.3.7.4

systemd       1 root  mem       REG              202,0     44048      17367 /usr/lib64/librt-2.17.so

4) Descubra los procesos que utilizan algún puerto en particular

Muchas veces nos encontramos con que algunos servicios no se pueden vincular a un puerto porque el puerto ya está siendo utilizado por otros procesos. En tales casos, es necesario encontrar ese proceso usando el puerto y matarlo. Aquí hay un ejemplo que puede ayudar:

 # lsof -i :25

5) Lista de conexiones de red

Puede utilizar lsof para enumerar las conexiones de red. Utilice la ‘opción’ i ‘junto con lsof para ver estos detalles.

# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae 1383 avahi 12u IPv4 3397 0t0 UDP *:mdns
avahi-dae 1383 avahi 13u IPv4 3398 0t0 UDP *:53376
chronyd 1393 chrony 1u IPv4 2712 0t0 UDP *:ntp
chronyd 1393 chrony 2u IPv6 2713 0t0 UDP *:ntp
chronyd 1393 chrony 3u IPv4 2714 0t0 UDP localhost:323
chronyd 1393 chrony 5u IPv6 2715 0t0 UDP localhost:323
dhclient 1497 root 6u IPv4 4179 0t0 UDP *:bootpc
dhclient 1497 root 20u IPv4 4151 0t0 UDP *:24561
dhclient 1497 root 21u IPv6 4152 0t0 UDP *:20528
sshd 1707 root 3u IPv4 4897 0t0 TCP *:ssh (LISTEN)
sshd 1707 root 4u IPv6 4908 0t0 TCP *:ssh (LISTEN)
sshd 25453 root 3u IPv4 1601772 0t0 TCP li978-9.members.linode.com:ssh->182.188.228.74:casp (ESTABLISHED)

6) Encuentra archivos abiertos por algún demonio en particular.

Para mostrar todos los archivos abiertos por un demonio específico, use la opción ‘c’ con lsof seguido del nombre del demonio.

 # lsof –c mysql
mysqld 991 admin cwd DIR 8,3 240 148743 /home/admin/novell/idm/mysql/data
mysqld 991 admin rtd DIR 8,3 536 2 /
mysqld 991 admin txt REG 8,3 5464060 148691 /home/admin/novel/bin/mysqld
mysqld 991 admin 0r CHR 1,3 41715 /dev/null
mysqld 991 admin 1w REG 8,3 1250 149954 /home/admin/novell/mysql/mysql.log
mysqld 991 admin 2w REG 8,3 1250 149954 /home/admin/novell/mysql/mysql.log
mysqld 991 admin 3u IPv4 86990 TCP

7) Enumere todos los archivos abiertos por ID de proceso

Puede usar la opción ‘p’ junto con el comando lsof para averiguar la lista de archivos abiertos por cualquier proceso en particular.

# lsof -p PID

Reemplace PID con el ID del proceso.

# lsof -p 484

COMMAND   PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME

fsnotify_ 484 root  cwd       DIR  202,0     4096    2 /

fsnotify_ 484 root  rtd       DIR  202,0     4096    2 /

fsnotify_ 484 root  txt   unknown                      /proc/484/exe

8) Matar procesos para algún usuario en particular

Puede eliminar todos los procesos que pertenecen a algún usuario en particular usando el siguiente comando, reemplace USERNAME con su nombre de usuario real:

# kill -9 `lsof -t -u USERNAME

9) Descubra la asignación de puertos y servicios

Puede encontrar la asignación de puertos y sus servicios afiliados en un sistema Linux usando el comando lsof. El siguiente comando le mostrará los detalles de mapeo para los diversos servicios en ejecución y sus puertos asociados en la interfaz de red IPV4:

# lsof -Pnl +M -i4
# lsof -Pnl +M -i4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae 1383 70 12u IPv4 3397 0t0 UDP *:5353
avahi-dae 1383 70 13u IPv4 3398 0t0 UDP *:53376
chronyd 1393 998 1u IPv4 2712 0t0 UDP *:123
chronyd 1393 998 3u IPv4 2714 0t0 UDP 127.0.0.1:323
dhclient 1497 0 6u IPv4 4179 0t0 UDP *:68
dhclient 1497 0 20u IPv4 4151 0t0 UDP *:24561
sshd 1707 0 3u IPv4 4897 0t0 TCP *:22 (LISTEN)
sshd 25453 0 3u IPv4 1601772 0t0 TCP 45.33.24.9:22->182.188.228.74:1130 (ESTABLISHED)
sshd 25549 0 3u IPv4 1602514 0t0 TCP 45.33.24.9:22->115.230.126.149:60138 (ESTABLISHED)
sshd 25550 74 3u IPv4 1602514 0t0 TCP 45.33.24.9:22->115.230.126.149:60138 (ESTABLISHED)

El siguiente comando le mostrará información de mapeo para la interfaz de red IPV6:

# lsof -Pnl +M -i6
[root@localhost ~]# lsof -Pnl +M -i6
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 1393 998 2u IPv6 2713 0t0 UDP *:123
chronyd 1393 998 5u IPv6 2715 0t0 UDP [::1]:323
dhclient 1497 0 21u IPv6 4152 0t0 UDP *:20528
sshd 1707 0 4u IPv6 4908 0t0 TCP *:22 (LISTEN)
[root@localhost ~]# lsof -Pnl +M -i4

10) Encuentra el programa que se ejecuta en un puerto desconocido

Para verificar si hay puertos sospechosos en su sistema, simplemente ejecute el comando netstat.

# netstat –an
udp 0 0 0.0.0.0:32853 0.0.0.0:*
udp 0 0 0.0.0.0:56655 0.0.0.0:*
udp 0 0 0.0.0.0:5500 0.0.0.0:*
udp 0 0 0.0.0.0:78 0.0.0.0:*

En el resultado anterior, puede ver que el puerto 5500 es desconocido. Entonces, puede ubicar el programa usando el puerto con el siguiente comando:

 # lsof -i udp:5500

11) Ver todas las conexiones TCP o UDP

Utilice el siguiente comando para ver las conexiones TCP y UDP en su sistema Linux:

# lsof -i tcp; lsof -i udp;
# lsof -i tcp; lsof -i udp;
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1707 root 3u IPv4 4897 0t0 TCP *:ssh (LISTEN)
sshd 1707 root 4u IPv6 4908 0t0 TCP *:ssh (LISTEN)
sshd 25453 root 3u IPv4 1601772 0t0 TCP li978-9.members.linode.com:ssh->182.188.228.74:casp (ESTABLISHED)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae 1383 avahi 12u IPv4 3397 0t0 UDP *:mdns
avahi-dae 1383 avahi 13u IPv4 3398 0t0 UDP *:53376
chronyd 1393 chrony 1u IPv4 2712 0t0 UDP *:ntp
chronyd 1393 chrony 2u IPv6 2713 0t0 UDP *:ntp
chronyd 1393 chrony 3u IPv4 2714 0t0 UDP localhost:323
chronyd 1393 chrony 5u IPv6 2715 0t0 UDP localhost:323
dhclient 1497 root 6u IPv4 4179 0t0 UDP *:bootpc
dhclient 1497 root 20u IPv4 4151 0t0 UDP *:24561
dhclient 1497 root 21u IPv6 4152 0t0 UDP *:20528

12) Ejecute lsof en modo de repetición

También podemos ejecutar lsof en modo de repetición, lo que significa que mostrará los resultados una vez y luego tomará un descanso durante unos segundos y luego mostrará los resultados actualizados nuevamente en los intervalos mencionados. Es muy útil para solucionar problemas de rendimiento del sistema Linux.

Ejecute el comando lsof seguido de la opción «-r» y el intervalo de retraso en segundos. Encuentra a continuación un ejemplo

Vigile la actividad de los usuarios cada 3 segundos

# lsof -r 3 -u username

Conclusión

En este tutorial aprendimos cómo usar el comando lsof en Linux con ejemplos. Si tiene alguna pregunta o idea sobre este tutorial, utilice la sección de comentarios a continuación.

Publicaciones relacionadas

Deja una respuesta

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

Botón volver arriba
Cerrar