18 ejemplos rápidos de comandos ‘lsof’ para Linux Geeks

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,

Proceso-parámetro-lsof-comando

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.

Tipo-de-archivo-linux-lsof-command

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/ sd{number}

[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

Entradas relacionadas

Deja una respuesta

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