Come visualizzare descrittori di file aperti ma non usare il comando lsof


48

Ciao, ho letto qui che lsof non è un modo preciso per ottenere il numero di descrittori di file attualmente aperti. Raccomandò invece di usare questo comando

 cat /proc/sys/fs/file-nr

Mentre questo comando visualizza il numero di FD, come si visualizza l'elenco dei descrittori di file aperti che il comando sopra ha appena contato?


4
Probabilmente vuoi sapere se il tuo ulimit viene superato, giusto? Ho scritto questo blog su linuxintro.org/wiki/Is_my_ulimit_exceeded ; ancora più importante, l'ulimit è una restrizione per processo che puoi trovare in / proc / PID / limits e invece di lsof userei ls / proc / PID / fd per elencare i descrittori di file del processo.
Thorsten Staerk

Risposte:


60

Esistono due motivi per cui lsof | wc -lnon vengono considerati i descrittori di file. Uno è che elenca cose che non sono file aperti, come librerie caricate in modo dinamico e directory di lavoro correnti; devi filtrarli. Un altro è che lsofrichiede del tempo per essere eseguito, quindi può mancare i file che vengono aperti o chiusi mentre è in esecuzione; pertanto il numero di file aperti elencati è approssimativo. Guardare /proc/sys/fs/file-nrti dà un valore esatto in un determinato momento.

cat /proc/sys/fs/file-nrè utile solo quando è necessaria la cifra esatta, principalmente per verificare l'esaurimento delle risorse. Se si desidera elencare i file aperti, è necessario chiamare lsofo utilizzare un metodo equivalente come la pesca a strascico /proc/*/fdmanualmente.


1
Ciao grazie per aver dato una buona spiegazione Gilles. Ho provato ls / proc / * / fd e in quel momento ho avuto tutti gli open fd. Sta producendo un output con un po 'di codice colore, dovrò solo guardare il manuale.
Dimas,

Le /proc/*/fddirectory @dimas contengono collegamenti simbolici ai file aperti. Per l'ispezione visiva, utilizzare ls -l. Per il trattamento automatizzato, utilizzare readlinkper estrarre la destinazione del collegamento.
Gilles 'SO- smetti di essere malvagio' il

Usa solo ls -l ma farò esperimenti con readlink. Ho provato altri / proc / PID / maps e altre opzioni come specificato qui kernel.org/doc/man-pages/online/pages/man5/proc.5.html . Grazie ancora per le informazioni aggiuntive.
Dimas,

1
/ proc / sys / fs / file-nr mi dà 3872 (e altri due numeri). Come può essere questo il conteggio dei file che ho aperto se ulimit -n mi mostra 1024?
Thorsten Staerk,

1
@ThorstenStaerk Tutte le impostazioni di setrlimit(la chiamata di sistema alla base del ulimitcomando shell) sono per processo. Interessano solo il processo che effettua la chiamata (e indirettamente i processi che in seguito biforcerà).
Gilles 'SO- smetti di essere malvagio'

25

Le informazioni di processo vengono mantenute dinamicamente dal sistema nelle directory in / proc. Ad esempio il processo con PID 1234 avrà una directory chiamata / proc / 1234.

Ci sono un bel po 'di informazioni lì dentro ma in questo momento sei interessato alla sottodirectory / proc / 1234 / fd .

NOTA: è necessario disporre delle autorizzazioni di root per visualizzare o aprire i file per i processi che non si possiedono, nonché per i processi SetUID.

Esempio:

root@johan-HP-ProBook-6560b-LG654EA-ACQ:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]

root@johan-HP:/proc# cat 2443/fdinfo/2
pos:    1244446
flags:  0102001

Dai un'occhiata anche al resto dei file in / proc ... molte informazioni utili dal sistema risiedono qui.

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.