Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Linux und Vernetzung Zuletzt aktualisiert: September 24, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

lsof ist ein leistungsfähiges Dienstprogramm für Linux und Unix-basierte Systeme, das wörtlich für "Liste (der) offenen Dateien" steht

Seine Hauptfunktion besteht darin, Details über verschiedene Arten von Dateien abzurufen, die von verschiedenen laufenden Prozessen geöffnet wurden. Bei diesen Dateien kann es sich um normale Dateien, Verzeichnisse, Blockdateien, Netzwerk-Sockets, Named Pipes usw. handeln.

Mit lsof können Sie verschiedene Prozesse finden, die eine Datei oder ein Verzeichnis sperren, einen Prozess, der auf einen Port lauscht, die Prozessliste eines Benutzers und alle Dateien, die einen Prozess sperren. In diesem Artikel gehen wir zunächst auf die Einrichtung des Programms und dann auf einige gängige Anwendungsbeispiele ein

Installation von lsof

lsof ist bei den meisten Linux-Distributionen nicht standardmäßig verfügbar, kann aber leicht installiert werden. Verwenden Sie den folgenden Befehl, um lsof zu installieren

CentOS / RHEL / Fedora

$ sudo yum install lsof

für CentOS/RHEL 8 können Sie den DNF-Befehl verwenden

$ sudo dnf install lsof

Ubuntu / Debian

$ sudo apt install lsof

Hilfe erhalten

Sie können eine zusammengefasste Liste der von lsof unterstützten Optionen erhalten, indem Sie die Flagge -? oder -h verwenden

$ lsof -?
lsof 4.87
 letzte Revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 letzte FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 letzte Handbuchseite: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 Verwendung: [-?abhKlnNoOPRtUvVX] [ |-c c] [ |-d s] [ D D] [ |-f[gG]] [ |-e s]
 [-F <x>[f]</x>] [-g <x>[s]</x>] [-i [i]] [ |-L <x>[l]</x>] [ m <x>[m]</x>] [ |-M] [-o [o]] [-p s]
[ |-r <x><x><x>[t]</x></x></x>] [-s [p:s]] [-S <x><x><x>[t]</x></x></x>] [-T <x><x><x>[t]</x></x></x>] [-u s] [|-w] [-x <x>[fl]</x>] [-Z [Z]] [--] [names]
Standardwerte in Klammern; Komma-getrennte Mengen (s); Bindestrich-getrennte Bereiche.
 -?|-h list help -a AND Selektionen (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 listet paRent PID
 -s listet Dateigröße -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* Dateien -Z Z context [Z]
 -- end option scan
 f|-f filesystem or -file names |-f[gG] flaGs
 -F <x>[f]</x> select fields; -F? für Hilfe
 |-L <x>[l]</x> list ( ) suppress (-) link counts < l (0 = all; default = 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>]] alle t Sekunden (15) wiederholen; bis keine Dateien mehr vorhanden sind, - für immer.
 Ein optionales Suffix zu t ist m<fmt>; m muss t von <fmt> trennen und
 <fmt> ist ein strftime(3)-Format für die Markierungszeile.

 -
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 Dateisysteme oder symbolische Links
 names select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.

$
Um detaillierte Informationen über die installierte Version zu erhalten, verwenden Sie

$ lsof -v
lsof Versionsinformationen:
 revision: 4.87
 neueste Revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 neueste FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 neueste man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 erstellt: Tue Oct 30 16:28:19 UTC 2018
 erstellt von und auf: mockbuild@x86-01.bsys.centos.org
 compiler: cc
 compiler version: 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
 Compiler-Flags: -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
 loader flags: -L./lib -llsof -lselinux
 Systeminformationen: 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
 Jeder kann alle Dateien auflisten.
 /dev-Warnungen sind deaktiviert.
 Kernel ID check ist deaktiviert.

$

Ausgabefelder

die Struktur der lsof-Ausgabefelder ist standardmäßig wie folgt

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

Die meisten dieser Felder sind selbsterklärend, mit Ausnahme der Felder FD und TYPE, die in gewisser Weise einzigartig für lsof sind und kurz erläutert werden sollten

FD bezieht sich auf die Nummer des Dateideskriptors der Datei und TYPE auf den Typ des mit der Datei verbundenen Knotens. Sehen wir uns nun die unterstützten Werte für diese beiden Felder an

Das Feld FD kann die folgenden Werte enthalten

cwd aktuelles Arbeitsverzeichnis;
Lnn Bibliotheksreferenzen (AIX);
err FD-Informationsfehler (siehe Spalte NAME);
jld Gefängnisverzeichnis (FreeBSD);
ltx gemeinsam genutzter Bibliothekstext (Code und Daten);
Mxx hex memory-mapped type number 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

Nach dem Feld FD folgen ein oder mehrere Zeichen, die den Modus beschreiben, in dem die Datei geöffnet ist

r für Lesezugriff;

w

für Schreibzugriff;

u

für Lese- und Schreibzugriff;
Leerzeichen, wenn Modus unbekannt und kein Sperrzeichen folgt;

`-

', wenn Modus unbekannt und Sperrzeichen folgt

Auf das Modus-Zeichen für FD kann dann weiterhin das LOCK-Zeichen folgen, dessen Beschreibung unten angegeben ist

N für eine Solaris NFS-Sperre unbekannten Typs;
r für eine Lesesperre für einen Teil der Datei;
R für eine Lesesperre für die gesamte Datei;
w für eine Schreibsperre für einen Teil der Datei;
W für eine Schreibsperre für die gesamte Datei;
u für eine Lese- und Schreibsperre beliebiger Länge;
U für eine Sperre unbekannten Typs;
x für eine SCO OpenServer Xenix-Sperre auf einem Teil der Datei;
X für eine SCO OpenServer Xenix-Sperre auf der gesamten Datei;
Leerzeichen, wenn es keine Sperre gibt.

In ähnlicher Weise kann das Feld TYPE GDIR, GREG, VDIR, VREG, IPV4, IPV6 usw. enthalten. Eine vollständige Liste der unterstützten TYPE in lsof finden Sie in der Man Seite

Allgemeine Verwendung

Nachfolgend finden Sie einige der häufigsten Verwendungen des Befehls lsof. Der Befehl funktioniert auf allen Linux-Varianten und alle Befehlszeilenargumente, die in den folgenden Beispielen aufgeführt sind, sollten auf allen Plattformen funktionieren, wenn Sie die gleiche lsof-Version verwenden

Alle offenen Dateien auflisten

Wenn Sie lsof ohne jegliche Optionen ausführen, werden alle Dateien aufgelistet, die derzeit von aktiven Prozessen geöffnet sind

$ sudo lsof | less

Ausgabe

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

Liste nach Dateinamen

Um alle Prozesse aufzulisten, die eine bestimmte Datei geöffnet haben, können wir den Dateinamen als Argument angeben

$ sudo lsof {Datei-Name}

Ausgabe

$ sudo lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

rsyslogd

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

$

Offene Dateien nach Benutzernamen auflisten

In einem Mehrbenutzersystem können Sie die Liste der Dateien nach bestimmten benutzereigenen Prozessen filtern, indem Sie das Flag -u gefolgt von Ihrem Benutzernamen verwenden

$ sudo lsof -u {Benutzername}

Ausgabe

$ 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.so

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

Wenn Sie alternative Dateien auflisten möchten, die von einem beliebigen Benutzer außer einem bestimmten geöffnet wurden, verwenden Sie die Option -u, gefolgt von ^username, wie unten gezeigt

$ sudo lsof -u ^{Benutzername}

Ausgabe

$ sudo lsof -u ^root
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
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

Eine Möglichkeit, lsof zu verwenden, besteht darin, alle Prozesse eines bestimmten Benutzers schnell mit einem einzigen Befehl zu beenden. Dazu können wir kill mit lsof kombinieren, wie im folgenden Beispiel gezeigt (Ausführung als root)

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

Wie im obigen Beispiel zu sehen, können wir mit der Flagge -t alle anderen Informationen außer der Prozess-ID herausfiltern. Dies kann bei der Automatisierung und der Erstellung von Skripten nützlich sein, wie das vorherige Beispiel zeigt, indem es mit dem Befehl kill kombiniert wird

$ sudo lsof -t -u {Benutzername}

Ausgabe

$ sudo lsof -t -u abhisheknair
1239
1240

$
Mit lsof können wir mehrere Argumente mit ODER-Logik kombinieren, wie unten gezeigt

$ sudo lsof -u {Benutzername} -c {Prozess-Name}

Ausgabe

$ 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

$
Wenn Sie eine logische UND-Verknüpfung wünschen, können Sie alternativ die Option -a verwenden

$ sudo lsof -u {Benutzername} -c {Prozess-Name} -a

Ausgabe

$ sudo lsof -u ftpuser -c bash -a
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
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

$

Offene Dateien nach Prozess auflisten

Wir können auch die von einem bestimmten Prozess geöffneten Dateien auflisten, indem wir die Option -c gefolgt von dem Prozessnamen verwenden

$ sudo lsof -c {Prozess-Name}

Ausgabe

$ sudo lsof -c ssh
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
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

Offene Dateien nach PID auflisten

Wenn Sie die von einem Prozess geöffneten Dateien auflisten möchten, aber anstatt des Prozessnamens seine ID angeben möchten, können Sie alternativ das Flag -p gefolgt von der Prozess-ID verwenden

$ sudo lsof -p {Prozess-id}

Ausgabe

$ 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
  • Wenn Sie alle geöffneten Dateien mit Ausnahme derer, die von einem bestimmten Prozess geöffnet wurden, auflisten möchten, verwenden Sie -p gefolgt von ^process-id.
$ sudo lsof -p ^{process-id}

Offene Dateien auflisten, die das Verzeichnis

Um Prozesse aufzulisten, die Dateien unter einem bestimmten Verzeichnis geöffnet haben, verwenden Sie die Option D gefolgt vom Verzeichnispfad

$ sudo lsof D {Pfad}

Ausgabe

$ 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

$
Wenn Sie die Dateien in Unterverzeichnissen nicht rekursiv auflisten möchten, verwenden Sie das Flag -d gefolgt vom Verzeichnispfad

$ sudo lsof d {Pfad}

Ausgabe

$ 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

$

Modus wiederholen

lsof kann im Wiederholungsmodus ausgeführt werden. Im Wiederholungsmodus erzeugt lsof in regelmäßigen Abständen Ausgaben und druckt sie aus. Auch hier gibt es zwei Wiederholungsmodi, die von lsof unterstützt werden, nämlich mit den Flaggen -r und r. Mit der Flagge -r wiederholt lsof die Ausführung, bis es ein Interrupt-/Kill-Signal vom Benutzer erhält, während mit dem Flag r der Wiederholungsmodus von lsof beendet wird, sobald die Ausgabe keine offenen Dateien mehr enthält. Zusätzlich können wir mit den Flaggen -r oder r eine Zeitverzögerung festlegen

$ sudo lsof {Argumente} -r{Zeitintervall}

Ausgabe

$ 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
=======

Offene Dateien mit Netzwerkprotokoll auflisten

lsof unterstützt die Auflistung aller Arten von Linux-Dateien, einschließlich Netzwerk-Sockets usw. So können wir mit dem Flag -i Details zu offenen Netzwerkverbindungen auflisten

$ sudo lsof -i

Ausgabe

$ 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)

$
Um alle Netzwerkverbindungen aufzulisten, die von einer bestimmten Prozess-ID verwendet werden, können Sie lsof wie folgt verwenden

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

Ausgabe

$ sudo lsof -i -a -p 997
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)

$
Oder um alle Netzwerkverbindungen aufzulisten, die von einem bestimmten Prozess verwendet werden, können wir process-name wie folgt angeben

$ sudo lsof -i -a -c {Prozess-Name}

Ausgabe

$ 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)

$
Wir können die Ausgabe von lsof mit dem Flag -i nach dem Typ des Netzwerkprotokolls filtern, d.h. nach TCP oder UDP, indem wir den Protokolltyp angeben

$ sudo lsof -i {protocol}

Ausgabe

$ sudo lsof -i tcp
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)
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)

$
ODER

Ausgabe

$ 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

$

Offene Dateien nach Port auflisten

Wir können auch die Ausgabe von lsof mit dem Flag -i nach Portnummer filtern, indem wir die folgende Befehlssyntax verwenden

$ sudo lsof -i :{Port-Nummer}

Ausgabe

$ sudo lsof -i :22
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)

$

Offene Dateien nach IPv4/IPv6 auflisten

Sie können die Liste der Netzwerkverbindungen filtern, indem Sie sie entweder auf IPv4 oder IPv6 beschränken. Verwenden Sie die folgende Befehlssyntax, um nur eine IP v4-Liste zu erhalten

$ sudo lsof -i4

Ausgabe

$ sudo lsof -i4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
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)

$
ODER um nur IPv6-Details zu erhalten, verwenden Sie

$ sudo lsof -i6

Ausgabe

$ sudo lsof -i6
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
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)

$

Offene Dateien auf NFS auflisten

lsof kann auch alle NFS-Dateien auflisten, die derzeit von einem Benutzer geöffnet sind

$ sudo lsof -N -u abhisheknair -a

Gesperrte gelöschte Dateien auflisten

Manchmal kommt es vor, dass Dateien in Linux gelöscht werden, aber immer noch von einem oder mehreren Prozessen gesperrt sind. Diese Dateien werden dann nicht in der normalen Dateisystemliste (z.B. mit dem Befehl ls ) aufgeführt, verbrauchen aber weiterhin Speicherplatz, wie die Ausgabe von df zeigt. Dies geschieht insbesondere bei großen Dateien, die absichtlich gelöscht wurden, um Speicherplatz freizugeben, ohne die Prozesssperre aufzuheben. Sie können solche Prozesse mit lsof wie folgt durchführen finden

$ sudo lsof {Pfad} | grep gelöscht

Ausgabe

$ sudo lsof / | grep deleted
firewalld 654 root 8u REG 253,0 4096 16777726 /tmp/#16777726 (gelöscht)
tuned 968 root 8u REG 253,0 4096 16777720 /tmp/#16777720 (gelöscht)

$

Fazit

lsof bietet eine Reihe von Optionen zur Anpassung der Ausgabe an Ihre Bedürfnisse. Es ist ein nützliches Dienstprogramm für die täglichen Aufgaben der System- und Netzwerkverwaltung. Die Möglichkeit, verschiedene Argumente miteinander zu kombinieren, macht es noch nützlicher und ermöglicht es Ihnen, auf einfache Weise die gewünschte Ausgabe zu erhalten. In der Manpage von lsof finden Sie alle unterstützten Argumente und deren Verwendung

$ man lsof
  • Abhishek Nair
    Autor
Dank an unsere Sponsoren
Weitere gute Lektüre zu Linux
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder