Einführung
Irgendwann in seiner Karriere wird jeder ein Problem lösen. Und jeder hat seinen bevorzugten Schritt zur Fehlerbehebung. Für viele Systemadministratoren ist der erste Schritt, sicherzustellen, dass alles auf dem neuesten Stand ist. Für andere müssen Sie nur die Protokolldateien überprüfen, bevor Sie Ihre Lösung finden. Für mich und andere hier bei Atlantic.Net ist es lsof; Ein Befehlszeilenprogramm, das verwendet wird, um Informationen über Dateien aufzulisten, die von verschiedenen Prozessen geöffnet werden.
lsof wird hauptsächlich zur Fehlerbehebung bei Netzwerkverbindungsproblemen verwendet und ist eine leistungsstarke, aber zu wenig bekannte Anwendung. Wenn Sie mit allgemeinen Linux-Befehlen vertraut sind, ist lsof ein leicht zu merkendes Tool, da es „geöffnete Dateien auflistet“.
Voraussetzungen
lsof ist ein Unix-spezifischer Befehl. Um es zum Identifizieren von Systeminformationen zu verwenden, müssen Sie ein System im Unix-Stil wie CentOS oder Ubuntu verwenden. lsof ist auf diesen Systemen vorinstalliert.
Wenn Sie ein Windows-System verwenden, können Sie ähnliche Ergebnisse erzielen, indem Sie das Process Explorer-Menü sowie die Befehle netstat und sysinternals verwenden.
lsof Nutzungs-Flags
Es ist wichtig zu verstehen, dass lsof über eine große Anzahl verfügbarer Flags verfügt, mit denen Sie die erhaltene Ausgabe ändern können. Unten sehen Sie alle verfügbaren Flags:
[[email protected] ~]# lsof --help usage: [-?abhlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s] [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s] [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Jede Flagge durchzugehen, wäre ein viel längerer Artikel, also halten wir die Dinge einfach und decken nur die am häufigsten verwendeten täglichen Optionen ab.
Schlüsseloptions-Flags
Es ist wichtig zu verstehen, wie lsof funktioniert, insbesondere standardmäßig. Wenn Sie Optionen an den Befehl lsof übergeben, ist das Standardverhalten ODER die Ergebnisse. Das bedeutet, dass Sie lsof sowohl mit dem -i
ausführen müssen sowie das -p
flag erhalten Sie die Ergebnisse von beiden.
Dies sind die am häufigsten verwendeten Flags in unserer Fehlerbehebung:
default : with no options flags, lsof lists all open files for active processes grouping : it's possible to group options, such as passing the flags though -nPi. Just keep an eye out for which options take additional parameters -a : AND the result (instead of the default OR) -l : show the userID instead of the username in the output -h : get help -i : selects the listing of files that match -n : stop host name resolution of network numbers -t : get process IDs only -P : stop conversion of port numbers to port names
Erste Schritte
Alle geöffneten Dateien auflisten.
# lsof
Alle geöffneten Dateien auflisten.
Alle Verbindungen anzeigen:
# lsof -i
Alle Verbindungen anzeigen
Der Server, auf dem wir testen, ist ein neuer CentOS6-Server von Atlantic.Net, auf dem keine zusätzlichen Softwarepakete installiert sind. Sie können aus der obigen Ausgabe ersehen, dass der Server nur auf SSH- und SMTP-Verkehr lauscht. Wenn Sie die tatsächliche Portnummer anstelle des Dienstnamens sehen möchten, müssen wir den Befehl mit dem -Pi
ausführen Flagge:
lsof -Pi
Alle Verbindungen anzeigen, die Ports abhören, ohne den Dienstnamen aufzulösen.
Wie Sie sehen können, sind alle *:ssh und localhost:smtp Ausgabe wurde in *:22 konvertiert und localhost:25 . Für die meisten Systemadministratoren, insbesondere wenn Sie es nicht gewohnt sind, Systemdienste zu durchsuchen und zu analysieren, ist es oft einfacher, Probleme zu beheben, indem Sie den Port direkt identifizieren, anstatt den Dienstnamen zu verwenden.
Verbindungen auf IPv6-Ports anzeigen:
lsof -i6
Verbindungen auf IPv6-Ports anzeigen
Im Vergleich zu lsof -i
zuvor, sucht dieser Befehl speziell nach Diensten mit einem TYPE von IPv6 .
Verbindungen auf einem bestimmten Port anzeigen, ohne den Dienstnamen aufzulösen:
lsof -Pi :25
Verbindungen auf einem bestimmten Port anzeigen, ohne den Dienstnamen aufzulösen
Wenn Sie speziell nach allen aktuellen Prozessen suchen, die auf Port 25 lauschen, zeigt sich, dass zwei aktuelle Prozesse auf dem System (ein IPv4, ein IPv6) ausgeführt werden. Keiner dieser Prozesse lauscht auf externe Verbindungen.
Listening-Ports anzeigen:
lsof -i -sTCP:LISTEN
Listening-Ports anzeigen
Dieser Befehl listet alle laufenden Prozesse auf, die sich im LISTEN befinden Status, was bedeutet, dass sie aktiv auf eingehende Verbindungen warten.
Zeigen, wer eine Datei verwendet:
lsof /path/of/file
Sie können aus dem obigen Befehl ersehen, dass zwei Prozesse aktiv ausgeführt werden und das /var/log/ Nachrichten Datei irgendwie.
Alle geöffneten Dateien in einem Verzeichnis rekursiv anzeigen:
lsof +D /usr/lib
Alle geöffneten Dateien in einem Verzeichnis rekursiv anzeigen
Auf unserem Testsystem mit +D
Flag zeigt sechs separate offene Prozesse, die aus /usr/lib stammen Verzeichnis.
Geöffnete Dateien nach Benutzer anzeigen:
lsof -u atlantic-noc
Offene Dateien nach Benutzer anzeigen
Der atlantic-noc-Benutzer hat eine aktive SSH-Sitzung mit einer Prozess-ID (PID) von 7769.
Alle geöffneten Dateien mit bestimmter Prozess-ID anzeigen:
lsof -p 7790
Alle geöffneten Dateien mit spezifischer Prozess-ID anzeigen
Das -p
Die Option hat geöffnete Dateien herausgefiltert, sodass nur diejenigen mit der angegebenen Prozess-ID angezeigt werden. In diesem Fall PID 7790. Sie können mehrere PIDs auswählen, indem Sie ein Komma angeben, z. B. -p 7789,7790
Alle Netzwerkaktivitäten für einen bestimmten Benutzer anzeigen:
lsof -a -u atlantic-noc -i
Das -a
flag kombiniert (ändert das standardmäßige OR-Verhalten in AND) das -u
und -i
Flags, um eine Liste der Verwendung von Netzwerkdateien für den Benutzer atlantic-noc bereitzustellen; in diesem Fall nur eine einzelne SSH-Sitzung.
Sonst noch etwas?
Die oben vorgestellten Befehle sind nur der Anfang für lsof; ein vielseitiges Werkzeug, das entweder allein oder in Kombination mit anderen Unix-Fehlerbehebungswerkzeugen wie strace verwendet werden kann. Aber das ist ein anderer Artikel.
Denken Sie daran, in unserem Blog nach Updates zu diesem Artikel, anderen Linux-bezogenen Beiträgen und weiteren Einführungen in Unix-Befehle zu suchen oder mehr über unsere zuverlässigen VPS-Hosting-Dienste zu erfahren.