Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Linux y Redes de ordenadores Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

lsof es una potente utilidad disponible para Linux y sistemas basados en Unix que literalmente significa 'lista (de) archivos abiertos'.

Su función principal es recuperar detalles sobre varios tipos de archivos abiertos por diferentes procesos en ejecución. Estos archivos pueden ser archivos normales, directorios, archivos de bloque, sockets de red, tuberías con nombre, etc.

Con lsof, puede encontrar diferentes procesos bloqueando un archivo o directorio, un proceso escuchando en un puerto, la lista de procesos de un usuario, qué archivos está bloqueando un proceso. Primero cubriremos su instalación y luego algunos ejemplos de uso común en este artículo

Instalación de lsof

lsof no está disponible por defecto en la mayoría de las distribuciones de Linux pero puede instalarse fácilmente. Utilice el siguiente comando para instalar lsof

CentOS / RHEL / Fedora

$ sudo yum install lsof

para CentOS/RHEL 8, puede utilizar el comando DNF
$ sudo

 dnf

instalar lsof
Ubuntu / Debian
$ sudo

 apt

instalar lsof

Obtener ayuda

Puede obtener una lista resumida de las opciones soportadas por lsof utilizando la bandera -? o -h

$ lsof -?
lsof 4.87
 última revisión: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 última FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 última página man: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 uso: [-?abhKlnNoOPRtUvVX] [ |-c c] [ |-d s] [ D D] [ |-f[gG]] [ |-e s]
 [-F <x>[f</x>]] [-g <x>[</x>s]] [-i [i]] [ |-L <x>[l</x>]] [ m <x>[</x>m]] [ |-M] [-o [o]] [-p s]
[ |-r <x><x><x>[</x></x></x>t]] [-s [p:s]] [-S <x><x><x>[</x></x></x>t]] [-T <x><x><x>[</x></x></x>t]] [-u s] [ |-w] [-x <x>[fl</x>]] [-Z [Z]] [--] [nombres]
Valores predeterminados entre paréntesis; elementos de conjunto (s) separados por comas; rangos separados por guiones.
 -?|-h list help -a AND selections (OR) -b avoid kernel blocks
 -c c cmd c ^c /c/[bix] c w COMMAND width (9) d s dir s files
 -d s select by FD set D D dir D tree *SLOW?*    |-e s exempt s *RISKY*
 -i select IPv<x><x>[46]</x></x> files -K list tasKs (threads) -l list UID numbers
 -n no host names -N select NFS files -o list file offset
 -O no overhead *RISKY* -P no port names -R list paRent PID
 -s list file size -t terse listing -T disable TCP/TPI info
 -U select Unix socket -v list version info -V verbose search
 |-w Warnings ( ) -X skip TCP&UDP* archivos -Z Z contexto [Z]
 -- opción de fin de búsqueda
 f|-f sistema de archivos o -nombres de archivos |-f[gG] flaGs
 -F <x>[f]</x> seleccionar campos; -F? para ayuda
 |-L <x>[l</x> ] lista ( ) suprimir (-) recuentos de enlaces < l (0 = todos; por defecto = 0)
 m <x>[m</x> ] use|create mount supplement
 |-M portMap registration (-) -o o o 0t offset digits (8)
 -p s exclude(^)|select PIDs -S <x><x><x>[t]</x></x></x> t second stat timeout (15)
 -T qs TCP/TPI Q,St (s) info
 -g <x>[s]</x> exclude(^)|select and print process group IDs
 -i i select by IPv<x><x>[46]</x></x> address: <x><x>[46]</x></x>[proto][@host|addr][:svc_list|port_list]
 |-r [t[m<fmt>]] repetir cada t segundos (15); hasta que no haya archivos, - para siempre.
 Un sufijo opcional a t es m<fmt>; m debe separar t de <fmt> y
 <fmt> es un formato strftime(3) para la línea de marcador.

 -
s p:s exclude(^)|select protocol (p = TCP|UDP) states by name(s).
 -u s exclude(^)|select login|UID set s
 -x <x>[fl]</x> cross over d| D File systems or symbolic Links
 names select named files or files on named file systems
Cualquiera puede listar todos los archivos; /dev warnings disabled; kernel ID check disabled.

$
Para comprobar la información detallada de la versión instalada, utilice

$ lsof -v
lsof información de versión:
 revisión: 4.87
 última revisión: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 última FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 última página man: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 construido: Tue Oct 30 16:28:19 UTC 2018
 construido por y en: mockbuild@x86-01.bsys.centos.org
 compilador: cc
 versión del compilador: 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
 banderas del compilador: -DLINUXV=310000 -DGLIBCV=217 -DHASIPv6 -DHASSELINUX -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAS_STRFTIME -DLSOF_VSTR="3.10.0" -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic
 banderas del cargador: -L./lib -llsof -lselinux
 información del sistema: Linux x86-01.bsys.centos.org 3.10.0-693.17.1.el7.x86_64 #1 SMP Thu Jan 25 20:13:58 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
 Cualquiera puede listar todos los archivos.
 Las advertencias de /dev están desactivadas.
 La comprobación del ID del núcleo está desactivada.

$

Campos de salida

la estructura de los campos de salida de lsof por defecto es como

COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME

La mayoría de estos campos se explican por sí mismos, excepto los campos FD y TYPE que son algo exclusivo de lsof y serán explorados brevemente

FD se refiere al número del Descriptor de Fichero del fichero y TYPE se refiere al tipo del nodo asociado al fichero. A continuación revisaremos los valores admitidos para estos dos campos

El campo FD puede contener los siguientes valores

cwd directorio de trabajo actual;
Lnn referencias de biblioteca (AIX);
err error de información FD (véase la columna NAME);
jld directorio de la cárcel (FreeBSD);
ltx texto de biblioteca compartida (código y datos);
Mxx número hexadecimal de tipo mapeado en memoria xx.
m86 DOS Merge mapped file;
mem memory-mapped file;
mmap memory-mapped device;

pd

parent directory;

rtd

root directory;
tr kernel trace file (OpenBSD);

txt

program text (code and data);

v86

VP/ix mapped file

El campo FD va seguido de uno o varios caracteres que describen el modo en que está abierto el archivo
r para acceso de

lectura;

w

para acceso de escritura;

u

para acceso de lectura y escritura;
espacio si se desconoce el modo y no sigue ningún carácter de bloqueo;

`-

' si se desconoce el modo y sigue un carácter de bloqueo

El carácter de modo para FD puede ir seguido de un carácter de BLOQUEO cuya descripción se da a continuación

N para un bloqueo NFS de Solaris de tipo desconocido;
r para un bloqueo de lectura en parte del archivo;
R para un bloqueo de lectura en todo el archivo;
w para un bloqueo de escritura en parte del archivo;
W para un bloqueo de escritura en todo el archivo;
u para un bloqueo de lectura y escritura de cualquier longitud;
U para un bloqueo de tipo desconocido;
x para un bloqueo SCO OpenServer Xenix en parte del archivo;
X para un bloqueo SCO OpenServer Xenix en todo el archivo;
espacio si no hay bloqueo.

Del mismo modo, el campo TYPE puede contener GDIR, GREG, VDIR, VREG, IPV4, IPV6etc. Para obtener una lista completa de los TYPE soportados en lsof, consulte su página man

Uso común

A continuación se muestran algunos de los usos más comunes del comando lsof. El comando funciona en todas las variantes de Linux y todos los argumentos de línea de comandos listados a continuación de los ejemplos deberían funcionar en todas las plataformas, considerando la misma versión de lsof

Listar todos los archivos abiertos

Ejecutar lsof sin ninguna opción listará todos los archivos que están actualmente abiertos por procesos activos

$ sudo lsof | less

Salida

COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 224 64 /
systemd 1 root rtd DIR 253,0 224 64 /
systemd 1 root txt REG 253,0 1632776 308905 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20064 16063 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 265576 186547 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,0 90248 16051 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 157424 16059 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,0 23968 59696 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,0 19896 59686 /usr/lib64/libattr.so.1.1.0
systemd 1 root mem REG 253,0 19248 15679 /usr/lib64/libdl-2.17.so
systemd 1 root mem REG 253,0 402384 16039 /usr/lib64/libpcre.so.1.2.0
systemd 1 root mem REG 253,0 2156272 15673 /usr/lib64/libc-2.17.so
systemd 1 root mem REG 253,0 142144 15699 /usr/lib64/libpthread-2.17.so
systemd 1 root mem REG 253,0 88720 84 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
systemd 1 root mem REG 253,0 43712 15703 /usr/lib64/librt-2.17.so
systemd 1 root mem REG 253,0 277808 229793 /usr/lib64/libmount.so.1.1.0
systemd 1 root mem REG 253,0 91800 76005 /usr/lib64/libkmod.so.2.2.10
systemd 1 root mem REG 253,0 127184 59698 /usr/lib64/libaudit.so.1.0.0
systemd 1 root mem REG 253,0 61680 229827 /usr/lib64/libpam.so.0.83.1
systemd 1 root mem REG 253,0 20048 59690 /usr/lib64/libcap.so.2.22
systemd 1 root mem REG 253,0 155744 16048 /usr/lib64/libselinux.so.1

Lista por nombre de archivo

Para listar todos los procesos que han abierto un archivo específico, podemos especificar nombre-archivo como argumento

$ sudo lsof {nombre-archivo}

Salida
$ sudo lsof

/var/log/messages
COMANDO PID USUARIO FD TIPO DISPOSITIVO TAMAÑO/OFF NOMBRE NODO

rsyslogd

 1000 root 6w REG 253,0 205 16777741 /var/log/messages

$

Listar archivos abiertos por nombre de usuario

En un sistema multiusuario, puede filtrar la lista de ficheros por procesos específicos propiedad de usuarios, utilizando la bandera -u seguida del nombre de usuario

$ sudo lsof -u {nombredeusuario}

Salida

$ sudo lsof -u abhisheknair
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1239 abhisheknair cwd DIR 253,0 224 64 /
sshd 1239 abhisheknair rtd DIR 253,0 224 64 /
sshd 1239 abhisheknair txt REG 253,0 852856 425229 /usr/sbin/sshd
sshd 1239 abhisheknair mem REG 253,0 15488 17204727 /usr/lib64/security/pam_lastlog.so
sshd 1239 abhisheknair mem REG 253,0 15648 229829 /usr/lib64/libpam_misc.so.0.82.0
sshd 1239 abhisheknair mem REG 253,0 309248 17303270 /usr/lib64/security/pam_systemd.so
sshd 1239 abhisheknair mem REG 253,0 19616 17204728 /usr/lib64/security/pam_limits.

así que


sshd 1239 abhisheknair mem REG 253,0 11168 17204726 /usr/lib64/security/pam_keyinit.so

sshd 1239

 abhisheknair mem REG 253,0 40800 17204735 /usr/lib64/security/pam_namespace.so

Alternativamente, si desea listar los archivos abiertos por cualquier usuario excepto uno específico, utilice la bandera -u seguida de ^username como se muestra a continuación

$ sudo lsof -u ^{nombredeusuario}

Salida

$ sudo lsof -u ^root
COMANDO PID TID USUARIO FD TIPO DE DISPOSITIVO TAMAÑO/OFF NOMBRE DE NODO
dbus-daem 630 dbus cwd DIR 253,0 224 64 /
dbus-daem 630 dbus rtd DIR 253,0 224 64 /
dbus-daem 630 dbus txt REG 253,0 223232 50590133 /usr/bin/dbus-daemon
dbus-daem 630 dbus mem REG 253,0 61560 15691 /usr/lib64/libnss_files-2.17.so
dbus-daem 630 dbus mem REG 253,0 68192 59651 /usr/lib64/libbz2.so.1.0.6
dbus-daem 630 dbus mem REG 253,0 90248 16051 /usr/lib64/libz.so.1.2.7
dbus-daem 630 dbus mem REG 253,0 99944 59680 /usr/lib64/libelf-0.176.so
dbus-daem 630 dbus mem REG 253,0 19896 59686 /usr/lib64/libattr.so.1.1.0
dbus-daem 630 dbus mem REG 253,0 402384 16039 /usr/lib64/libpcre.so.1.2.0

Una forma en la que puede utilizar lsof es para situaciones en las que desee matar rápidamente todos los procesos de un usuario específico en un único comando. Podemos combinar kill con lsof como se muestra en el siguiente ejemplo para conseguirlo (ejecutar como root)

# kill -9 `lsof -t -u {nombredeusuario}``

Como se ve en el ejemplo anterior, podemos utilizar la bandera -t para filtrar el resto de la información excepto el process-id. Esto puede ser útil en automatización y scripting como se muestra en el ejemplo anterior combinándolo con el comando kill

$ sudo lsof -t -u {nombredeusuario}

Salida
$ sudo

 lsof -t -u abhisheknair
1239
1240

$
Con lsof, podemos combinar múltiples argumentos utilizando la lógica OR como se muestra a continuación
$

 sudo lsof -u {nombredeusuario} -c {nombredelproceso}

Salida

$ sudo lsof -u ftpuser -c bash
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1240 abhisheknair cwd DIR 253,0 120 510681 /home/abhisheknair
bash 1240 abhisheknair rtd DIR 253,0 224 64 /
bash 1240 abhisheknair txt REG 253,0 964536 50548532 /usr/bin/bash
bash 1240 abhisheknair mem REG 253,0 106172832 50548523 /usr/lib/locale/locale-archive
bash 1240 abhisheknair mem REG 253,0 61560 15691 /usr/lib64/libnss_files-2.17.so
bash 1240 abhisheknair mem REG 253,0 2156272 15673 /usr/lib64/libc-2.17.so
bash 1240 abhisheknair mem REG 253,0 19248 15679 /usr/lib64/libdl-2.17.so
bash 1240 abhisheknair mem REG 253,0 174576 16034 /usr/lib64/libtinfo.so.5.9
bash 1240 abhisheknair mem REG 253,0 163312 15666 /usr/lib64/ld-2.17.so
bash 1240 abhisheknair mem REG 253,0 26970 16003 /usr/lib64/gconv/gconv-modules.cache
bash 1240 abhisheknair 0u CHR 136,0 0t0 3 /dev/pts/0
bash 1240 abhisheknair 1u CHR 136,0 0t0 3 /dev/pts/0
bash 1240 abhisheknair 2u CHR 136,0 0t0 3 /dev/pts/0
bash 1240 abhisheknair 255u CHR 136,0 0t0 3 /dev/pts/0
bash 1425 ftpuser cwd DIR 253,0 182 33578272 /home/ftpuser
bash 1425 ftpuser rtd DIR 253,0 224 64 /
bash 1425 ftpuser txt REG 253,0 964536 50548532 /usr/bin/bash
bash 1425 ftpuser mem REG 253,0 106172832 50548523 /usr/lib/locale/locale-archive
bash 1425 ftpuser mem REG 253,0 61560 15691 /usr/lib64/libnss_files-2.17.so
bash 1425 ftpuser mem REG 253,0 2156272 15673 /usr/lib64/libc-2.17.so
bash 1425 ftpuser mem REG 253,0 19248 15679 /usr/lib64/libdl-2.17.so
bash 1425 ftpuser mem REG 253,0 174576 16034 /usr/lib64/libtinfo.so.5.9
bash 1425 ftpuser mem REG 253,0 163312 15666 /usr/lib64/ld-2.17.so
bash 1425 ftpuser mem REG 253,0 26970 16003 /usr/lib64/gconv/gconv-modules.cache
bash 1425 ftpuser 0u CHR 4,1 0t0 1043 /dev/tty1
bash 1425 ftpuser 1u CHR 4,1 0t0 1043 /dev/tty1
bash 1425 ftpuser 2u CHR 4,1 0t0 1043 /dev/tty1
bash 1425 ftpuser 255u CHR 4,1 0t0 1043 /dev/tty1

$
Alternativamente, si desea utilizar la condición lógica AND use la bandera -a
$

 sudo lsof -u {nombredeusuario} -c {nombredelproceso} -a

Salida

$ sudo lsof -u ftpuser -c bash -a
COMANDO PID USUARIO FD TIPO DISPOSITIVO TAMAÑO/OFF NOMBRE NODO
bash 1425 ftpuser cwd DIR 253,0 182 33578272 /home/ftpuser
bash 1425 ftpuser rtd DIR 253,0 224 64 /
bash 1425 ftpuser txt REG 253,0 964536 50548532 /usr/bin/bash
bash 1425 ftpuser mem REG 253,0 106172832 50548523 /usr/lib/locale/locale-archive
bash 1425 ftpuser mem REG 253,0 61560 15691 /usr/lib64/libnss_files-2.17.so
bash 1425 ftpuser mem REG 253,0 2156272 15673 /usr/lib64/libc-2.17.so
bash 1425 ftpuser mem REG 253,0 19248 15679 /usr/lib64/libdl-2.17.so
bash 1425 ftpuser mem REG 253,0 174576 16034 /usr/lib64/libtinfo.so.5.9
bash 1425 ftpuser mem REG 253,0 163312 15666 /usr/lib64/ld-2.17.so
bash 1425 ftpuser mem REG 253,0 26970 16003 /usr/lib64/gconv/gconv-modules.cache
bash 1425 ftpuser 0u CHR 4,1 0t0 1043 /dev/tty1
bash 1425 ftpuser 1u CHR 4,1 0t0 1043 /dev/tty1
bash 1425 ftpuser 2u CHR 4,1 0t0 1043 /dev/tty1
bash 1425 ftpuser 255u CHR 4,1 0t0 1043 /dev/tty1

$

Listar archivos abiertos por proceso

También podemos listar los ficheros abiertos por un proceso concreto utilizando la opción -c seguido del nombre del proceso

$ sudo lsof -c {nombre-proceso}

Salida

$ sudo lsof -c ssh
COMANDO PID USUARIO FD TIPO DISPOSITIVO TAMAÑO/OFF NODO NOMBRE
sshd 997 root cwd DIR 253,0 224 64 /
sshd 997 root rtd DIR 253,0 224 64 /
sshd 997 root txt REG 253,0 852856 425229 /usr/sbin/sshd
sshd 997 root mem REG 253,0 61560 15691 /usr/lib64/libnss_files-2.17.so
sshd 997 root mem REG 253,0 68192 59651 /usr/lib64/libbz2.so.1.0.6
sshd 997 root mem REG 253,0 99944 59680 /usr/lib64/libelf-0.176.so
sshd 997 root mem REG 253,0 19896 59686 /usr/lib64/libattr.so.1.1.0

sshd 997

 root mem REG 253,0 15688 75906 /usr/lib64/libkeyutils.so.1.5

sshd 997

 root mem REG 253,0 67104 186525 /usr/lib64/libkrb5support.so.0.1

Lista de archivos abiertos por PID

Alternativamente, para listar los archivos abiertos por un proceso pero en lugar de process-name desea especificar su ID, puede utilizar la bandera -p seguida de process-id

$ sudo lsof -p {id-proceso}

Salida

$ sudo lsof -p 663
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firewalld 663 root cwd DIR 253,0 224 64 /
firewalld 663 root rtd DIR 253,0 224 64 /
firewalld 663 root txt REG 253,0 7144 50491220 /usr/bin/python2.7
firewalld 663 root mem REG 253,0 298828 50617647 /usr/lib64/girepository-1.0/NM-1.0.typelib
firewalld 663 root mem REG 253,0 343452 50507562 /usr/lib64/girepository-1.0/Gio-2.0.typelib
firewalld 663 root mem REG 253,0 12352 17202092 /usr/lib64/python2.7/lib-dynload/grpmodule.so
firewalld 663 root mem REG 253,0 29184 17202105 /usr/lib64/python2.7/lib-dynload/selectmodule.so
firewalld 663 root mem REG 253,0 168312 388240 /usr/lib64/libdbus-glib-1.so.2

.2.2


firewalld 663 root mem REG 253,0 11976 34028597 /usr/lib64/python2.7/site-packages/_dbus_glib_bindings.so
firewalld 663 root mem REG 253,0 185712 50507559 /usr/lib64/girepository-1.0/GLib-2.0.typelib
  • Si desea listar todos los archivos abiertos excepto los abiertos por un proceso concreto, utilice -p seguido de ^process-id.
$ sudo lsof -p ^{process-id}

Lista los archivos abiertos que contienen el directorio

Para listar los procesos que abrieron archivos bajo un directorio específico, utilice la opción D seguida de la ruta del directorio
$ sudo

 lsof D {ruta}

Salida

$ sudo lsof D /var/log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
auditd 607 root 5w REG 253,0 1065095 425227 /var/log/audit/audit.log
firewalld 663 root 3w REG 253,0 13817 17663786 /var/log/firewalld
tuned 999 root 3w REG 253,0 13395 33574994 /var/log/tuned/tuned.log
rsyslogd 1000 root 6w REG 253,0 4302 16777753 /var/log/cron

rsyslogd 1000 root 7w REG

 253,0 64740 16777755 /var/log/messages

rsyslogd

 1000 root 8w REG 253,0 5513 16787904 /var/log/secure

rsyslogd

 1000 root 9w REG 253,0 198 16777754 /var/log/maillog

$
Si no desea listar recursivamente archivos dentro de subdirectorios, utilice la bandera -d seguida de la ruta del directorio

$ sudo lsof d {ruta}

Salida

$ sudo lsof d /var/log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firewalld 663 root 3w REG 253,0 13817 17663786 /var/log/firewalld
rsyslogd 1000 root 6w REG 253,0 4302 16777753 /var/log/cron
rsyslogd 1000 root 7w REG 253,0 64740 16777755 /var/log/messages

rsyslogd 1000

 root 8w REG 253,0 5833 16787904 /var/log/secure

rsyslogd 1000

 root 9w REG 253,0 198 16777754 /var/log/maillog

$

Repetir modo

lsof puede ejecutarse en modo de repetición. En modo de repetición, lsof generará e imprimirá la salida a intervalos regulares. De nuevo, existen dos modos de repetición soportados por lsof, es decir, con las banderas -r y r. Con la bandera -r, lsof repite para ejecutarse hasta que reciba una señal de interrupción/desactivación del usuario, mientras que con la bandera r, el modo de repetición de lsof finalizará en cuanto su salida no tenga archivos abiertos. Además, podemos especificar el tiempo de retardo con la bandera -r o r

$ sudo lsof {argumentos} -r{intervalo de tiempo}

Salida

$ sudo lsof -u ftpuser -c bash D /usr/lib -a -r3
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1425 ftpuser mem REG 253,0 106172832 50548523 /usr/lib/locale/locale-archive
=======
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1425 ftpuser mem REG 253,

0

 106172832 50548523 /usr/lib/locale/locale-archive
=======
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1425 ftpuser mem REG 253,0 106172832 50548523 /usr/lib/locale/locale-archive
=======

Lista de archivos abiertos con protocolo de red

lsof soporta el listado de cualquier tipo de ficheros Linux que incluye tomas de red, etc. Como tal, podemos listar los detalles de las conexiones de red abiertas utilizando la bandera -i

$ sudo lsof -i

Salida

$ sudo lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 639 chrony 5u IPv4 14333 0t0 UDP localhost:323
chronyd 639 chrony 6u IPv6 14334 0t0 UDP localhost:323
sshd 997 root 3u IPv4 17330 0t0 TCP *:ssh (LISTEN)
sshd 997 root 4u IPv6 17339 0t0 TCP *:ssh (LISTEN)
master 1229 root 13u IPv4 18129 0t0 TCP localhost:smtp (LISTEN)
master 1229 root 14u IPv6 18130 0t0 TCP localhost:smtp (LISTEN)
sshd 1235 root 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.

168.

1.61:23566 (ESTABLISHED)
sshd 1239 abhisheknair 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)

$
Para listar todas las conexiones de red en uso por un process-id específico, puede utilizar lsof como

$ sudo lsof -i -a -p {process-id}

Salida
$

 sudo lsof -i -a -p 997
COMANDO PID USUARIO FD TIPO DISPOSITIVO TAMAÑO/OFF NOMBRE NODO

sshd

 997 root 3u IPv4 17330 0t0 TCP *:ssh (LISTEN)

sshd

 997 root 4u IPv6 17339 0t0 TCP *:ssh (LISTEN)

$
O para listar todas las conexiones de red en uso por un proceso específico, podemos dar process-name como

$ sudo lsof -i -a -c {nombre-proceso}

Salida

$ sudo lsof -i -a -c ssh
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 997 root 3u IPv4 17330 0t0 TCP *:ssh (LISTEN)
sshd 997 root 4u IPv6 17339 0t0 TCP *:ssh (LISTEN)
sshd 1235 root 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.

168.

1.61:23566 (ESTABLISHED)
sshd 1239 abhisheknair 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)

$
Podemos filtrar la salida de lsof con la bandera -i por tipo de protocolo de red, es decir, TCP o UDP especificando el tipo de protocolo
$

 sudo lsof -i {protocolo}

Salida

$ sudo lsof -i tcp
COMANDO PID USUARIO FD TIPO DISPOSITIVO TAMAÑO/OFF NODO NOMBRE
sshd 997 root 3u IPv4 17330 0t0 TCP *:ssh (LISTEN)
sshd 997 root 4u IPv6 17339 0t0 TCP *:ssh (LISTEN)
master 1229 root 13u IPv4 18129 0t0 TCP localhost:smtp (LISTEN)
master 1229 root 14u IPv6 18130 0t0 TCP localhost:smtp (LISTEN)
sshd 1235 root 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.

168.

1.61:23566 (ESTABLISHED)
sshd 1239 abhisheknair 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)

$
O

Salida

$ sudo lsof -i udp
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 639 chrony 5u IPv4 14333 0t0 UDP localhost:323
chronyd 639 chrony 6u IPv6 14334 0t0 UDP localhost:323

$

Listar archivos abiertos por puerto

También podemos filtrar la salida de lsof con la bandera -i por número de puerto utilizando la sintaxis de comando que se muestra a continuación

$ sudo lsof -i :{número-de-puerto}

Salida

$ sudo lsof -i :22
COMANDO PID USUARIO FD TIPO DISPOSITIVO TAMAÑO/OFF NODO NOMBRE
sshd 997 root 3u IPv4 17330 0t0 TCP *:ssh (LISTEN)
sshd 997 root 4u IPv6 17339 0t0 TCP *:ssh (LISTEN)
sshd 1235 root 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.

168.

1.61:23566 (ESTABLISHED)
sshd 1239 abhisheknair 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)

$

Lista de archivos abiertos por IPv4/IPv6

Existe una opción para filtrar el listado de conexiones de red limitándolo a IPv4 o IPv6. Utilice la siguiente sintaxis de comando para obtener sólo el listado IP v4

$ sudo lsof -i4

Salida

$ sudo lsof -i4
COMANDO PID USUARIO FD TIPO DISPOSITIVO TAMAÑO/OFF NODO NOMBRE
chronyd 639 chrony 5u IPv4 14333 0t0 UDP localhost:323
sshd 997 root 3u IPv4 17330 0t0 TCP *:ssh (LISTEN)
master 1229 root 13u IPv4 18129 0t0 TCP localhost:smtp (LISTEN)
sshd 1235 root 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.

168.

1.61:23566 (ESTABLISHED)
sshd 1239 abhisheknair 3u IPv4 18318 0t0 TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)

$
O para obtener sólo los detalles de IPv6, utilice
$

 sudo lsof -i6

Salida
$ sudo

 lsof -i6
COMANDO PID USUARIO FD TIPO DISPOSITIVO TAMAÑO/OFF NOMBRE NODO
chronyd 639 chrony 6u IPv6 14334 0t0 UDP localhost:323

sshd

 997 root 4u IPv6 17339 0t0 TCP *:ssh (LISTEN)
master 1229 root 14u IPv6 18130 0t0 TCP localhost:smtp (LISTEN)

$

Lista de archivos abiertos en NFS

lsof también puede listar todos los archivos NFS abiertos actualmente por un usuario

$ sudo lsof -N -u abhisheknair -a

Listar archivos bloqueados borrados

A veces ocurre que los archivos se borran en Linux pero siguen bloqueados por uno o más procesos. Como tal, esos archivos no se listan en el listado normal del sistema de archivos usando el comando lsetc. pero siguen consumiendo espacio en disco como informa la salida de df, esto ocurre especialmente para archivos grandes borrados a propósito para despejar espacio en disco sin liberar el bloqueo del proceso. Puede encontrar tales procesos utilizando lsof como

$ sudo lsof {ruta}

|

 grep deleted

Salida
$ sudo lsof

/ | grep deleted
firewalld 654 root 8u REG 253,0 4096 16777726 /tmp/#16777726 (deleted)
tuned 968 root 8u REG 253,0 4096 16777720 /tmp/#16777720 (deleted)

$

Conclusión

lsof ofrece una serie de opciones para personalizar su salida según sus necesidades. Es una utilidad útil en las tareas cotidianas de administración de sistemas y redes. La posibilidad de combinar diferentes argumentos juntos la hace aún más útil y le permite obtener la salida requerida fácilmente. Consulte la página man de lsof para conocer todos los argumentos soportados y su uso

$ man lsof
  • Abhishek Nair
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre Linux
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder