Frage lsof - Beschränkung der Ausgabe auf physische Dateien - wie?


Wie kann ich lsof sagen, dass ich nur physische Dateien auflisten muss (keine Sockets, keine TCP / IP-Verbindungen, nur physische Dateien)?


29
2018-01-26 14:13


Ursprung


Zuerst müssen Sie bestimmen, wofür Sie es brauchen. "Physische Dateien" zu sagen ist zu allgemein. lsof gibt Ihnen Dateien, die mit einem Dateideskriptor geöffnet wurden. Es gibt Ihnen Dateien, die als Speicher-Mapped-Dateien von Threads geöffnet wurden. Es gibt Ihnen Bibliotheksdateien, die durch proceses geöffnet wurden. All das sind physische Dateien, aber die Art, wie sie verwendet werden, ist anders. - Michael Martinez


Antworten:


Ich habe gerade einige Manpages durchgesehen, es scheint, dass Sie den Befehl verwenden:

sudo lsof /

Dies listet alle geöffneten Dateien im Verzeichnis / auf, was alles auf einem Linux-Dateisystem ist. Gerade getestet und es zeigt nur REG und DIR.

Mehr Beispiele:

lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /

0-999 begrenzt es auf Dateien mit einer Dateideskriptornummer.


33
2018-01-26 14:32



Wird auch FIFOs einschließen. - Kyle Brandt♦
Schön und einfach. Wenn Sie nur die letzte Spalte benötigen, können Sie | awk {'print $ 9'} Interessant. Ich bekomme auch keinen Fifo in meiner Ausgabe. Fedora 12 und CentOS 5.3 - egorgry
CentOS 5.2 und Ubuntu 9.04 geben die Fifos für mich zurück, könnte eine Änderung sein, aber sind Sie sicher, dass es Fifos gibt? Ich würde es zuerst grep und sicherstellen, dass es da ist, als das versuchen / - Kyle Brandt♦
Außerdem war ich nur pingelig, es klingt, als würde er den Lärm einfach nicht wollen, und es wird wahrscheinlich nicht sehr viele Fifos geben. - Kyle Brandt♦
lsof / enthält nur Dateien im Root-Dateisystem. Wenn Sie mehrere Dateisysteme bereitgestellt haben, werden sie nicht in der Ausgabe angezeigt. Ich finde den besten Weg, Grep einfach zu benutzen. - James


Es könnte einen Wechsel geben, aber wenn es Ihnen nichts ausmacht, es durch grep zu filtern, könnten Sie es tun sudo lsof | egrep 'REG|DIR' Unter "physischen Dateien" verstehen Sie normale Dateien und Verzeichnisse.

Siehe den Abschnitt OUTPUT :: TYPE der Manpage man lsof für alle Typen, die in dieser Spalte enthalten sein könnten.


7
2018-01-26 14:16



Es könnte einen Schalter geben, aber die Manpage liest sich wie jemandes Doktorarbeit ... :) - Cawflands
Ja ... der Mensch ist extrem schwer zu lesen ...; p) - Vladislav Rastrusny
+1 diesen Kommentar. :) - egorgry
auf einem vpn-server mit genügend clients wird lsof nicht zurückkehren, also ist greping für mich keine option - Ohad Cohen
@OhadCohen lsof wird zurückkehren, wenn Sie einschränken, wonach es sucht. Siehe "FD" in der Manpage (mem, cwd, pd, etc) - Michael Martinez


Das habe ich getan, was perfekt für mich funktioniert hat:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

Das -F n Option zu lsof wird dazu führen, dass es nur die ausdruckt Namen der geöffneten Dateien. Jede Ausgabezeile, die den Namen einer geöffneten Datei hat, beginnt mit dem einzelnen Zeichen n unmittelbar gefolgt von der Name. Regulär Dateien sind immer der absolute, vollständig qualifizierte Name der Datei. Das grep ^n/ wählt nur die Zeilen aus, deren Name mit a beginnt / (bedeutet einen absoluten, voll qualifizierten Dateinamen); Dadurch werden Dinge wie offene Ports, Sockets, Pipe (wie FIFOs), etc. eliminiert cut -c2- wird das erste Zeichen eliminieren, das n, wobei nur der Dateiname übrig bleibt. Dann endlich, die sort -u löscht alle doppelten Einträge.

Ein Vorbehalt, dies schließt Dateien ein, die es nicht gibt regulär solange ihr Name mit a beginnt /. Zum Beispiel wären alle Dateien, die mit dem folgenden beginnen, enthalten:

  • / dev
  • / proc
  • / sys

Und abhängig von Ihrem Betriebssystem kann es andere geben.


0
2017-09-20 22:10