GNU/Linux >> LINUX-Kenntnisse >  >> Linux

15 Linux-lsof-Befehlsbeispiele (geöffnete Dateien identifizieren)

lsof steht für List Open Files.

An den Befehl lsof kann man sich leicht erinnern, wenn man ihn sich als „ls + of“ vorstellt, wobei ls für Liste und of für geöffnete Dateien steht.

Es ist ein Befehlszeilenprogramm, das verwendet wird, um die Informationen über die Dateien aufzulisten, die von verschiedenen Prozessen geöffnet werden. In Unix ist alles eine Datei (Pipes, Sockets, Verzeichnisse, Geräte usw.). Wenn Sie also lsof verwenden, können Sie Informationen über alle geöffneten Dateien abrufen.

1. Einführung in lsof

Wenn Sie einfach lsof eingeben, erhalten Sie eine Liste aller geöffneten Dateien, die zu allen aktiven Prozessen gehören.

# lsof

COMMAND  PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init       1       root  cwd       DIR        8,1      4096          2 /
init       1       root  txt       REG        8,1    124704     917562 /sbin/init
init       1       root    0u      CHR        1,3       0t0       4369 /dev/null
init       1       root    1u      CHR        1,3       0t0       4369 /dev/null
init       1       root    2u      CHR        1,3       0t0       4369 /dev/null
init       1       root    3r     FIFO        0,8       0t0       6323 pipe
...

Standardmäßig wird eine Datei pro Zeile angezeigt. Die meisten Spalten sind selbsterklärend. Wir erklären die Details einiger kryptischer Spalten (FD und TYPE).

FD – Repräsentiert den Dateideskriptor. Einige der Werte von FDs sind,

  • cwd – Aktuelles Arbeitsverzeichnis
  • txt – Textdatei
  • mem ​​– Memory Mapped File
  • mmap – Speicherabgebildetes Gerät
  • ZAHL – Stellt den tatsächlichen Dateideskriptor dar. Das Zeichen nach der Zahl, z. B. „1u“, stellt den Modus dar, in dem die Datei geöffnet wird. r für Lesen, w für Schreiben, u für Lesen und Schreiben.

TYP – Gibt den Typ der Datei an. Einige der Werte von TYPEs sind,

  • REG – Normale Datei
  • DIR – Verzeichnis
  • FIFO – Zuerst rein, zuerst raus
  • CHR – Charakterspezifische Datei

Eine vollständige Liste von FD &TYPE finden Sie unter man lsof.

2. Prozesse auflisten, die eine bestimmte Datei geöffnet haben

Sie können nur die Prozesse auflisten, die eine bestimmte Datei geöffnet haben, indem Sie den Dateinamen als Argument angeben.

# lsof /var/log/syslog

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd 488 syslog    1w   REG    8,1     1151 268940 /var/log/syslog

3. Geöffnete Dateien unter einem Verzeichnis auflisten

Mit der Option „+D“ können Sie die Prozesse auflisten, die Dateien in einem bestimmten Verzeichnis geöffnet haben. +D rekursiert auch die Unterverzeichnisse. Wenn Sie nicht möchten, dass lsof rekursiv wird, verwenden Sie die Option „+d“.

# lsof +D /var/log/

COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd  488 syslog   1w   REG    8,1     1151 268940 /var/log/syslog
rsyslogd  488 syslog   2w   REG    8,1     2405 269616 /var/log/auth.log
console-k 144   root   9w   REG    8,1    10871 269369 /var/log/ConsoleKit/history

4. Listen Sie geöffnete Dateien basierend auf Prozessnamen auf, die mit

beginnen

Sie können die geöffneten Dateien nach Prozessnamen auflisten, die mit einer Zeichenfolge beginnen, indem Sie die Option „-c“ verwenden. -c gefolgt vom Prozessnamen listet die Dateien auf, die von dem Prozess geöffnet wurden, beginnend mit diesem Prozessnamen. Sie können mehrere Schalter -c in einer einzigen Befehlszeile eingeben.

# lsof -c ssh -c init

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init         1       root  txt    REG        8,1   124704  917562 /sbin/init
init         1       root  mem    REG        8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
init         1       root  mem    REG        8,1    30684 1442694 /lib/i386-linux-gnu/librt-2.13.so
...
ssh-agent 1528 lakshmanan    1u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    2u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    3u  unix 0xdf70e240      0t0   10464 /tmp/ssh-sUymKXxw1495/agent.1495

5. Listen Sie Prozesse auf, die einen Einhängepunkt verwenden

Manchmal, wenn wir versuchen, ein Verzeichnis auszuhängen, zeigt das System den Fehler „Gerät oder Ressource ausgelastet“ an. Wir müssen also herausfinden, welche Prozesse den Einhängepunkt verwenden, und diese Prozesse beenden, um das Verzeichnis auszuhängen. Mit lsof können wir diese Prozesse finden.

# lsof /home

Folgendes wird auch funktionieren.

# lsof +D /home/

6. Dateien auflisten, die von einem bestimmten Benutzer geöffnet wurden

Um die Liste der von einem bestimmten Benutzer geöffneten Dateien zu finden, verwenden Sie die Option „-u“.

# lsof -u lakshmanan

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
update-no 1892 lakshmanan   20r  FIFO        0,8      0t0      14536 pipe
update-no 1892 lakshmanan   21w  FIFO        0,8      0t0      14536 pipe
bash      1995 lakshmanan  cwd    DIR        8,1     4096     393218 /home/lakshmanan

Manchmal möchten Sie vielleicht Dateien auflisten, die von allen Benutzern geöffnet wurden, erwarten Sie einige 1 oder 2. In diesem Fall können Sie das „^“ verwenden, um nur den bestimmten Benutzer wie folgt auszuschließen

# lsof -u ^lakshmanan

COMMAND    PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
rtkit-dae 1380      rtkit    7u     0000        0,9         0       4360 anon_inode
udisks-da 1584       root  cwd       DIR        8,1      4096          2 /

Der obige Befehl listet alle Dateien auf, die von allen Benutzern geöffnet wurden, außer dem Benutzer „lakshmanan“.

7. Alle geöffneten Dateien eines bestimmten Prozesses auflisten

Sie können alle Dateien auflisten, die von einem bestimmten Prozess mit der Option „-p“ geöffnet wurden. Manchmal ist es hilfreich, weitere Informationen zu einem bestimmten Prozess zu erhalten.

# lsof -p 1753

COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    1753 lakshmanan  cwd    DIR    8,1     4096  393571 /home/lakshmanan/test.txt
bash    1753 lakshmanan  rtd    DIR    8,1     4096       2 /
bash    1753 lakshmanan  255u   CHR  136,0      0t0       3 /dev/pts/0
...

8. Beenden Sie alle Prozesse, die zu einem bestimmten Benutzer gehören

Wenn Sie alle Prozesse beenden möchten, deren Dateien von einem bestimmten Benutzer geöffnet wurden, können Sie die Option „-t“ verwenden, um nur die Prozess-ID des Prozesses auszugeben, und sie wie folgt zum Beenden übergeben

# kill -9 `lsof -t -u lakshmanan`

Der obige Befehl beendet alle Prozesse, die dem Benutzer „lakshmanan“ gehören, der Dateien geöffnet hat.

Ebenso können Sie „-t“ auf viele Arten verwenden. Um beispielsweise die Prozess-ID eines Prozesses aufzulisten, der /var/log/syslog geöffnet hat, kann dies mit

erfolgen
# lsof -t /var/log/syslog

489

Apropos beenden, wussten Sie, dass es 4 Möglichkeiten gibt, einen Prozess zu beenden?

9. Kombinieren Sie weitere Listenoptionen mit OR/AND

Wenn Sie mehr als eine Listenoption in lsof verwenden, werden diese standardmäßig ODER-verknüpft. Zum Beispiel

# lsof -u lakshmanan -c init

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
init         1       root  cwd    DIR        8,1     4096          2 /
init         1       root  txt    REG        8,1   124704     917562 /sbin/init
bash      1995 lakshmanan    2u   CHR      136,2      0t0          5 /dev/pts/2
bash      1995 lakshmanan  255u   CHR      136,2      0t0          5 /dev/pts/2
...

Der obige Befehl verwendet zwei Listenoptionen, ‚-u‘ und ‚-c‘. Der Befehl listet also den Prozess auf, der dem Benutzer „lakshmanan“ gehört, und der Prozessname beginnt mit „init“.

Aber wenn Sie einen Prozess auflisten möchten, der dem Benutzer „lakshmanan“ gehört und der Prozessname mit „init“ beginnt, können Sie die Option „-a“ verwenden.

# lsof -u lakshmanan -c init -a

Der obige Befehl gibt nichts aus, da es keinen solchen Prozess namens „init“ gibt, der dem Benutzer „lakshmanan“ gehört.

10. Führe lsof im Wiederholungsmodus aus

lsof unterstützt auch den Wiederholungsmodus. Es listet zuerst Dateien basierend auf den angegebenen Parametern auf und verzögert für bestimmte Sekunden und listet erneut Dateien basierend auf den angegebenen Parametern auf. Er kann durch ein Signal unterbrochen werden.

Der Wiederholungsmodus kann mit „-r“ oder „+r“ aktiviert werden. Wenn dann „+r“ verwendet wird, endet der Wiederholungsmodus, wenn keine geöffneten Dateien gefunden werden. ‚-r‘ wird weiter auflisten, verzögern, auflisten, bis ein Interrupt gegeben wird, unabhängig davon, ob Dateien geöffnet sind oder nicht.

Jede Zyklusausgabe wird durch „=======“ getrennt. Sie geben auch die Zeitverzögerung als "-r" | an ‘+r’.

# lsof -u lakshmanan -c init -a -r5

=======
=======
COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
inita.sh 2971 lakshmanan  cwd    DIR    8,1     4096  393218 /home/lakshmanan
inita.sh 2971 lakshmanan  rtd    DIR    8,1     4096       2 /
inita.sh 2971 lakshmanan  txt    REG    8,1    83848  524315 /bin/dash
inita.sh 2971 lakshmanan  mem    REG    8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
inita.sh 2971 lakshmanan  mem    REG    8,1   117960 1442612 /lib/i386-linux-gnu/ld-2.13.so
inita.sh 2971 lakshmanan    0u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    1u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    2u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan   10r   REG    8,1       20  393578 /home/lakshmanan/inita.sh
=======

In der obigen Ausgabe gibt es für die ersten 5 Sekunden keine Ausgabe. Danach wird ein Skript namens „inita.sh“ gestartet, das die Ausgabe auflistet.

Netzwerkverbindung finden

Auch Netzwerkverbindungen sind Dateien. So können wir Informationen über sie finden, indem wir lsof verwenden.

11. Alle Netzwerkverbindungen auflisten

Sie können alle geöffneten Netzwerkverbindungen auflisten, indem Sie die Option „-i“ verwenden.

# lsof -i

COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae  515 avahi   13u  IPv4   6848      0t0  UDP *:mdns
avahi-dae  515 avahi   16u  IPv6   6851      0t0  UDP *:52060
cupsd     1075  root    5u  IPv6  22512      0t0  TCP ip6-localhost:ipp (LISTEN)

Sie können auch „-i4“ oder „-i6“ verwenden, um nur „IPV4“ bzw. „IPV6“ aufzulisten.

12. Alle Netzwerkdateien auflisten, die von einem bestimmten Prozess verwendet werden

Sie können alle Netzwerkdateien, die von einem Prozess verwendet werden, wie folgt auflisten

# lsof -i -a -p 234

Sie können auch Folgendes verwenden

# lsof -i -a -c ssh

Der obige Befehl listet die Netzwerkdateien auf, die von den Prozessen geöffnet werden, beginnend mit ssh.

13. Prozesse auflisten, die auf einem bestimmten Port lauschen

Sie können die Prozesse auflisten, die auf einem bestimmten Port lauschen, indem Sie wie folgt „-i“ mit „:“ verwenden

# lsof -i :25

COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2541 Debian-exim    3u  IPv4   8677       TCP localhost:smtp (LISTEN)

14. Alle TCP- oder UDP-Verbindungen auflisten

Sie können alle TCP- oder UDP-Verbindungen auflisten, indem Sie das Protokoll mit „-i“ angeben.

# lsof -i tcp; lsof -i udp;

15. Alle NFS-Dateien (Network File System) auflisten

Sie können alle NFS-Dateien auflisten, indem Sie die Option „-N“ verwenden. Der folgende lsof-Befehl listet alle NFS-Dateien auf, die vom Benutzer „lakshmanan“ verwendet werden.

# lsof -N -u lakshmanan -a

Linux
  1. 7 Beispiele für den lsof-Befehl unter Linux

  2. Praktische Beispiele für den rsync-Befehl unter Linux

  3. 7 Beispiele für Linux-df-Befehle

  4. 8 Linux TR-Befehlsbeispiele

  5. w Befehlsbeispiele unter Linux

SS-Befehl in Linux mit nützlichen Beispielen

Linux-lsof-Befehl erklärt mit 12 praktischen Beispielen

id-Befehlsbeispiele in Linux

lsattr-Befehlsbeispiele unter Linux

lsof-Befehl unter Linux mit Beispielen

Linux-Comm-Befehl mit Beispielen