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, IPV6
etc. 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 ls
etc. 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