lsof es una utilidad de línea de comandos para todos los sistemas operativos similares a Unix y Linux para verificar «lista de archivos abiertosEl nombre «lsof» se deriva de esta funcionalidad. El comando lsof se usa principalmente para recuperar información sobre archivos que varios procesos abren. Los archivos abiertos en un sistema pueden ser de diferentes tipos, como archivos de disco, sockets de red, canalizaciones con nombre y dispositivos. Esta característica distintiva permite depurar y comprender mejor el sistema operativo Linux.
Cuando hacemos la instalación mínima de CentOS / RHEL / ubuntu/ abrirSUSE, lsof no es parte de la instalación predeterminada, así que use el siguiente comando para instalar el comando o la utilidad lsof
Para el sistema CentOS/RHEL,
~] # yum install lsof -y
Sistemas basados en Debian (Ubuntu / Linux Mint)
~] # apt install lsof -y
Para el sistema OpenSUSE,
~] # zypper install lsof
El comando “lsof” viene equipado con muchas opciones e interruptores. Será muy interesante explorar algunos de estos importantes. En este artículo discutiremos 18 ejemplos útiles de comandos lsof para los geeks de Linux.
Ejemplo: 1) Enumere todos los archivos abiertos de su sistema (lsof)
Ejecutar el comando lsof sin ninguna opción enumerará todos los archivos abiertos de su sistema que pertenecen a todos los procesos activos.
Simplemente escribiendo el comando «lsof» sin ninguna opción en la línea de comando da el siguiente resultado,
Nota:- Dado que la salida de lsof brinda mucha información a STDOUT, será mejor usar la tubería «|» operación para ver esta salida página por página.
[[email protected] ~]# lsof | more COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 253,0 4096 128 / systemd 1 root rtd DIR 253,0 4096 128 / systemd 1 root txt REG 253,0 1489960 50674818 /usr/lib/systemd/systemd systemd 1 root mem REG 253,0 20032 33628284 /usr/lib64/libuuid.so.1.3.0 systemd 1 root mem REG 253,0 252704 33745961 /usr/lib64/libblkid.so.1.1.0
El resultado del comando anterior, si lo examina detenidamente, proporciona mucha información con muchos parámetros. Por ejemplo, proceso “sistemad” (que es un proceso daemon) tiene ID de proceso (PID) de “1”, el Usuario es “raíz“, Descriptor de archivo (DF) como «cwd” y etc. El FD presenta muchos valores, ya que uno es consciente de que el Descriptor de archivo se genera automáticamente para cualquier archivo abierto en los sistemas Linux. A continuación se muestran algunos de los valores «FD» conocidos que se utilizan para los comandos lsof,
Nota: En algunos casos, el «mem» va seguido de un número y varios caracteres como «r», «u», «w», etc. Estos caracteres son «r» para leer, «w» para escribir, «u» para leer y escribe.
Finalmente, el «ESCRIBE” en la salida del comando indica el tipo de archivo. Los siguientes son los tipos estándar de archivos en los sistemas Linux.
Los otros campos que se muestran junto con esto son los siguientes,
- DISPOSITIVO –> Identificación del dispositivo
- TAMAÑO/DESACTIVADO –> Tamaño real de este proceso (tomado durante el tiempo de ejecución)
- NODO –> Por lo general, número de inodo del directorio o directorio principal
- NOMBRE –> Ruta o enlace
Ejemplo: 2) Lista de archivos abiertos de un sistema de archivos específico (/proc)
Como usted sabe, el “/proc” existirá solo durante la vida útil del sistema operativo Linux, este directorio contiene mucha información importante relacionada con el proceso. Ejecutar «lsof» en /proc arrojará resultados interesantes para que exploremos,
[[email protected] ~]# lsof /proc COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 9r REG 0,3 0 6690 /proc/1/mountinfo systemd 1 root 11r REG 0,3 0 4026532018 /proc/swaps systemd-j 462 root 10r REG 0,3 0 6936 /proc/sys/kernel/hostname lsof 5186 root 3r DIR 0,3 0 1 /proc lsof 5186 root 6r DIR 0,3 0 28890 /proc/5186/fd [[email protected] ~]#
Como se mencionó anteriormente, «lsof» de «lsof» en sí mismo se captura aquí y se muestran todos los detalles. Además de «lsof», existen otros procesos como systemd y rsyslogd, que son demonios que se utilizan para fines de intercambio, montaje, etc.
De manera similar, podemos listar archivos abiertos de otro sistema de archivos como /var/log,
[[email protected] ~]# lsof /var/log/
El comando lsof se vuelve muy útil en una situación en la que los comandos df y du muestran diferentes usos del disco del mismo sistema de archivos, usando el comando lsof podemos encontrar archivos que se eliminaron mientras estaban abiertos y utilizados por algún proceso,
[[email protected] ~]# lsof /var/log | grep -i "deleted"
El comando anterior le dará el pid de los archivos que se eliminaron pero que aún existen en el sistema en estado eliminado. Entonces, para liberar el espacio del sistema de archivos, podemos eliminar el proceso de manera segura mediante su pid.
Ejemplo: 3) Lista de archivos abiertos para el comando «lsof»
«lsof» en sí mismo arroja un mensaje de error,
[[email protected] ~]# lsof lsof lsof: status error on lsof: No such file or directory lsof 4.87
Ejemplo: 4) Lista de archivos abiertos para usuarios (lsof -u )
“lsof” se puede utilizar para todos los usuarios que hayan iniciado sesión en el sistema Linux. En este caso, «lsof» mostrará todos los archivos abiertos para el usuario respectivo.
Listar todos los archivos abiertos para el usuario root
[[email protected] ~]# lsof -u root | more COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 253,0 4096 128 / systemd 1 root rtd DIR 253,0 4096 128 / systemd 1 root txt REG 253,0 1620416 51034677 /usr/lib/systemd/systemd systemd 1 root mem REG 253,0 20032 33628284 /usr/lib64/libuuid.so.1.3.0 systemd 1 root mem REG 253,0 252704 33745961 /usr/lib64/libblkid.so.1.1.0 systemd 1 root mem REG 253,0 90632 33628275 /usr/lib64/libz.so.1.2.7 systemd 1 root mem REG 253,0 153192 33618596 /usr/lib64/liblzma.so.5.0.99 systemd 1 root mem REG 253,0 19888 33656455 /usr/lib64/libattr.so.1.1.0 …………………………………………………………
Lista de archivos abiertos para usuarios no root, veamos todos los archivos abiertos para usuarios de linuxtechi,
[ro[email protected] ~]# lsof -u linuxtechi | more Or [[email protected] ~]# lsof -l -u linuxtechi | more
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2657 linuxtechi cwd DIR 253,0 4096 128 / sshd 2657 linuxtechi rtd DIR 253,0 4096 128 / sshd 2657 linuxtechi txt REG 253,0 815520 34698340 /usr/sbin/sshd sshd 2657 linuxtechi DEL REG 0,4 23850 /dev/zero sshd 2657 linuxtechi mem REG 253,0 15472 33831639 /usr/lib64/security/pam_lastlog.so sshd 2657 linuxtechi mem REG 253,0 68192 33628305 /usr/lib64/libbz2.so.1.0.6 sshd 2657 linuxtechi mem REG 253,0 153192 33618596 /usr/lib64/liblzma.so.5.0.99 sshd 2657 linuxtechi mem REG 253,0 91496 33628319 /usr/lib64/libelf-0.163.so sftp-serv 2661 linuxtechi mem REG 253,0 14608 33618582 /usr/lib64/libutil-2.17.so sftp-serv 2661 linuxtechi mem REG 253,0 61856 33863972 /usr/lib64/liblber-2.4.so.2.10.3 sftp-serv 2661 linuxtechi mem REG 253,0 344224 33863974 /usr/lib64/libldap-2.4.so.2.10.3 sftp-serv 2661 linuxtechi mem REG 253,0 19512 33618298 /usr/lib64/libdl-2.17.so sftp-serv 2661 linuxtechi mem REG 253,0 2516624 33657314 /usr/lib64/libcrypto.so.1.0.2k sftp-serv 2661 linuxtechi mem REG 253,0 164432 33618285 /usr/lib64/ld-2.17.so sftp-serv 2661 linuxtechi 0r FIFO 0,8 0t0 24046 pipe sftp-serv 2661 linuxtechi 1w FIFO 0,8 0t0 24047 pipe sftp-serv 2661 linuxtechi 2w FIFO 0,8 0t0 24048 pipe bash 2670 linuxtechi cwd DIR 253,0 79 17157147 /home/linuxtechi ………………………………………………………………………
Para listar todos los archivos abiertos excepto el usuario root, use ^(símbolo de intercalación) delante del usuario root ( lsof -u ^root),
[[email protected] ~]# lsof -u ^root | more COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME dbus-daem 1662 dbus cwd DIR 253,0 4096 128 / dbus-daem 1662 dbus rtd DIR 253,0 4096 128 / dbus-daem 1662 dbus txt REG 253,0 441176 17133533 /usr/bin/dbus-daemon dbus-daem 1662 dbus mem REG 253,0 57824 33618566 /usr/lib64/libnss_files-2.17.so dbus-daem 1662 dbus mem REG 253,0 19512 33618298 /usr/lib64/libdl-2.17.so dbus-daem 1662 dbus mem REG 253,0 398272 33628261 /usr/lib64/libpcre.so.1.2.0 dbus-daem 1662 dbus mem REG 253,0 2107816 33618292 /usr/lib64/libc-2.17.so ……………………………………………………………………………………………………………
Ejemplo: 5) Listar todos los archivos de dominio UNIX y de Internet abiertos (lsof -i -U)
Use la opción «-i -U» en el comando lsof para enumerar todos los archivos de dominio UNIX y de Internet abiertos en su sistema, el ejemplo se muestra a continuación
[[email protected] ~]# lsof -i -U COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 12u unix 0xffff8800b8baab40 0t0 11075 /run/systemd/cgroups-agent systemd 1 root 13u unix 0xffff8800b8bab2c0 0t0 11077 /run/systemd/private systemd 1 root 42u IPv4 16576 0t0 TCP *:sunrpc (LISTEN) systemd 1 root 43u IPv4 16577 0t0 UDP *:sunrpc rpcbind 1633 rpc 3u unix 0xffff8800bab8cf00 0t0 16574 /var/run/rpcbind.sock rpcbind 1633 rpc 4u IPv4 16576 0t0 TCP *:sunrpc (LISTEN) rpcbind 1633 rpc 5u IPv4 16577 0t0 UDP *:sunrpc rpcbind 1633 rpc 6u IPv6 16578 0t0 TCP *:sunrpc (LISTEN) rpcbind 1633 rpc 7u IPv6 16579 0t0 UDP *:sunrpc rpcbind 1633 rpc 10u IPv4 16649 0t0 UDP *:960 sshd 2532 root 3u IPv4 21120 0t0 TCP 192.168.1.6:ssh->192.168.1.5:65110 (ESTABLISHED) sshd 2532 root 4u unix 0xffff8800bbef3a40 0t0 21260 socket sshd 2532 root 8u unix 0xffff8800b8afd680 0t0 21298 /tmp/ssh-QHz9BdtRvt/agent.2532 sshd 2536 root 3u IPv4 21191 0t0 TCP 192.168.1.6:ssh->192.168.1.5:65112 (ESTABLISHED) sshd 2536 root 4u unix 0xffff8800b8afd2c0 0t0 21363 socket ………………………………………………………………………………………………………………
Ejemplo: 6) Listar todos los archivos de red IPv4 abiertos (lsof -i 4)
Use la opción «-i -4» en el comando lsof para enumerar todos los archivos de red abiertos para IPv4,
[[email protected] ~]# lsof -i 4 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 42u IPv4 16576 0t0 TCP *:sunrpc (LISTEN) systemd 1 root 43u IPv4 16577 0t0 UDP *:sunrpc rpcbind 1633 rpc 4u IPv4 16576 0t0 TCP *:sunrpc (LISTEN) sshd 2258 root 3u IPv4 19493 0t0 TCP *:ssh (LISTEN) master 2360 root 13u IPv4 20087 0t0 TCP localhost:smtp (LISTEN) dhclient 2494 root 6u IPv4 20983 0t0 UDP *:bootpc dhclient 2494 root 20u IPv4 20951 0t0 UDP *:24884 dhclient 2514 root 6u IPv4 20866 0t0 UDP *:bootpc sshd 2532 root 3u IPv4 21120 0t0 TCP 192.168.1.6:ssh->192.168.1.5:65110 (ESTABLISHED) sshd 2536 root 3u IPv4 21191 0t0 TCP 192.168.1.6:ssh->192.168.1.5:65112 (ESTABLISHED) sshd 2621 root 3u IPv4 23506 0t0 TCP 192.168.1.6:ssh->192.168.1.9:65422 (ESTABLISHED) sshd 2655 root 3u IPv4 23863 0t0 TCP 192.168.1.6:ssh->192.168.1.9:49992 (ESTABLISHED) sshd 2657 linuxtechi 3u IPv4 23795 0t0 TCP 192.168.1.6:ssh->192.168.1.9:49990 (ESTABLISHED) sshd 2660 linuxtechi 3u IPv4 23863 0t0 TCP 192.168.1.6:ssh->192.168.1.9:49992 (ESTABLISHED) [[email protected] ~]#
Para enumerar todos los archivos de red IPv4 abiertos utilizados por un proceso específico cuyo ID de proceso es «cualquier_número», se muestran ejemplos a continuación
Supongamos que queremos enumerar todos los archivos de red IPv4 para el proceso rpcbind
Sintaxis: # lsof i 4 -a -p {proceso_pid}
[[email protected] ~]# lsof -i 4 -a -p 1633 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1633 rpc 4u IPv4 16576 0t0 TCP *:sunrpc (LISTEN) rpcbind 1633 rpc 5u IPv4 16577 0t0 UDP *:sunrpc rpcbind 1633 rpc 10u IPv4 16649 0t0 UDP *:960 [[email protected] ~]#
Ejemplo: 7) Listar todos los archivos de red abiertos para IPv6 (lsof -i 6)
Suponiendo que se admita el dominio ipv6, la salida de lsof será similar a la siguiente:
[[email protected] ~]# lsof -i 6 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 44u IPv6 16578 0t0 TCP *:sunrpc (LISTEN) systemd 1 root 46u IPv6 16579 0t0 UDP *:sunrpc rpcbind 1633 rpc 6u IPv6 16578 0t0 TCP *:sunrpc (LISTEN) rpcbind 1633 rpc 7u IPv6 16579 0t0 UDP *:sunrpc rpcbind 1633 rpc 11u IPv6 16650 0t0 UDP *:960 sshd 2258 root 4u IPv6 19504 0t0 TCP *:ssh (LISTEN) master 2360 root 14u IPv6 20088 0t0 TCP localhost:smtp (LISTEN) dhclient 2494 root 21u IPv6 20952 0t0 UDP *:16498 dhclient 2514 root 21u IPv6 20823 0t0 UDP *:34955 httpd 2594 root 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2595 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2596 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2597 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2598 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2599 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) [[email protected] ~]#
Ejemplo: 8) Enumere todos los procesos TCP y UDP que se ejecutan en un puerto específico (lsof -i TCP/UDP: puerto)
Supongamos que queremos enumerar todos los procesos TCP que se ejecutan en el puerto 80, use el siguiente comando
[[email protected] ~]# lsof -i TCP:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 2594 root 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2595 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2596 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2597 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2598 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) httpd 2599 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN) [[email protected] ~]#
Para enumerar todos los archivos abiertos en el puerto TCP desde el rango de puertos (1 a 1048), use el siguiente comando
[[email protected] ~]# lsof -i TCP:1-1048 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 41u IPv4 16863 0t0 TCP *:sunrpc (LISTEN) systemd 1 root 44u IPv6 16865 0t0 TCP *:sunrpc (LISTEN) rpcbind 1663 rpc 4u IPv4 16863 0t0 TCP *:sunrpc (LISTEN) rpcbind 1663 rpc 6u IPv6 16865 0t0 TCP *:sunrpc (LISTEN) sshd 2294 root 3u IPv4 19949 0t0 TCP *:ssh (LISTEN) sshd 2294 root 4u IPv6 19965 0t0 TCP *:ssh (LISTEN) master 2433 root 13u IPv4 21026 0t0 TCP localhost:smtp (LISTEN) master 2433 root 14u IPv6 21027 0t0 TCP localhost:smtp (LISTEN) sshd 2600 root 3u IPv4 21737 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52393 (ESTABLISHED) sshd 2659 root 3u IPv4 22056 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52486 (ESTABLISHED) sshd 2663 root 3u IPv4 22123 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52489 (ESTABLISHED) httpd 2837 root 4u IPv6 26112 0t0 TCP *:http (LISTEN) httpd 2838 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN) httpd 2839 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN) httpd 2840 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN) httpd 2841 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN) httpd 2842 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN) sshd 2891 root 3u IPv4 26896 0t0 TCP 192.168.1.3:ssh->192.168.1.9:53541 (ESTABLISHED) sshd 2895 linuxtechi 3u IPv4 26896 0t0 TCP 192.168.1.3:ssh->192.168.1.9:53541 (ESTABLISHED) [[email protected] ~]#
Para enumerar todos los procesos UDP que se ejecutan en un puerto específico, use el siguiente comando
[[email protected] ~]# lsof -i UDP:16498 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME dhclient 2494 root 21u IPv6 20952 0t0 UDP *:16498 [[email protected] ~]#
Nota: Para enumerar todos los procesos UDP abiertos en su sistema Linux, utilice el comando «lsof -i UDP”
Ejemplo: 9) Enumere todos los archivos abiertos para un dispositivo específico (lsof )
El siguiente comando se puede usar para listar todos los archivos abiertos en /dev/vda1.
Nota: En este caso el tipo de dispositivo es virtual, en general este puede ser del tipo /dev/hd
[email protected] ~]# lsof /dev/vda1 | more COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 253,1 4096 2 / systemd 1 root rtd DIR 253,1 4096 2 / systemd 1 root txt REG 253,1 1577264 262271 /lib/systemd/systemd systemd 1 root mem REG 253,1 18976 262252 /lib/x86_64-linux-gnu/libuuid.so.1.3.0 systemd 1 root mem REG 253,1 262408 262245 /lib/x86_64-linux-gnu/libblkid.so.1.1.0 systemd 1 root mem REG 253,1 14608 266364 /lib/x86_64-linux-gnu/libdl-2.23.so systemd 1 root mem REG 253,1 456632 262207 /lib/x86_64-linux-gnu/libpcre.so.3.13.2 systemd 1 root mem REG 253,1 1868984 266362 /lib/x86_64-linux-gnu/libc-2.23.so systemd 1 root mem REG 253,1 138696 266361 /lib/x86_64-linux-gnu/libpthread-2.23.so systemd 1 root mem REG 253,1 286824 261756 /lib/x86_64-linux-gnu/libmount.so.1.1.0
Ejemplo: 10) Lista de procesos con archivos abiertos en el sistema de archivos NFS
Hay algunas situaciones en las que ha montado el sistema de archivos nfs en su caja de Linux pero el servidor nfs es inaccesible y desea enumerar todos los procesos con archivos abiertos en ese sistema de archivos nfs,
[[email protected] ~]# lsof -b <nfs-share-mount-point>
Ejemplo: 11) Lista de archivos abiertos relacionados con el terminal (lsof /dev/tty{número})
El siguiente comando se usa para todos los archivos abiertos en /dev/tty1.
Nota: En este caso el tipo de terminal es “tty1”. También se puede usar cualquier otro tipo de terminal como /dev/tty
[[email protected] ~]# lsof /dev/tty1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 2442 root 0u CHR 4,1 0t0 4689 /dev/tty1 bash 2442 root 1u CHR 4,1 0t0 4689 /dev/tty1 bash 2442 root 2u CHR 4,1 0t0 4689 /dev/tty1 bash 2442 root 255u CHR 4,1 0t0 4689 /dev/tty1 [[email protected] ~]#
Ejemplo: 12) Lista de PID, nombre de comando, descriptor de archivo, número de dispositivo y número de inodo de archivo (lsof -FpcfDi)
Una de las opciones interesantes en «lsof» para obtener la salida de campo PID (P) y nombre de comando (c) para cada proceso, descriptor de archivo (f), número de dispositivo de archivo (D) y número de inodo de archivo (i) para cada archivo de cada proceso, el ejemplo se muestra a continuación
[[email protected] ~]# lsof -FpcfDi | more p1 csystemd fcwd D0xfd00 i128 frtd D0xfd00 i128 ftxt D0xfd00 i51034677 fmem D0xfd00 i33628284 ………………
Nota: Se muestra una larga lista de resultados, pero se acorta para ahorrar espacio.
Ejemplo: 13) Listar todas las conexiones de red (lsof -i)
Use la opción «-i» en el comando lsof para enumerar todos los procesos o comandos relacionados con la red, el ejemplo se muestra a continuación,
[[email protected] ~]# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 41u IPv4 16863 0t0 TCP *:sunrpc (LISTEN) systemd 1 root 43u IPv4 16864 0t0 UDP *:sunrpc rpcbind 1663 rpc 4u IPv4 16863 0t0 TCP *:sunrpc (LISTEN) rpcbind 1663 rpc 5u IPv4 16864 0t0 UDP *:sunrpc rpcbind 1663 rpc 11u IPv6 17051 0t0 UDP *:988 sshd 2294 root 3u IPv4 19949 0t0 TCP *:ssh (LISTEN) sshd 2294 root 4u IPv6 19965 0t0 TCP *:ssh (LISTEN) rpc.statd 2300 rpcuser 10u IPv6 19974 0t0 UDP *:48486 rpc.statd 2300 rpcuser 11u IPv6 20045 0t0 TCP *:39334 (LISTEN) rpc.mount 2311 root 7u IPv4 19897 0t0 UDP *:mountd rpc.mount 2311 root 8u IPv4 19911 0t0 TCP *:mountd (LISTEN) master 2433 root 13u IPv4 21026 0t0 TCP localhost:smtp (LISTEN) master 2433 root 14u IPv6 21027 0t0 TCP localhost:smtp (LISTEN) dhclient 2563 root 6u IPv4 21589 0t0 UDP *:bootpc dhclient 2583 root 21u IPv6 21365 0t0 UDP *:10368 sshd 2600 root 3u IPv4 21737 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52393 (ESTABLISHED) sshd 2659 root 3u IPv4 22056 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52486 (ESTABLISHED) [[email protected] ~]#
Ejemplo: 14) Buscar archivo de socket IPv4/IPv6
Para encontrar el archivo de socket IPv4, use el siguiente comando, reemplace la dirección IP con la IP de su sistema
[[email protected] ~]# lsof [email protected] COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2600 root 3u IPv4 21737 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52393 (ESTABLISHED) sshd 2659 root 3u IPv4 22056 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52486 (ESTABLISHED) sshd 2663 root 3u IPv4 22123 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52489 (ESTABLISHED) sshd 2724 root 3u IPv4 25004 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52848 (ESTABLISHED) sshd 2728 linuxtechi 3u IPv4 25004 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52848 (ESTABLISHED) [[email protected] ~]#
Para encontrar un archivo de socket IP versión 6 por una dirección numérica asociada en forma de dos puntos que tiene una serie de ceros, por ejemplo, la dirección de bucle invertido (127.0.0.1), use el siguiente comando y opciones:
[[email protected] ~]# lsof [email protected][::1] COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME master 2433 root 14u IPv6 21027 0t0 TCP localhost:smtp (LISTEN) [[email protected] ~]#
Ejemplo: 15) Enumere todos los procesos o comandos que pertenecen a un ID de proceso (lsof -p )
Supongamos que queremos enumerar todos los procesos o comandos que pertenecen a una identificación de proceso específica. El ejemplo se muestra a continuación.
[[email protected] ~]# lsof -p 2842 | more COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 2842 apache cwd DIR 253,0 4096 128 / httpd 2842 apache rtd DIR 253,0 4096 128 / httpd 2842 apache txt REG 253,0 523680 34641136 /usr/sbin/httpd httpd 2842 apache mem REG 253,0 110808 33618576 /usr/lib64/libresolv-2.17.so httpd 2842 apache mem REG 253,0 27512 33618564 /usr/lib64/libnss_dns-2.17.so httpd 2842 apache mem REG 253,0 57824 33618566 /usr/lib64/libnss_files-2.17.so httpd 2842 apache mem REG 253,0 27808 17080385 /usr/lib64/httpd/modules/mod_cgi.so httpd 2842 apache mem REG 253,0 68192 33628305 /usr/lib64/libbz2.so.1.0.6 ………………………………………………
Ejemplo: 16) Matar todos los procesos que pertenecen a un usuario específico
El comando lsof se vuelve muy útil cuando queremos eliminar todo el proceso que pertenece a un usuario específico, el siguiente ejemplo eliminará todo el proceso que pertenece al usuario de linuxtechi
[[email protected] ~]# kill -9 `lsof -t -u linuxtechi` [[email protected] ~]#
Ejemplo: 17) Enumere todos los archivos abiertos en un directorio específico (lsod +D )
Supongamos que queremos enumerar todos los archivos abiertos en el directorio /var/log, luego use el siguiente comando lsof,
[[email protected] ~]# lsof +D /var/log/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME auditd 1635 root 4w REG 253,0 1177238 51031316 /var/log/audit/audit.log wpa_suppl 1840 root 3w REG 253,0 240 392280 /var/log/wpa_supplicant.log tuned 2295 root 3w REG 253,0 6000 17713597 /var/log/tuned/tuned.log rsyslogd 2296 root 6w REG 253,0 7118 392279 /var/log/cron rsyslogd 2296 root 7w REG 253,0 449328 338975 /var/log/messages rsyslogd 2296 root 8w REG 253,0 26038 338976 /var/log/secure rsyslogd 2296 root 9w REG 253,0 1576 338977 /var/log/maillog rsyslogd 2296 root 10w REG 253,0 9458 138 /var/log/boot.log httpd 2837 root 2w REG 253,0 2829 34768157 /var/log/httpd/error_log httpd 2837 root 7w REG 253,0 0 34824416 /var/log/httpd/access_log httpd 2838 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log httpd 2838 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log httpd 2839 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log httpd 2839 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log httpd 2840 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log httpd 2840 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log httpd 2841 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log httpd 2841 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log httpd 2842 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log httpd 2842 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log [[email protected] ~]#
Nota: En el comando anterior, si usamos la opción +D, entonces lsof enumerará todos los archivos abiertos de un directorio de forma recursiva y si no desea enumerar los archivos abiertos del directorio de forma recursiva, use la opción «+d»
Ejemplo: 18) «lsof» para verificar quién abrió el archivo de registro (para encontrar el PID)
La siguiente opción de comando se usa para encontrar quién abrió el archivo /var/log/httpd/access.log y cuál es el PID de ese proceso. Y luego con el comando «ps -ef» podemos encontrar el usuario exacto
[[email protected] ~]# lsof -t /var/log/httpd/access_log 3109 3110 3111 3112 3113 3114 [[email protected] ~]# [[email protected] ~]# ps -ef | grep -E "3109|3110|3111|3112|3113|3114" | grep -v grep or [[email protected] ~]# ps -fp "$(lsof -t /var/log/httpd/access_log | xargs echo)" root 3109 1 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3110 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3111 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3112 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3113 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3114 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND [[email protected] ~]#
Muchas opciones del comando «lsof» se pueden combinar para múltiples propósitos, ya que a continuación se muestran algunas combinaciones de indicadores «-c», «-u» y «-I». Para obtener más detalles, consulte la página del manual.
Leer también : 11 ejemplos de comandos Xargs en Linux
La siguiente combinación de comandos dará una salida cada 1 segundo sobre el directorio de inicio «linuxtechi» que todos los archivos abrieron repetidamente.
[email protected] ~}# lsof -u linuxtechi -c init -a -r1 ======= COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME inita.sh 2971 linuxtechi cwd DIR 8,1 4096 393218 /home/linuxtechi inita.sh 2971 linuxtechi rtd DIR 8,1 4096 2 / inita.sh 2971 linuxtechi txt REG 8,1 83344 524367 /bin/dash inita.sh 2971 linuxtechi mem REG 8,1 1434567 1443695 /lib/i386-linux-gnu/libc-2.13.so ……………………………………………………………………………
Conclusión:
Como se mencionó en la sección de introducción, «lsof» es un comando muy poderoso y útil en las distribuciones basadas en Linux. Este comando y las opciones enumeradas se pueden usar para diversos fines, como la depuración, la resolución de problemas y la evaluación de procesos de Linux. Las opciones y combinaciones mencionadas, si se prueban, ayudarán a establecer una comprensión completa del comando «lsof». Otros comandos como lstat, estadística y ls también se puede explorar en combinación con el comando «lsof».
Leer también : Cómo habilitar la marca de tiempo en la salida del comando de historial de Linux