lsof - limita l'output ai soli file fisici - come?


30

Come faccio a sapere se devo elencare solo i file fisici (non i socket, non le connessioni TCP / IP, solo i file fisici)?


Per prima cosa devi determinare a cosa ti serve. Dire "file fisici" è troppo generale. lsof ti darà i file che sono stati aperti con un descrittore di file. ti darà i file che sono stati aperti come file mappati in memoria dai thread. ti darà i file della libreria che sono stati aperti da Proceses. tutti questi sono file fisici, ma il modo in cui vengono utilizzati è diverso.
Michael Martinez,

Risposte:


37

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.


2
Includerà anche FIFO.
Kyle Brandt,

1
Bello e semplice. Se hai bisogno solo dell'ultima colonna puoi aggiungere | awk {'print $ 9'} Interessante. Nemmeno io ottengo il quinto nel mio output. Fedora 12 e CentOS 5.3
egorgry il

CentOS 5.2 e Ubuntu 9.04 restituiscono il Fifo per me, potrebbe essere un cambiamento, ma sei sicuro che ci siano Fifo? Vorrei chiedere per primo e assicurarmi che sia lì, quindi provare il/
Kyle Brandt il

Inoltre, stavo solo scherzando, sembra che non voglia solo il rumore e probabilmente non ci saranno molti quindici.
Kyle Brandt,

4
lsof / include solo i file nel filesystem di root. Se hai più filesystem montati, questi non appariranno nell'output. Trovo che il modo migliore sia usare solo grep.
James,

9

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 lsofper tutti i tipi che potrebbero essere in quella colonna.


24
Potrebbe esserci un interruttore, ma la manpage sembra la tesi di dottorato di qualcuno ... :)
Cawflands,

1
Sì ... l'uomo è estremamente difficile da leggere ...; p)
Vladislav Rastrusny,

+1 quel commento. :)
egorgry il

su un server VPN con abbastanza client, lsof non ritorna, quindi greping non è un'opzione per me
Ohad Cohen

@OhadCohen lsof tornerà se si limita ciò che sta cercando. Vedi "FD" nella manpage (mem, cwd, pd, ecc.)
Michael Martinez,

2

Questo è quello che ho fatto che ha funzionato perfettamente per me:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

L' -F nopzione lsoffarà 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 -ueliminerà 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:

  • / dev
  • / proc
  • / sys

E potrebbero essercene altri a seconda del tuo sistema operativo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.