Come faccio a sapere se devo elencare solo i file fisici (non i socket, non le connessioni TCP / IP, solo i file fisici)?
Come faccio a sapere se devo elencare solo i file fisici (non i socket, non le connessioni TCP / IP, solo i file fisici)?
Risposte:
Ho appena guardato 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.
/
Potrebbe esserci un interruttore, ma se non ti dispiace filtrarlo attraverso grep, potresti farlo sudo lsof | egrep 'REG|DIR'
, supponendo che per "file fisici" intendi file e directory regolari.
Vedi la sezione OUTPUT :: TYPE della pagina man man lsof
per tutti i tipi che potrebbero essere in quella colonna.
Questo è quello che ho fatto che ha funzionato perfettamente per me:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
L' -F n
opzione lsof
farà sì che stampi 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 . I file regolari saranno sempre il nome assoluto e completo del file. Il grep ^n/
selezionerà solo le righe con un nome che inizia con una /
(che significa una, il nome del file completo in assoluto); eliminando così cose come porte aperte, socket, pipe (come FIFO), ecc. Eliminerà cut -c2-
il primo carattere, il n
, lasciando solo il nome del file. Quindi, infine, sort -u
eliminerà tutte le voci duplicate.
Un avvertimento, questo includerà file che non sono regolari fintanto che il loro nome inizia con a /
. Ad esempio, verrebbero inclusi tutti i file che iniziano con il seguente:
E potrebbero essercene altri a seconda del tuo sistema operativo.