lsof
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.
Alltäglicher Nutzen
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