Řešení 1:
Právě jsem si prohlédl nějaké manuálové stránky, zdá se, že používáte příkaz:
sudo lsof /
Zobrazí se seznam všech otevřených souborů v adresáři /, což je vše na souborovém systému Linux. Právě testováno a zobrazuje pouze REG a DIR.
Další příklady:
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999 jej omezuje na soubory s číslem deskriptoru souboru.
Řešení 2:
Může existovat přepínač, ale pokud vám nevadí filtrovat to přes grep, můžete to udělat sudo lsof | egrep 'REG|DIR'
, za předpokladu, že "fyzickými soubory" máte na mysli běžné soubory a adresáře.
Viz část OUTPUT ::TYPE na manuálové stránce man lsof
pro všechny typy, které mohou být v tomto sloupci.
Řešení 3:
Udělal jsem to, co mi perfektně fungovalo:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
-F n
možnost lsof
způsobí, že vytiskne pouze jména z otevřených souborů. Každý výstupní řádek, který má název otevřeného souboru, bude začínat jedním znakem n bezprostředně za ním následuje jméno . Normální soubory budou vždy absolutním, plně kvalifikovaným názvem souboru. grep ^n/
vybere pouze řádky s názvem začínajícím /
(což znamená absolutní, plně kvalifikovaný název souboru); čímž se eliminují věci jako otevřené porty, zásuvky, potrubí (jako FIFO) atd. cut -c2-
odstraní první znak, n
, ponechá se pouze název souboru. Pak konečně sort -u
odstraní všechny duplicitní položky.
Jedno upozornění, bude to zahrnovat soubory, které nejsou běžné pokud jejich jméno začíná /
. Například budou zahrnuty všechny soubory začínající následujícím:
- /dev
- /proc
- /sys
A mohou existovat další v závislosti na vašem operačním systému.