LSFD(1) | Dienstprogramme für Benutzer | LSFD(1) |
BEZEICHNUNG¶
lsfd - Dateideskriptoren auflisten
ÜBERSICHT¶
lsfd [Option]
BESCHREIBUNG¶
lsfd ist als ein moderner Ersatz für lsof(8) auf Linux-Systemen gedacht. Im Gegensatz zu lsof ist lsfd auf den Linux-Kernel spezialisiert; es unterstützt Linux-spezifische Funktionen wie Namensräume mit einfacherem Code. lsfd ist kein direkter Ersatz für lsof, da die Befehlszeilenschnittstellen und Ausgabeformate unterschiedlich sind.
Die Standardausgabe kann sich ändern. Daher sollten Sie vermeiden, die Standardausgabe in Ihren Skripten zu verwenden, wo immer es möglich ist. Definieren Sie in Umgebungen, wo eine stabile Ausgabe erforderlich ist, stets die erwarteten Spalten, indem Sie die Option --output Spaltenliste angeben.
lsfd verwendet Libsmartcols für die Formatierung und Filterung der Ausgabe. Siehe die Beschreibung der Option --output für die Anpassung des Ausgabeformats und die Option --filter für die Filterung. Mit lsfd --help erhalten Sie eine Liste aller verfügbaren Spalten.
OPTIONEN¶
-l, --threads
-J, --json
-n, --noheadings
-o, --output Liste
Die voreingestellte Liste der Spalten kann erweitert werden, indem Sie die Liste im Format +Liste angeben (beispielsweise lsfd -o +DELETED).
-r, --raw
--notruncate
-p, --pid PIDs
Sowohl die Option -Q mit einem Ausdruck, der die Prozesskennung (PID) enthält, z.B. -Q (PID == 1), als auch die Option -p, z.B. -p 1, können das Gleiche ausgeben, aber die Option -p ist effizienter, da sie in einem viel früheren Stadium der Verarbeitung als die Option -Q agiert.
-i[4|6], --inet[=4|=6]
-Q, --filter Ausdruck
-C, --counter Bezeichnung:Filterausdruck
Weitere Informationen zu Filterausdrücken finden Sie im Abschnitt FILTERAUSDRUCK. Die Bezeichnung sollte weder { noch : enthalten. Indem Sie diese Option mehrfach angeben, können Sie mehrere Zähler definieren.
Siehe auch ZÄHLERBEISPIELE.
--summary[=wann]
Die Zusammenfassung meldet Zähler. Ein Zähler besteht aus einer Bezeichnung und einem ganzzahligen Wert. Mit der Option --counter können Sie einen Zähler definieren. Falls Sie keinen Zähler definieren, verwendet lsfd zur Erstellung der Zusammenfassung voreingestellte Zähler (Standardzähler).
ACHTUNG: Die gemeinsame Verwendung von --summary und --json könnte die Ausgabe unbrauchbar machen. Zulässig ist nur die Kombination von --summary=only und --json.
--debug-filter
--dump-counters
-h, --help
-V, --version
AUSGABESPALTEN¶
Jede Spalte hat einen Typ. Die Typen werden in < und > eingefasst.
ACHTUNG: Die Namen und Typen der Spalten sind noch nicht stabil. Sie könnten in zukünftigen Veröffentlichungen geändert werden.
AINODECLASS <Zeichenkette>
ASSOC <Zeichenkette>
BLKDRV <Zeichenkette>
CHRDRV <Zeichenkette>
COMMAND <Zeichenkette>
DELETED <boolesch>
DEV <Zeichenkette>
DEVTYPE <Zeichenkette>
ENDPOINT <Zeichenkette>
FIFO-Typ
Die letzten Zeichen ([-r][-w]) repräsentieren den Lese- und/oder Schreibmodus des Endpunkts
lsfd sammelt Endpunkte innerhalb der Prozesse, die lsfd einliest; lsfd kann einige Endpunkte verfehlen, wenn Sie die Prozesse mit der Option -p eingrenzen.
FD <Zahl>
FLAGS <Zeichenkette>
FUID <Zahl>
INET.LADDR <Zeichenkette>
INET.RADDR <Zeichenkette>
INET6.LADDR <Zeichenkette>
INET6.RADDR <Zeichenkette>
INODE <Zahl>
KNAME <Zeichenkette>
KTHREAD <boolesch>
MAJ:MIN <Zeichenkette>
MAPLEN <Zahl>
MISCDEV <Zeichenkette>
MNTID <Zahl>
MODE <Zeichenkette>
NAME <Zeichenkette>
Einige Dateien haben spezielle Formate und Informationsquellen:
NETLINK
PACKET
pidfd
lsfd bezieht TARGET-PID und TARGET-NSPIDS aus /proc/PID/fdinfo/dd.
PING
PINGv6
RAW
RAWv6
TCP, TCPv6
UDP, UDPv6
lsfd blendet raddr= aus, falls UDP.FERNE-ADRESSE 0.0.0.0 und UDP.FERNER-PORT 0 ist.
UDP-LITE, UDPLITEv6
UNIX-STREAM
UNIX
NETLINK.GROUPS <Zahl>
NETLINK.LPORT <Zahl>
NETLINK.PROTOCOL <Zeichenkette>
NLINK <Zahl>
NS.NAME <Zeichenkette>
NS.TYPE <Zeichenkette>
OWNER <Zeichenkette>
PACKET.IFACE <Zeichenkette>
PACKET.PROTOCOL <Zeichenkette>
PARTITION <Zeichenkette>
PID <Zahl>
PIDFD.COMM <Zeichenkette>
PIDFD.NSPID <Zeichenkette>
Zitat aus kernel/fork.c des Linux-Quellbaums:
If pid namespaces are supported then this function will also print the pid of a given pidfd refers to for all descendant pid namespaces starting from the current pid namespace of the instance, i.e. the Pid field and the first entry in the NSpid field will be identical.
Note that this differs from the Pid and NSpid fields in
/proc/<pid>/status where Pid and NSpid are always shown relative to
the pid namespace of the procfs instance.
PIDFD.PID <Zahl>
PING.ID <`Zahl`>
POS <Zahl>
RAW.PROTOCOL <Zahl>
RDEV <Zeichenkette>
SIZE <Zahl>
SOCK.LISTENING <boolesch>
SOCK.NETS <Zahl>
SOCK.PROTONAME <Zeichenkette>
SOCK.STATE <Zeichenkette>
SOCK.TYPE <Zeichenkette>
SOURCE <Zeichenkette>
STTYPE <Zeichenkette>
TCP.LADDR <Zeichenkette>
TCP.LPORT <Ganzzahl>
TCP.RADDR <Zeichenkette>
TCP.RPORT <Ganzzahl>
TID <Zahl>
TYPE <Zeichenkette>
UDP.LADDR <Zeichenkette>
UDP.LPORT <Ganzzahl>
UDP.RADDR <Zeichenkette>
UDP.RPORT <Ganzzahl>
UDPLITE.LADDR <Zeichenkette>
UDPLITE.LPORT <Ganzzahl>
UDPLITE.RADDR <Zeichenkette>
UDPLITE.RPORT <Ganzzahl>
UID <Zahl>
UNIX.PATH <Zeichenkette>
USER <Zeichenkette>
FILTERAUSDRUCK¶
lsfd wertet den mit der Option --filter übergebenen Filterausdruck jedes Mal aus, bevor eine Dateizeile ausgegeben wird. lsfd gibt die Zeile nur aus, wenn das Ergebnis der Auswertung wahr ist.
Ein Ausdruck besteht aus Spaltennamen, wörtlich zu verarbeitenden Zeichen(folgen) und Operatoren wie: »DELETED«, »(PID == 1)«, »(NAME == "/etc/passwd")«, »(PID == 1) && DELETED«. DELETED, PID und NAME sind in diesem Beispiel Spaltennamen. »1« und »/etc/passwd« sind wortwörtlich zu verarbeitende Zeichen(folgen); »==« und »&&« sind Operatoren.
Vor der Auswertung ersetzt lsfd Spaltennamen in dem angegebenen Ausdruck durch die tatsächlichen Spaltenwerte in der Zeile. Es gibt drei verschiedene Datentypen: boolesch, Zeichenkette und Zahl (bzw. Anzahl oder Nummer). Für Spalten mit booleschen Werten kann der Wert für sich allein stehen. Für Zeichenketten- und Zahl-Werte muss der Wert ein Operand eines Operators sein, beispielsweise »(PID == 1)«. Siehe AUSGABESPALTEN zu den Spaltentypen.
Eine wortwörtlich zu verarbeitende Zeichenfolge stellt einen Wert unmittelbar dar. Siehe BOOLLIT, STRLIT und NUMLIT. Verschiedene Datentypen haben eine verschiedene Syntax für diese Zeichenfolgen.
Ein Operator agiert mit einem oder zwei Operand(en). Ein Operator erwartet bestimmte Datentypen von seinen Operanden. Die Übergabe eines unerwarteten Datentyps an einen Operator verursacht einen Syntaxfehler.
Die Operatoren and, or, eq, ne, le, lt, ge, gt, =~, !~ akzeptieren zwei Operanden. Alphabetisch benannte Operatoren haben an die Programmiersprache C angelehnte Aliase: &&, ||, ==, !=, <, ⇐, >= und >.
! ist der einzige Operator, der nur einen Operanden akzeptiert.
eq, ne und deren Aliase erwarten Operanden des gleichen Datentyps. Die Übergabe dieser Operatoren liefert einen booleschen Wert zurück.
and, or, not und deren Aliase erwarten Operanden booleschen Datentyps. Die Übergabe dieser Operatoren liefert einen booleschen Wert zurück.
lt, le, gt, ge und deren Aliase erwarten Operanden des Datentyps Zahl. Die Übergabe dieser Operatoren liefert einen booleschen Wert zurück.
=~ dient der Trefferfindung für reguläre Ausdrücke. Falls eine Zeichenkette auf der rechten Seite einem regulären Ausdruck an der linken Seite entspricht, ist das Ergebnis wahr. Der Operand auf der rechten Seite muss eine wortwörtliche Zeichenkette sein. Siehe STRLIT zur Syntax.
!~ ist eine Abkürzung von »not (ZEICHENKETTE =~ MUSTER)«; sie kehrt das Ergebnis von =~ um.
Einschränkungen¶
Die aktuelle Implementierung definiert keine Rangfolge unter den Operatoren. Mit ( und ) können Sie die Unterausdrücke explizit gruppieren, falls Ihr Ausdruck mehr als zwei Operatoren enthält.
Für Werte des Datentyps Zahl unterstützt die Filter-Engine nur Null oder nicht-negative Ganzzahlen.
Semi-formelle Syntax¶
EXPR
BOOLEXP0
BOOLEXP
COLUMN
BOOLOP1
STREXP
NUMEXP
BOOLLIT
CHARS
STRLIT
NUMLIT
BOOLOP2
OP2
BOOLOP2BL
OP2BL
BOOLOP2CMP
OP2CMP
BOOLOP2REG
OP2REG
FILTERBEISPIELE¶
lsfd verfügt über einige Filteroptionen. In den meisten Fällen genügt es, die Option -Q (oder --filter) zu kennen. In Kombination mit der Option -o (oder --output) können Sie die Ausgabe nach Ihren Wünschen anpassen.
Die mit den mit den Prozesskennungen (PIDs) 1 und 2 assoziierten Dateien auflisten:
# lsfd -Q '(PID == 1) oder (PID == 2)'
Das Gleiche auf alternative Weise:
# lsfd -Q '(PID == 1) || (PID == 2)'
Das Gleiche auf effizientere Weise:
# lsfd --pid 1,2
Kommata statt Leerzeichen verwenden:
# lsfd --pid '1 2'
pidof(1) für eine Auflistung der Dateien verwenden, die mit »firefox« assoziiert sind:
# lsfd --pid "$(pidof firefox)"
Den ersten Dateideskriptor auflisten, der vom Prozess mit der Prozesskennung (PID) 1 geöffnet wurde:
# lsfd -Q '(PID == 1) and (FD == 1)'
Das Gleiche auf alternative Weise:
# lsfd -Q '(PID == 1) && (FD == 1)'
Alle laufenden ausführbaren Dateien auflisten:
# lsfd -Q 'ASSOC == "exe"'
Das Gleiche auf alternative Weise:
# lsfd -Q 'ASSOC eq "exe"'
Das Gleiche, aber nur Dateinamen ausgeben:
# lsfd -o NAME -Q 'ASSOC eq "exe"' | sort -u
Gelöschte Dateien auflisten, die Prozessen zugeordnet sind:
# lsfd -Q 'DELETED'
Nicht-reguläre Dateien auflisten:
# lsfd -Q 'TYPE != "REG"'
Blockorientierte Geräte auflisten:
# lsfd -Q 'DEVTYPE == "blk"'
Das Gleiche, aber mit der Spalte TYP:
# lsfd -Q 'TYPE == "BLK"'
Dateien auflisten, in deren Namen das Verzeichnis »dconf« enthalten ist:
# lsfd -Q 'NAME =~ ".\*/dconf/.*"'
In einer virtuellen QEMU-Maschine geöffnete Dateien auflisten:
# lsfd -Q '(COMMAND =~ ".\*qemu.*") and (FD >= 0)'
Dateien ausblenden, die mit Kernel-Threads assoziiert sind:
# lsfd -Q '!KTHREAD'
ZÄHLERBEISPIELE¶
Die Anzahl der Netlink-Socket-Deskriptoren und Unix-Socket-Deskriptoren ausgeben:
# lsfd --summary=only \
-C 'netlink sockets':'(NAME =~ "NETLINK:.*")' \
-C 'unix sockets':'(NAME =~ "UNIX:.*")' VALUE COUNTER
57 netlink sockets
1552 unix sockets
Das Gleiche, aber im JSON-Format ausgeben:
# lsfd --summary=only --json \
-C 'netlink sockets':'(NAME =~ "NETLINK:.*")' \
-C 'unix sockets':'(NAME =~ "UNIX:.*")' {
"lsfd-summary": [
{
"value": 15,
"counter": "netlink sockets"
},{
"value": 798,
"counter": "unix sockets"
}
] }
GESCHICHTE¶
Der Befehl lsfd ist Teil des Pakets util-linux seit Version 2.38.
AUTOREN¶
Masatake YAMATO <yamato@redhat.com>, Karel Zak <kzak@redhat.com>
SIEHE AUCH¶
FEHLER MELDEN¶
Nutzen Sie zum Melden von Fehlern das Fehlererfassungssystem auf <https://github.com/util-linux/util-linux/issues>.
VERFÜGBARKEIT¶
Der Befehl lsfd ist Teil des Pakets util-linux, welches aus dem Linux-Kernel-Archiv <https://www.kernel.org/pub/linux/utils/util-linux/> heruntergeladen werden kann.
2024-01-05 | util-linux 2.39.3 |