Lösung 1:
Ich habe gerade einige Manpages durchgesehen, es scheint, dass Sie den Befehl verwenden:
sudo lsof /
Dadurch werden alle geöffneten Dateien im /-Verzeichnis aufgelistet, was alles auf einem Linux-Dateisystem ist. Gerade getestet und es zeigt nur REG und DIR.
Weitere 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.
Lösung 2:
Es könnte einen Schalter geben, aber wenn es Ihnen nichts ausmacht, ihn durch grep zu filtern, können Sie sudo lsof | egrep 'REG|DIR'
tun , vorausgesetzt, Sie meinen mit "physischen Dateien" normale Dateien und Verzeichnisse.
Siehe Abschnitt OUTPUT ::TYPE der Manpage man lsof
für alle Typen, die in dieser Spalte sein könnten.
Lösung 3:
Das habe ich getan, was perfekt für mich funktioniert hat:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
Die -F n
Option zu lsof
bewirkt, dass nur die Namen ausgegeben werden der geöffneten Dateien. Jede Ausgabezeile, die den Namen einer geöffneten Datei hat, beginnt mit dem einzelnen Zeichen n unmittelbar gefolgt vom Namen . Normal files ist immer der absolute, vollqualifizierte Name der Datei. Die grep ^n/
wählt nur die Zeilen aus, deren Name mit /
beginnt (d. h. ein absoluter, vollständig qualifizierter Dateiname); wodurch Dinge wie offene Ports, Sockets, Pipes (wie FIFOs) usw. eliminiert werden. Der cut -c2-
eliminiert das erste Zeichen, die n
, wobei nur der Dateiname übrig bleibt. Dann endlich die sort -u
eliminiert doppelte Einträge.
Eine Einschränkung:Dies schließt Dateien ein, die nicht normal sind solange ihr Name mit einem /
beginnt . Beispielsweise würden alle Dateien, die mit folgendem beginnen, eingeschlossen:
- /dev
- /proc
- /sys
Je nach Betriebssystem können weitere vorhanden sein.