Manchmal sind wir mit Situationen konfrontiert, in denen wir eine Festplatte nicht aushängen können, da sie besagt, dass die Dateien verwendet werden, aber wir nicht verstehen können, auf welche Datei sie sich bezieht. In solchen Situationen können wir überprüfen, welche Dateien von welchem Prozess auf dem System geöffnet sind.
Dies kann mit dem Befehl lsof erfolgen, was Open Files auflisten bedeutet. Da Linux alles, einschließlich Verzeichnisse, Geräte, Sockets und so weiter, als Dateien betrachtet, können wir lsof verwenden, um alle geöffneten Dateien einfach zu identifizieren.
Wenn wir einfach lsof ausführen, listet es alle geöffneten Dateien auf, die zu einem aktiven Prozess auf dem System gehören. Wenn die Ausgabe lang ist, können wir den Befehl less verwenden, um durch die Ausgabe zu scrollen:
# lsof | less
Die angezeigte Ausgabe enthält Spalten wie Befehl, PID, Benutzer, FD, Typ, Gerät usw., um die Dateien besser zu verstehen. Die FD-Spalte enthält Informationen zur Dateibeschreibung, z. B. das aktuelle Arbeitsverzeichnis (CWD), das Stammverzeichnis (RTD), den Programmtext (TXT) und so weiter. Wenn die FD-Spalte Informationen wie 0u, 1u usw. enthält, steht die Zahl für den eigentlichen Dateideskriptor und das Alphabet für die verschiedenen Modi (Lesezugriff, Schreibzugriff und Lese-/Schreibzugriff).
wenn Sie beim Ausführen des Befehls lsof auf den folgenden Fehler stoßen:
lsof: command not found
Sie können das folgende Paket gemäß Ihrer Wahl der Distribution installieren.
Verteilung | Befehl |
---|---|
OS X | brew install lsof |
Debian | apt-get install lsof |
Ubuntu | apt-get install lsof |
Alpin | apk lsof hinzufügen |
Arch Linux | pacman -S lsof |
Kali-Linux | apt-get install lsof |
CentOS | yum installiere lsof |
Fedora | dnf installiere lsof |
Raspbian | apt-get install lsof |
Häufig verwendete lsof-Optionen
- -c x :Nur Dateien anzeigen, die von Prozessen geöffnet wurden, deren ausführbare Datei mit dem/den durch x angegebenen Zeichen beginnt.
- -i x :Anstatt geöffnete Dateien anzuzeigen, zeigen Sie Sockets an, deren Internetadresse x ist. Wenn x nicht angegeben ist, alle IP-Verbindungen anzeigen. Dies entspricht funktional netstat –anp.
- -u Benutzername :Zeigt nur die Dateien an, die Benutzername geöffnet hat.
- -P :Portnummern nicht in Portnamen umwandeln (z. B. 25 statt smtp anzeigen).
lsof-Befehlsbeispiele
Durch einfaches Ausführen der lsof-Befehle erhalten wir eine Liste aller geöffneten Dateien auf dem System. Durch Verwendung der Option -u und Angabe des Benutzernamens erhalten wir eine Liste der geöffneten Dateien für einen bestimmten Benutzer. Wenn wir die Option -i verwenden und eine Portnummer angeben, erhalten wir Informationen über jeden Prozess, der auf diesem Port läuft. Wenn wir sowohl die Optionen -i als auch -u mit einem bestimmten Benutzernamen verwenden, erhalten wir Informationen über die Dateien und Befehle, auf die dieser Benutzer zugreift.
1. Finden Sie die Prozesse, die eine bestimmte Datei geöffnet haben:
# lsof path/to/file
2. Finden Sie den Prozess, der einen lokalen Internetport geöffnet hat:
# lsof -i :port
3. Nur Prozess-ID (PID) ausgeben:
# lsof -t path/to/file
4. Dateien auflisten, die vom angegebenen Benutzer geöffnet wurden:
# lsof -u username
5. Dateien auflisten, die durch den angegebenen Befehl oder Prozess geöffnet wurden:
# lsof -c process_or_command_name
6. Auflisten von Dateien, die von einem bestimmten Prozess geöffnet wurden, unter Angabe seiner PID:
# lsof -p PID
7. Offene Dateien in einem Verzeichnis auflisten:
# lsof +D path/to/directory
8. Suchen Sie den Prozess, der einen lokalen IPv6-TCP-Port abhört, und konvertieren Sie keine Netzwerk- oder Portnummern:
# lsof -i6TCP:port -sTCP:LISTEN -n -P
9. Listen Sie Prozesse auf, die Ihr Home-Verzeichnis geöffnet haben:
# lsof ~
10. Listen Sie alle geöffneten Dateien in Ihrem Home-Verzeichnis auf:
# lsof +D
11. Listen Sie die Dateien auf, die von Prozessen geöffnet wurden, deren Namen mit „i“ beginnen und deren Besitzer „geek“ ist:
# lsof -a -c i -u geek
12. Dateien über TCP-Port 80 auflisten, alle zwei Sekunden wiederholen, bis lsof beendet wird:
Schlussworte
lsof listet offene Dateien auf. Da alles in Linux eine Datei ist, kann Ihnen dieses Tool eine fantastische Menge an Informationen über Ihr laufendes System liefern. Es wird hauptsächlich verwendet, um festzustellen, welche Prozesse welche Dateien geöffnet haben, aber es kann unter anderem auch zum Anzeigen von TCP- und UDP-Verbindungsinformationen verwendet werden.