Systemeinblicke mit Kommandozeilentools: lsof und lsblk

Hinweis: Dieser Artikel erschien vorab in in englischer Sprache im Fedora Magazin.
In unserer fortlaufenden Serie über Linux-Systemwerkzeuge und -einblicke werfen wir einen Blick auf grundlegende Kommandozeilen-Dienstprogramme, die Informationen über die Hardware und den Status des Systems liefern. Nach unseren vorherigen Artikeln über lscpu, lsusb, dmidecode und lspci, wenden wir uns nun lsof und lsblk zu. Diese Tools sind besonders nützlich für die Untersuchung offener Dateien, aktiver Netzwerkverbindungen und gemounteter Block-Devices auf unserem Linux-System.
Übersicht geöffneter Dateien mit lsof
lsof (list open files) ist ein mächtiges Kommandozeilen-Tool. Da fast alles in Linux als Datei behandelt wird, bietet lsof detaillierte Einblicke in viele Teile des Systems, indem es auflistet, welche Dateien verwendet werden, welche Prozesse auf sie zugreifen und sogar welche Netzwerkports offen sind (siehe z.B. Wikipedia zu Network socket für weitere Informationen).
Nutzung
Wir führen zunächst den grundlegenden lsof-Befehl aus, um einen Überblick über die offenen Dateien des Systems zu erhalten:
$ sudo lsof
sudo wurde zum erlangen erweiterter Rechte verwendet. Dies ist erforderlich, um Informationen über Dateien zu erhalten, die von Prozessen geöffnet wurden, welche nicht über das eigene Benutzerkonto gestartet wurden. Der Befehl gibt viele Informationen aus, wir werden die Ausgabe in den folgenden Beispielen auf spezifische Informationen zu einigen häufigen Anwendungsfällen eingrenzen.
Beispiel 1: Finden offener Dateien nach Benutzer oder Prozess
Um zu identifizieren, welche Dateien ein bestimmter Benutzer oder Prozess geöffnet hat, kann lsof sehr hilfreich sein.
Um alle von einem bestimmten Benutzer geöffneten Dateien aufzulisten:
$ sudo lsof -u <benutzername>
Dies gibt eine Liste der offenen Dateien zurück, die dem angegebenen Benutzer gehören. Zum Beispiel:
$ sudo lsof -u johndoe
Man sieht Details wie die Prozess-ID (PID), den Datei-Deskriptor, -typ und -pfad.
Der -p-Flag kann genutzt werden um nach Prozess-ID (PID) zu filtern:
$ lsof -p <PID>
Dies ist besonders nützlich für die Fehlersuche bei Problemen mit bestimmten Prozessen, beispielsweise um zu überprüfen will, welche Dateien von einem bestimmten Dienst offen gehalten werden. sudo wird verwendet, wenn der Zielprozess nicht dem eigenen Benutzer gehört.
Beispielausgabe:
$ lsof -p 873648
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 873648 user cwd DIR 0,39 8666 257 /home/user
bash 873648 user rtd DIR 0,35 158 256 /
bash 873648 user txt REG 0,35 1443376 12841259 /usr/bin/bash
bash 873648 user mem REG 0,33 12841259 /usr/bin/bash (path dev=0,35)
bash 873648 user mem REG 0,33 14055145 /usr/lib/locale/locale-archive (path dev=0,35)
bash 873648 user mem REG 0,33 14055914 /usr/lib64/libc.so.6 (path dev=0,35)
bash 873648 user mem REG 0,33 13309071 /usr/lib64/libtinfo.so.6.4 (path dev=0,35)
bash 873648 user mem REG 0,33 14059926 /usr/lib64/gconv/gconv-modules.cache (path dev=0,35)
bash 873648 user mem REG 0,33 14055911 /usr/lib64/ld-linux-x86-64.so.2 (path dev=0,35)
bash 873648 user 0u CHR 136,3 0t0 6 /dev/pts/3
bash 873648 user 1u CHR 136,3 0t0 6 /dev/pts/3
bash 873648 user 2u CHR 136,3 0t0 6 /dev/pts/3
bash 873648 user 255u CHR 136,3 0t0 6 /dev/pts/3
Beispiel 2: Identifizierung offener Netzwerkverbindungen über Sockets
Dank der Fähigkeit, Netzwerkverbindungen aufzulisten, ist lsof auch ein praktischer Helfer für die Diagnose netzwerkbezogener Probleme. Dies ist insbesondere praktisch, da es normalerweise auch auf besonders gehärteten, minimal-Systeminstallation verfügbar ist.
Um alle offenen Netzwerkverbindungen (TCP/UDP Sockets) anzuzeigen, nutzt man den -i-Flag:
$ sudo lsof -i
Dies listet die aktiven Neztwerkverbindungen zusammen mit dem zugehörigen Protokoll, Port und Prozessdetails auf.
Man kann dabei auch nach bestimmten Protokollen (wie TCP oder UDP) filtern, IPv4 und v6 ein- oder ausschließen und mehrere Werte kombinieren (der „Beispiel“-Abschnitt von man lsof bietet viele nützliche Informationen, einschließlich der Möglichkeit zur Negation von Kriterien):
$ sudo lsof -i tcp
$ sudo lsof -i udp
$ sudo lsof -i 4tcp
$ sudo lsof -i 6tcp
$ sudo lsof -i 4tcp@example.com
Verbindungen zu einem bestimmten Port können wie folge gelistet werden:
$ sudo lsof -i :<portnummer>
Beispielsweise Verbindungen zu Port 22 (SSH):
$ sudo lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 904379 root 3u IPv4 5622530 0t0 TCP *:ssh (LISTEN)
sshd 904379 root 4u IPv6 5622532 0t0 TCP *:ssh (LISTEN)
Diese Übersichten können sehr hilfreich dabei sein, um unbefugte Verbindungen zu identifizieren oder einfach die Netzwerkaktivität auf einem System für Debugging-Zwecke zu überwachen.
Untersuchung von Block-Devices mit lsblk
Ein weiteres nützliches Tool ist lsblk, da es Informationen über alle verfügbaren Block-Devices des Systems liefert. Block-Devices sind unter anderem Festplatten, SSDs und USB-Speicher. Das Kommandobietet eine baumähnliche Ansicht und hilft dabei, die Beziehungen zwischen Partitionen, Geräten und ihren Mount-Points (Einhängepunkte im Verzeichnisbaum) zu verstehen.
Nutzung
Das Ausführen von lsblk ohne Optionen erzeugt eine übersichtliche, hierarchische Struktur der Block-Devices:
$ lsblk
Sie zeigt alle Block-Devices in einer Baumstruktur, einschließlich ihrer Größe, ihres Typs (Festplatte, Partition) und ihres Mount-Punkts (falls zutreffend).
Beispiele
Für eine Übersicht über die Dateisysteme und deren Eigenschaften wird das -f-Flag verwendet:
$ lsblk -f
Dies zeigt nicht nur die Devices se;bst, sondern auch Details über die Dateisysteme auf jeder Partition, einschließlich des Typs (z.B. ext4, vfat, swap), der UUID und der aktuellen Mount-Points.
Wenn man weniger Informationen über die Geräte selbst wünscht (ohne Partitionen oder Mount-Punkte anzuzeigen), ist die -d Option nützlich:
$ lsblk -d
Es gibt auch eine -J oder --json Option. Bei Verwendung gibt der Befehl die Informationen im JSON-Format aus. Dies bietet eine strukturierte Ansicht, die besonders nützlich für Scripting und Automatisierung ist.
Beispielausgaben von meinem Laptop (einige lange Informationen wie UUIDs wurden zur besseren Lesbarkeit gekürzt):
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 0B 0 disk
sdb 8:16 1 0B 0 disk
sdc 8:32 1 0B 0 disk
zram0 252:0 0 8G 0 disk [SWAP]
nvme0n1 259:0 0 931,5G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 929,9G 0 part
└─luks-84257c20[...] 253:0 0 929,9G 0 crypt /home
$ lsblk -d
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 0B 0 disk
sdb 8:16 1 0B 0 disk
sdc 8:32 1 0B 0 disk
zram0 252:0 0 8G 0 disk [SWAP]
nvme0n1 259:0 0 931,5G 0 disk
$ lsblk -f
NAME FSTYPE [...]LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
sdb
sdc
zram0 [SWAP]
nvme0n1
├─nvme0n1p1 vfat 4C5B-4355 579,7M 3% /boot/efi
├─nvme0n1p2 ext4 30eff827[...] 605M 31% /boot
└─nvme0n1p3 crypto_LUKS 84257c20[...]
└─luks-84257[...] btrfs fe[...] 666f9d6f[...] 303,1G 67% /home
/
$ lsblk -f -J
{
"blockdevices": [
[...],{
"name": "nvme0n1",
"fstype": null,
"fsver": null,
"label": null,
"uuid": null,
"fsavail": null,
"fsuse%": null,
"mountpoints": [
null
],
"children": [
{
"name": "nvme0n1p1",
"fstype": "vfat",
"fsver": "FAT32",
"label": null,
"uuid": "4C5B-4355",
"fsavail": "579,7M",
"fsuse%": "3%",
"mountpoints": [
"/boot/efi"
]
},{
"name": "nvme0n1p2",
"fstype": "ext4",
"fsver": "1.0",
"label": null,
"uuid": "30eff827-[...]",
"fsavail": "605M",
"fsuse%": "31%",
"mountpoints": [
"/boot"
]
},{
"name": "nvme0n1p3",
"fstype": "crypto_LUKS",
"fsver": "2",
"label": null,
"uuid": "84257c20-[...]",
"fsavail": null,
"fsuse%": null,
"mountpoints": [
null
],
"children": [
{
"name": "luks-[...]",
"fstype": "btrfs",
"fsver": null,
"label": "fedora_localhost-live",
"uuid": "666f9d6f-[...]",
"fsavail": "303,1G",
"fsuse%": "67%",
"mountpoints": [
"/home", "/"
]
}
]
}
]
}
]
}
Fazit
Die Befehle lsof und lsblk bieten Einblicke in die Dateiverwendung, Netzwerkaktivität und Block-Devicee-Strukturen. Ob Sie offene Datei-Handles verfolgen, Netzwerkverbindungen diagnostizieren oder Speichergeräte überprüfen; ob Sie Fehler beheben, optimieren oder einfach nur neugierig sind; diese Tools liefern wertvolle Daten, die Ihnen helfen können, Ihre Fedora Linux-Umgebung besser zu verstehen und zu verwalten. Bis zum nächsten Mal, wenn wir weitere nützliche Auflistungs- und Informations-Kommandozeilen-Tools und ihre Verwendung betrachten werden.