Wie sage ich lsof, dass ich nur physische Dateien auflisten muss (keine Sockets, keine TCP/IP-Verbindungen, nur physische Dateien)?
Antwort1
Habe mir gerade ein paar Manpages angesehen. Es scheint, als würden Sie den folgenden Befehl verwenden:
sudo lsof /
Dadurch werden alle geöffneten Dateien im /-Verzeichnis aufgelistet, also alle Dateien in einem Linux-Dateisystem. Gerade getestet und es werden nur REG und DIR angezeigt.
Mehr Beispiele:
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999 beschränkt es auf Dateien mit einer Dateideskriptornummer.
Antwort2
Möglicherweise gibt es einen Schalter, aber wenn es Ihnen nichts ausmacht, es durch grep zu filtern, können Sie dies tun sudo lsof | egrep 'REG|DIR'
, vorausgesetzt, mit „physischen Dateien“ meinen Sie normale Dateien und Verzeichnisse.
man lsof
Informationen zu allen Typen, die in dieser Spalte enthalten sein können, finden Sie im Abschnitt OUTPUT :: TYPE der Manpage.
Antwort3
Ich habe Folgendes gemacht, und es hat bei mir perfekt funktioniert:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
Die -F n
Option lsof
bewirkt, dass nur dieNamender geöffneten Dateien. Jede Ausgabezeile, die den Namen einer geöffneten Datei enthält, beginnt mit dem einzelnen ZeichenNunmittelbar gefolgt von derName.Regulärfiles ist immer der absolute, vollqualifizierte Name der Datei. Das grep ^n/
wählt nur die Zeilen aus, deren Name mit einem beginnt /
(was einen absoluten, vollqualifizierten Dateinamen bedeutet); so werden Dinge wie offene Ports, Sockets, Pipes (wie FIFOs) usw. eliminiert. Das cut -c2-
entfernt das erste Zeichen, das n
, sodass nur der Dateiname übrig bleibt. Schließlich sort -u
entfernt das alle doppelten Einträge.
Eine Einschränkung: Dies schließt Dateien ein, die nichtregulärsolange ihr Name mit einem beginnt /
. Beispielsweise werden alle Dateien eingeschlossen, die mit Folgendem beginnen:
- /Entwickler
- /proc
- /sys
Und je nach Betriebssystem kann es noch weitere geben.
Antwort4
Wenn Sie lsof /
es verwenden, werden nur offene Dateien auf Dateisystemen aufgelistet, die DIREKT unter / gemountet sind. Das heißt, wenn Sie /home unter / gemountet haben, wird dessen Inhalt ignoriert. Ich habe verschiedene Kombinationen von Optionen für lsof ausprobiert, aber alle hatten Probleme. Das Beste, was mir eingefallen ist, ist Folgendes:
lsof `readlink -f /dev/block/*`
Dies verwendet readlink -f, um alle Blockgeräte abzurufen und sie als Liste für die Suche bereitzustellen. lsof ignoriert diejenigen, die nicht gemountet sind.
Wenn Sie über andere Optionen zum Einschränken der Suche verfügen, beispielsweise eine PID, denken Sie daran, den Befehl lsof mit einem -a
„UND“ mit der Liste der Blockgeräte zu beenden:
lsof -p 982482 -a `readlink -f /dev/block/*`