Come posso trovare il numero di file su un filesystem?


26

Voglio sapere quanti file ho sul mio filesystem. So di poter fare qualcosa del genere:

find / -type f | wc -l

Questo sembra altamente inefficiente. Quello che mi piacerebbe davvero fare è trovare il numero totale di inode univoci che sono considerati un 'file'.

Esiste un modo migliore?

Nota:

Vorrei farlo perché sto sviluppando un programma di sincronizzazione dei file e vorrei fare alcune analisi statistiche (come quanti file l'utente medio ha totale rispetto a quanti file sono nel sistema). Tuttavia, non ho bisogno di sapere nulla di quei file, solo che esistono (i percorsi non contano affatto). Mi piacerebbe in particolare conoscere queste informazioni per ciascun filesystem montato (e il relativo mount point).

Risposte:


34

L'opzione --inodes dfti dirà quanti inode sono riservati per l'uso. Per esempio:

$ df --inodes / /home
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            3981312  641704 3339608   17% /
/dev/sda8            30588928  332207 30256721    2% /home
$ sudo find / -xdev -print | wc -l
642070
$ sudo find /home -print | wc -l
332158
$ sudo find /home -type f -print | wc -l
284204

Si noti che il numero di voci restituite findè maggiore rispetto IUsedal file system radice (/), ma è inferiore per / home. Ma entrambi sono entro lo 0,0005%. Il motivo delle discrepanze è a causa di collegamenti duri e situazioni simili.

Ricorda che directory, collegamenti simbolici, socket di dominio UNIX e named pipe sono tutti 'file' in relazione al filesystem. Quindi usare find -type fflag è selvaggiamente impreciso, da un punto di vista statistico.


Penso che sia quello che sto cercando. C'è un modo per scoprire quanti di ogni tipo di file ci sono? Questo non è necessario direttamente dalla mia applicazione, ma potrebbe essere una conoscenza utile.
Beatgammit,

1
Non senza ispezionare gli inode di ciascun file nel filesystem, il che equivarrebbe quasi a fare la ricerca.
Arcege,

Df comprende la maggior parte dei filesystem (ext2-4, ntfs, fat, reiserfs, ecc.)?
beatgammit,

Comprenderebbe qualsiasi tipo di filesystem che potrebbe essere montato. Alcuni tipi di filesystem non hanno inode (ad esempio, fat); dfvisualizzerebbe il numero totale di inode come 0 su quei filesystem. Altri tipi dovrebbero mostrare le statistiche dell'inode del filesystem sottostante.
Arcege,

Dovresti reindirizzare gli errori a /dev/nullcome vedresti le linee che ti avvertono che i file in /procsono "virtuali"?
n0pe,

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.