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

7 Beispiele für den lsof-Befehl unter Linux

Ich denke, Sie haben sich irgendwann gefragt, ob es eine Möglichkeit gibt, geöffnete Dateien von einem Prozess oder einem Benutzer anzuzeigen. Das Gute daran ist, dass die Antwort auf diese Frage lsof command lautet.

Sie wissen wahrscheinlich bereits, dass der Befehl ls die Abkürzung für „Liste“ ist. lsof steht für „List Open Files“. Und genau das tut es, indem es geöffnete Dateien nach Prozessen, Benutzern und Prozess-IDs auflistet.

Lassen Sie mich Ihnen einige der häufigsten Verwendungen des Befehls lsof zeigen.

Beispiele für lsof-Befehle

Wenn Sie den Befehl lsof ohne Optionen und Argumente verwenden, listet er alle geöffneten Dateien von allen Prozessen im System auf.

lsof

Die Ausgabe sollte so aussehen:

COMMAND     PID   TID             USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME

systemd       1                   root  cwd       DIR              252,1      4096          2 /

systemd       1                   root  rtd       DIR              252,1      4096          2 /

systemd       1                   root  txt       REG              252,1   1595792      17384 /lib/systemd/systemd

systemd       1                   root  mem       REG              252,1   1700792       2077 /lib/x86_64-linux-gnu/libm-2.27.so

Die Ausgabe ist größtenteils selbsterklärend, aber Sie fragen sich vielleicht immer noch über die Spalten FD und TYPE.

FD bedeutet Dateideskriptor. Einige der gebräuchlichen Werte für FD sind:

  • cwd – Aktuelles Arbeitsverzeichnis
  • txt – Textdateien
  • mem ​​– Memory Mapped File
  • mmap – Speicherabgebildetes Gerät
  • ZAHL – Der eigentliche Dateideskriptor. Es hat auch Informationen darüber, mit welcher Dateiberechtigung es geöffnet wird.

TYP ist ein Kinderspiel. Es gibt den Dateityp an. Hier sind einige Beispiele:

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

Vertrau mir. Sie möchten den Befehl lsof nicht ohne Argumente ausführen.

Warum sage ich das? Weil es Ihren Bildschirm mit Tausenden von Ergebnissen überschwemmen wird.

Wenn ich den Befehl lsof auf einem Ubuntu-Server ausführe und die Anzahl der Zeilen mit dem Befehl wc zähle, ist hier das Ergebnis.

lsof | wc -l
11432

Ja! Stimmt. Es gibt über elftausend Dateien, die von verschiedenen Prozessen im System geöffnet wurden.

Mach dir keine Sorgen. Der Befehl lsof ist beim Debuggen sehr hilfreich, da Sie sehen können, welche Prozesse welche Dateien öffnen und welche Datei von welchem ​​Prozess geöffnet wird.

Wenn Sie nicht als root angemeldet sind, wäre die Ausgabe des Befehls lsof sehr begrenzt. Es ist eine gute Idee, sudo zu verwenden, wenn Sie als Nicht-Root-Benutzer angemeldet sind.

1. Alle Prozesse auflisten, die eine Datei geöffnet haben

Das ist einfach. Sie müssen nur den Pfad zu der Datei angeben.

lsof <path_to_file>

2. Alle vom Benutzer geöffneten Dateien auflisten

Dies ist in einer Umgebung mit mehreren Benutzern praktisch. Sie können alle von einem bestimmten Benutzer geöffneten Dateien folgendermaßen auflisten:

lsof -u <user_name>

Sie können auch mehr als einen Benutzer wie folgt angeben:

lsof -u user1, user2

oder so:

lsof -u user1 -u user2

3. Alle geöffneten Dateien in einem Verzeichnis auflisten

Wenn Sie sich fragen, welche der Dateien in einem bestimmten Verzeichnis geöffnet wurden, können Sie den Befehl lsof mit der Option +D verwenden.

lsof +D <path_to_directory>

Die Suche ist rekursiv. Es listet also alle geöffneten Dateien im erwähnten Verzeichnis und allen seinen Unterverzeichnissen auf.

4. Alle von einem Prozess geöffneten Dateien auflisten

In diesem Fall müssen Sie die Prozess-ID (PID) kennen. Wenn Sie die Prozess-ID kennen, können Sie die Option -p des Befehls lsof verwenden, um die von ihm geöffneten Dateien zu finden.

lsof -p <pid>

Sie können auch mehrere Prozess-IDs angeben.

lsof -p pid1, pid2, pid3

5. Alle Dateien auflisten, die durch einen Befehl geöffnet wurden

Dies ist besonders hilfreich beim Debuggen. Angenommen, Sie möchten sehen, welche Dateien vom http-Daemon verwendet werden, dann müssen Sie nur den Befehlsnamen angeben (in unserem Beispiel httpd).

lsof -c <command>

6. Finden Sie geöffnet von einem Benutzer und einem Befehl oder einem Prozess

Sie können Optionen wie Benutzer und Befehl und einen Prozess mit der Option –a kombinieren. Betrachten Sie es als den UND-Operator. Dies gibt Ihnen einen zusätzlichen Filter, während Sie versuchen, Ihre Suche einzugrenzen.

lsof -a -u user_name -c command_name

7. Netzwerkverbindungen und Ports mit dem Befehl lsof auflisten

Sie können auch den Befehl lsof verwenden, um offene Ports zu finden oder herauszufinden, welcher Prozess einen Port verwendet.

Sie können alle Arten von offenen Ports mit der Option -i archivieren:

lsof -i

Die Ausgabe kann wie folgt aussehen:

lsof -i
 COMMAND     PID            USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
 sshd        920            root    3u  IPv4    20507      0t0  TCP *:ssh (LISTEN)
 sshd        920            root    4u  IPv6    20535      0t0  TCP *:ssh (LISTEN)
 docker-pr  1163            root    4u  IPv6    21687      0t0  TCP *:https (LISTEN)
 docker-pr  1175            root    4u  IPv6    21717      0t0  TCP *:http (LISTEN)
 sshd       7528            root    3u  IPv4 39506588      0t0  TCP testing:ssh->212.91.91.19:58904 (ESTABLISHED)
 systemd-r 10993 systemd-resolve   12u  IPv4 20901990      0t0  UDP localhost:domain 
 systemd-r 10993 systemd-resolve   13u  IPv4 20901991      0t0  TCP localhost:domain (LISTEN)

Sie können auch den Netzwerkverbindungstyp angeben. Um beispielsweise alle geöffneten TCP-Ports aufzulisten, können Sie Folgendes verwenden:

lsof -i tcp

Um herauszufinden, welcher Prozess einen bestimmten Port verwendet, können Sie die Portnummer angeben:

lsof -i :<port_number>

Bonus-Tipp:Verwendung des Negationsoperators mit lsof

Sie können den Negationsoperator verwenden, um einen Benutzer oder Prozess auszuschließen, während Sie den Befehl lsof verwenden.

Wenn Sie beispielsweise alle Dateien auflisten möchten, die von einem anderen Benutzer als root geöffnet wurden, verwenden Sie dies folgendermaßen:

lsof -u ^root

Der Befehl lsof wird noch nützlicher, wenn Sie ihn mit dem Befehl grep verwenden.

Ich hoffe, Sie haben mit diesem Artikel etwas Neues gelernt. Wenn Sie Fragen oder Anregungen haben, hinterlassen Sie bitte unten einen Kommentar.


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

  2. 8 Linux TR-Befehlsbeispiele

  3. rm-Befehlsbeispiele unter Linux

  4. ps-Befehlsbeispiele in Linux

  5. w Befehlsbeispiele unter Linux

9 diff-Befehlsbeispiele in Linux

Linux-IP-Befehl mit Beispielen

15 Linux-PS-Befehl mit Beispielen

lsof-Befehl unter Linux (10 Beispiele)

id-Befehlsbeispiele in Linux

lsof-Befehl unter Linux mit Beispielen