Soluzione 1:
Ho appena esaminato alcune pagine man, sembra che tu usi il comando:
sudo lsof /
Questo elencherà tutti i file aperti nella directory /, che è tutto su un filesystem Linux. Appena testato e mostra solo REG e DIR.
Altri esempi:
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999 lo limita ai file con un numero descrittore di file.
Soluzione 2:
Potrebbe esserci un interruttore, ma se non ti dispiace filtrarlo tramite grep, potresti fare sudo lsof | egrep 'REG|DIR'
, supponendo che per "file fisici" si intendano file e directory normali.
Vedere la sezione OUTPUT ::TYPE della pagina man man lsof
per tutti i tipi che potrebbero essere in quella colonna.
Soluzione 3:
Questo è quello che ho fatto e che ha funzionato perfettamente per me:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
Il -F n
opzione a lsof
farà stampare solo i nomi dei file aperti. Ogni riga di output che ha il nome di un file aperto inizierà con il singolo carattere n seguito immediatamente dal nome . Normale files sarà sempre il nome assoluto e completo del file. Il grep ^n/
selezionerà solo le righe il cui nome inizia con /
(ovvero un nome di file assoluto e completo); eliminando così cose come porte aperte, socket, pipe (come FIFO), ecc. Il cut -c2-
eliminerà il primo carattere, il n
, lasciando solo il nome del file. Poi finalmente, sort -u
eliminerà qualsiasi voce duplicata.
Un avvertimento, questo includerà i file che non sono regolari purché il loro nome inizi con /
. Ad esempio, verranno inclusi tutti i file che iniziano con quanto segue:
- /dev
- /proc
- /sys
E potrebbero essercene altri a seconda del tuo sistema operativo.