Lsof: Unterschied zwischen den Versionen

Aus Foxwiki
Zeile 74: Zeile 74:
Verwendet wird dieses Ausgabeformat z. B. von einigen Scripten, die mit lsof mitgeliefert werden.
Verwendet wird dieses Ausgabeformat z. B. von einigen Scripten, die mit lsof mitgeliefert werden.


== Alltäglicher Nutzen ==
== Anwendungen ==
[[File:lsof.png|mini|400px|[https://www.instagram.com/p/C7q613ZuHMm/ ''lsof'' Beispiele]]]
[[File:lsof.png|mini|400px|[https://www.instagram.com/p/C7q613ZuHMm/ ''lsof'' Beispiele]]]
Sehr oft wird lsof genutzt, wenn der [[Unix]]-Befehl [[Mounten#mount (Unix)|umount]] sich weigert, ein Gerät auszuhängen, wenn noch Dateien auf diesem Gerät bzw. in dessen Mount-Verzeichnis geöffnet sind (die Raute stellt eine Root-Shell dar):
Sehr oft wird lsof genutzt, wenn der [[Unix]]-Befehl [[Mounten#mount (Unix)|umount]] sich weigert, ein Gerät auszuhängen, wenn noch Dateien auf diesem Gerät bzw. in dessen Mount-Verzeichnis geöffnet sind (die Raute stellt eine Root-Shell dar):

Version vom 4. Juni 2024, 21:07 Uhr

lsof (List open files) - zeigt welche Programme welche Dateien oder Sockets geöffnet halten

Beschreibung

Ausgabeformat

Offene Dateien
  • UNIX Domain Sockets (type=unix)
  • Reguläre Dateien (type=REG)
  • FIFOs (type=FIFO)
  • Geöffnete Verzeichnisse (type=DIR)
  • Internet Domain sockets (type=IPv4 oder type=IPv6)
  • Character devices (Spezialdateien wie /dev/random; type=CHR)

und noch einige dutzend andere, wie AX.25-Sockets, Block-Devices usw.

Ausgabe

Anzeige unterschiedlicher Typen sehen (Spalte TYPE)

  • hier vorwiegend des sshd und ssh-Client
COMMAND     PID   TID       USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
...
ssh-agent  2678              lbo    3u     unix 0xffff88013e71cac0      0t0       7624 /tmp/ssh-oyerzGJI2633/agent.2633
ssh-agent  2678              lbo    6w     FIFO                0,8      0t0       4795 pipe
ssh-agent  2678              lbo    8r     FIFO                0,8      0t0       4799 pipe
system-co  2866              lbo  mem       REG                8,6   162968    1050015 /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1
sshd       3031             root  cwd       DIR                8,6     4096          2 /
sshd       3031             root  rtd       DIR                8,6     4096          2 /
sshd       3031             root  txt       REG                8,6   517088    1053360 /usr/sbin/sshd
sshd       3031             root  mem       REG                8,6   131107    1187879 /lib/x86_64-linux-gnu/libpthread-2.13.so
sshd       3031             root  mem       REG                8,6    80712    1180726 /lib/x86_64-linux-gnu/libresolv-2.13.so
sshd       3031             root    0u      CHR                1,3      0t0       1028 /dev/null
sshd       3031             root    3u     IPv4               8026      0t0        TCP *:ospfapi (LISTEN)
sshd       3031             root    4u     IPv6               8028      0t0        TCP *:ospfapi (LISTEN)
ssh        7314              lbo  cwd       DIR                8,7     4096    5767169 /home/lbo
ssh        8602              lbo    3r     IPv6              68343      0t0        TCP [2001:470:1f0b:2f2:3189:67c1:b550:9400]:56194->obsd-lbo6:ssh (ESTABLISHED)
...
udevd      3226             root  11u   netlink 0t0      10784 KOBJECT_UEVENT
...
Ausgabeformat für andere Programme

Für die Verarbeitung der Ausgabe mit Scripten kann mit der Option -F ein alternatives Ausgabeformat erzeugt werden, bei dem in jeder Zeile ein identifizierender Buchstabe gefolgt vom entsprechenden Wert steht.

  • Für jeden laufenden Prozess wird ein mehrzeiliger Abschnitt angelegt, der eingeleitet wird durch die Zeile mit dem Buchstaben p und der Prozess-ID.
  • Innerhalb eines Prozessabschnitts befinden sich Werte wie die User-ID des Prozesses, eingeleitet durch u, außerdem mehrere Abschnitte zu den geöffneten Dateien, eingeleitet durch eine Zeile mit dem Buchstaben f und dem File-Descriptor.

Eine beispielhafte Ausgabe für den Prozess sshd mit zwei Datei-Abschnitten sähe dann so aus:

...
p5502
g5502
R1
csshd
u0
Lroot
fcwd
a
l
tDIR
D0x811
s4096
i2
k25
n/
ftxt
a
l
tREG
D0x811
s540896
i657919
k1
n/usr/sbin/sshd
...

Verwendet wird dieses Ausgabeformat z. B. von einigen Scripten, die mit lsof mitgeliefert werden.

Anwendungen

lsof Beispiele

Sehr oft wird lsof genutzt, wenn der Unix-Befehl umount sich weigert, ein Gerät auszuhängen, wenn noch Dateien auf diesem Gerät bzw. in dessen Mount-Verzeichnis geöffnet sind (die Raute stellt eine Root-Shell dar):

# umount /mount/path
umount: /mount/path: device is busy.

Durch lsof lässt sich nun einfach feststellen, welche Programme beendet werden müssen, um ein erfolgreiches Aushängen zu gewährleisten:

# lsof /mount/path
bash 3156             usr cwd DIR               8,33     4096          2 /mount/path

Aus dem gefundenen Eintrag lässt sich entnehmen, dass der Nutzer usr noch eine bash-Shell mit PID 3156 laufen hat, die /mount/path als Arbeitsverzeichnis (Current Working Directory) nutzt, erkennbar am Typ DIR.

Die mount-Version aus dem util-linux-Paket weist sogar auf lsof hin:

# umount /mount/path
umount: /mount/path: device is busy.
       (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))


Anhang

Siehe auch

Links

Weblinks
  1. https://de.wikipedia.org/wiki/Lsof
  2. https://github.com/lsof-org/lsof
  3. lsof(8)