Einführung in Lsof

Unter Linux werden viele Objekte als Datei betrachtet, unabhängig davon, ob es sich bei dem Objekt tatsächlich um eine Datei, ein Gerät, ein Verzeichnis oder einen Socket handelt. Das Auflisten einer Datei ist einfach, dafür ist die Shell integriert ls. Was aber, wenn ein Benutzer sehen möchte, welche Dateien derzeit vom Webserverprozess geöffnet werden? Oder ob dieser Benutzer herausfinden wollte, welche Dateien in einem bestimmten Verzeichnis geöffnet sind? Hier lsofkommt das Spiel ins Spiel. Stellen Sie sich vor , lsofwie ein lsmit dem Zusatz „offener Dateien“.

Bitte beachten Sie, dass die BSDs zwar ein anderes Dienstprogramm für diesen Job haben fstat, aber auch einige andere Unix-Varianten (z. B. Solaris) besitzen lsof. Die Optionen und Flags unterscheiden sich auf den anderen Plattformen ebenso wie das Aussehen der Ausgabe, aber im Allgemeinen sollte das Wissen in diesem Artikel auch für sie gelten.

Schauen wir uns zunächst das Format der lsofAusgabe an und wie sie gelesen werden soll. Die übliche Ausgabe lsofohne Parameter würde wie folgt aussehen. Dies wurde aus Gründen der Lesbarkeit gekürzt.

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

Diese Spalten bedeuten Folgendes:

  • BEFEHL - Der Prozess, zu dem eine geöffnete Datei gehört. In diesem Beispiel bezieht sich alles auf init.
  • PID - Die Prozessidentifikationsnummer des Prozesses.
  • USER - Der Benutzer, unter dem der Prozess ausgeführt wird. Denn inites ist fast immer root.
  • FD - Der Dateideskriptor der Datei, am häufigsten:
    • cwd- Das aktuelle Arbeitsverzeichnis (möglicherweise stellen Sie die Ähnlichkeit mit dem pwdBefehl fest, der das aktuelle Arbeitsverzeichnis druckt).
    • rtd - Das Stammverzeichnis eines Prozesses.
    • txt- A text file, dies kann entweder eine Konfigurationsdatei bedeuten, die sich auf den Prozess bezieht, oder der "Quellcode", der sich auf den Prozess bezieht (oder zu diesem gehört).
    • mem - Eine sogenannte "Speicherzuordnungsdatei", dh ein Segment des virtuellen Speichers (gelesen: RAM), das einer Datei zugewiesen wurde.
    • Eine Zahl - Die Zahl stellt den tatsächlichen Dateideskriptor dar. Das Zeichen nach der Zahl ist der Modus, in dem die Datei geöffnet wird:
    • r - Lesen.
    • w - Schreiben.
    • u - Lesen und Schreiben.
  • TYP - Gibt den tatsächlichen Dateityp an. Die häufigsten sind:
    • REG - Eine reguläre Datei.
    • DIR - Ein Verzeichnis.
    • FIFO - Als Erster rein, als erster raus.
  • GERÄT - Die Haupt- und Nebennummer des Geräts, auf dem sich die Datei befindet.
  • GRÖSSE - Die Größe der Datei in Bytes.
  • NODE - Die Inode-Nummer der Datei.
  • NAME - Der Name der Datei.

Das mag vorerst ein bisschen überwältigend sein, aber wenn Sie lsofein paar Mal damit arbeiten, wird es schnell in Ihr Gehirn eindringen .

Wie oben erwähnt, wurde die Ausgabe von lsofhier verkürzt. lsofErzeugt ohne Argumente oder Filter Hunderte von Ausgabezeilen, die Sie nur verwirren.

Es gibt zwei grundlegende Ansätze, um dieses Problem zu lösen:

  • Verwenden Sie eine oder mehrere lsofBefehlszeilenoptionen, um die Ergebnisse einzugrenzen.
  • Führen Sie die Ausgabe beispielsweise durch grep.

Während die letztere Option möglicherweise komfortabler klingt, da Sie sich die lsofBefehlszeilenoptionen nicht merken müssen , ist sie im Allgemeinen nicht so flexibel und effizient, sodass wir uns an die erste halten.

Stellen Sie sich vor, Sie möchten eine Datei mit Ihrem bevorzugten Texteditor öffnen und der Texteditor teilt Ihnen mit, dass sie nur im schreibgeschützten Modus geöffnet werden kann, da bereits ein anderes Programm darauf zugreift. lsofhilft Ihnen herauszufinden, wer der Täter ist:

lsof /path/to/your/file

Dies erzeugt eine Ausgabe ähnlich der folgenden:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

Anscheinend hast du vergessen, eine ältere Sitzung zu schließen! Ein sehr ähnliches Problem tritt auf, wenn Sie versuchen, die Bereitstellung einer NFS-Freigabe aufzuheben, und umountIhnen mitteilen , dass dies nicht möglich ist, da noch etwas auf den bereitgestellten Ordner zugreift. Auch hier lsofkönnen Sie bei der Identifizierung des Täters helfen:

lsof +D /path/to/your/directory/

Beachten Sie den abschließenden Schrägstrich, der wichtig ist. Andernfalls lsofwird davon ausgegangen, dass Sie eine reguläre Datei meinen. Lassen Sie sich nicht durch das +vor der Flagge stehende - es lsofgibt so viele Befehlszeilenoptionen, die es +zusätzlich zu den allgemeineren benötigt -. Die Ausgabe würde folgendermaßen aussehen:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

Das bedeutet, dass der Prozess mocpmit der PID 5637, die dem Benutzer musicgehört, eine aufgerufene Datei geöffnet hat RMS_GNU_SONG.ogg. Selbst nach dem Schließen dieses Prozesses besteht jedoch immer noch ein Problem: Das NFS-Volume kann nicht ausgehängt werden.

lsofhat ein -cFlag, das Dateien anzeigt, die einen beliebigen Prozessnamen geöffnet haben.

lsof -c mocp

Das würde eine Ausgabe erzeugen, die so aussieht:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

In diesem Beispiel wird eine andere Instanz mocpausgeführt, die verhindert, dass Sie die Freigabe der Freigabe aufheben. Nach dem Herunterfahren dieses Prozesses möchten Sie sicherstellen, dass dem Benutzer musickeine anderen potenziell problematischen Dateien geöffnet sind. lsofhat ein -uFlag zum Anzeigen von Dateien, die von einem bestimmten Benutzer geöffnet wurden. Denken Sie daran, dass eine Datei nicht immer nur eine normale Datei auf Ihrer Festplatte ist!

lsof -u music

Sie können auch mehrere durch Kommas getrennte Benutzer übergeben:

lsof -u music,moremusic

Ein wichtiger Hinweis zum Standardverhalten von lsof: Die Ergebnisse sind ODER- basiert. Dies bedeutet, dass Dateiergebnisse von Prozessen geöffnet werden, die entweder dem Benutzer musicoder dem Benutzer gehören moremusic. Wenn Sie Ergebnisse sehen möchten, die mit Prozessen übereinstimmen, die beiden Benutzern gehören, müssen Sie das Flag übergeben -a:

lsof -au music, moremusic

Da sich beide Benutzer in der Gruppe befinden musicusers, können Sie auch Dateien basierend auf der Gruppe auflisten:

lsof -g musicusers

Sie können auch Befehlszeilenflags kombinieren:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

In der letzten Zeile haben wir ein weiteres spezielles Flag hinzugefügt - ^das für ein logisches NICHT steht . Wenn die Ausgabe nach dem Ausführen dieses Befehls leer ist, ist das Aufheben der Bereitstellung höchstwahrscheinlich erfolgreich.

In den vorherigen Beispielen haben wir uns hauptsächlich reguläre Dateien angesehen. Wie wäre es mit Sockets und Netzwerkverbindungen?

Um alle aktuellen Netzwerkverbindungen aufzulisten, lsofhat das -iFlag:

lsof -i

Die Ausgabe sieht ähnlich aus wie die, die wir bisher gesehen haben ...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... bis auf einen Unterschied: Anstelle von Dateinamen oder Verzeichnissen werden in der Spalte NAMEjetzt Verbindungsinformationen angezeigt. Jede Verbindung besteht aus folgenden Teilen:

  • Protokoll.
  • Lokaler Hostname.
  • Quellport der Verbindung.
  • Ziel-DNS-Name.
  • Zielhafen.
  • Status der Verbindung.

Wie bei vielen anderen Tools, können Sie lösen DNS - Namen Opt-out und Ports ( -nund -Psind). Das Flag -inimmt zusätzliche Parameter an. Sie können festlegen , ob oder nicht zeigen tcp, udpoder icmpVerbindungen oder bestimmte Ports:

lsof -i :25
or
lsof -i :smtp

Auch hier können Parameter kombiniert werden. Das folgende Beispiel ...

lsof -i tcp:80

... zeigt Ihnen nur TCP-Verbindungen über Port 80 an. Sie können es auch mit den Optionen kombinieren, die Sie bereits aus "klassischen" Dateien kennen:

lsof -a -u httpd -i tcp

Dies zeigt Ihnen alle vom Benutzer geöffneten TCP-Verbindungen httpd. Beachten Sie das -aFlag, das das Standardverhalten von ändert lsof(wie bereits erwähnt). Wie bei den meisten Befehlszeilentools können Sie extrem tief gehen. Im Folgenden werden nur TCP-Verbindungen angezeigt, deren Status "ESTABLISHED" lautet:

lsof -i -s TCP:ESTABLISHED

An dieser Stelle sollten Sie ein grundlegendes Verständnis der Funktionsweise lsofsowie einiger gängiger Anwendungsfälle haben. Weitere Informationen finden Sie in der Manpage von lsofauf Ihrem System.

Einen Kommentar hinterlassen

Kann KI mit zunehmender Anzahl von Ransomware-Angriffen kämpfen?

Kann KI mit zunehmender Anzahl von Ransomware-Angriffen kämpfen?

Ransomware-Angriffe nehmen zu, aber kann KI helfen, den neuesten Computervirus zu bekämpfen? Ist KI die Antwort? Lesen Sie hier, ob KI boone oder bane ist

ReactOS: Ist das die Zukunft von Windows?

ReactOS: Ist das die Zukunft von Windows?

ReactOS, ein quelloffenes und kostenloses Betriebssystem, ist hier mit der neuesten Version. Kann es den Anforderungen moderner Windows-Benutzer genügen und Microsoft zu Fall bringen? Lassen Sie uns mehr über dieses alte, aber neuere Betriebssystem erfahren.

Bleiben Sie in Verbindung über die WhatsApp Desktop App 24*7

Bleiben Sie in Verbindung über die WhatsApp Desktop App 24*7

Whatsapp hat endlich die Desktop-App für Mac- und Windows-Benutzer auf den Markt gebracht. Jetzt können Sie ganz einfach von Windows oder Mac auf WhatsApp zugreifen. Verfügbar für Windows 8+ und Mac OS 10.9+

Wie kann KI die Prozessautomatisierung auf die nächste Stufe heben?

Wie kann KI die Prozessautomatisierung auf die nächste Stufe heben?

Lesen Sie dies, um zu erfahren, wie Künstliche Intelligenz bei kleinen Unternehmen beliebt wird und wie sie die Wahrscheinlichkeit erhöht, sie wachsen zu lassen und ihren Konkurrenten einen Vorsprung zu verschaffen.

macOS Catalina 10.15.4 Supplement Update verursacht mehr Probleme als sie zu lösen

macOS Catalina 10.15.4 Supplement Update verursacht mehr Probleme als sie zu lösen

Vor kurzem hat Apple macOS Catalina 10.15.4 als Ergänzungsupdate veröffentlicht, um Probleme zu beheben, aber es scheint, dass das Update mehr Probleme verursacht, die zum Bricking von Mac-Computern führen. Lesen Sie diesen Artikel, um mehr zu erfahren

13 Tools zur kommerziellen Datenextraktion von Big Data

13 Tools zur kommerziellen Datenextraktion von Big Data

13 Tools zur kommerziellen Datenextraktion von Big Data

Was ist ein Journaling-Dateisystem und wie funktioniert es?

Was ist ein Journaling-Dateisystem und wie funktioniert es?

Unser Computer speichert alle Daten in einer organisierten Weise, die als Journaling-Dateisystem bekannt ist. Es ist eine effiziente Methode, die es dem Computer ermöglicht, Dateien zu suchen und anzuzeigen, sobald Sie auf die Suche klicken.https://wethegeek.com/?p=94116&preview=true

Technologische Singularität: Eine ferne Zukunft der menschlichen Zivilisation?

Technologische Singularität: Eine ferne Zukunft der menschlichen Zivilisation?

Da sich die Wissenschaft schnell weiterentwickelt und einen Großteil unserer Bemühungen übernimmt, steigt auch das Risiko, uns einer unerklärlichen Singularität auszusetzen. Lesen Sie, was Singularität für uns bedeuten könnte.

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Der Einfluss künstlicher Intelligenz im Gesundheitswesen 2021

Der Einfluss künstlicher Intelligenz im Gesundheitswesen 2021

KI im Gesundheitswesen hat in den letzten Jahrzehnten große Fortschritte gemacht. Somit wächst die Zukunft der KI im Gesundheitswesen immer noch von Tag zu Tag.