Comment puis-je trouver le nombre de fichiers sur un système de fichiers?

26

Je veux savoir combien de fichiers j'ai sur mon système de fichiers. Je sais que je peux faire quelque chose comme ça:

find / -type f | wc -l

Cela semble très inefficace. Ce que j'aimerais vraiment, c'est de trouver le nombre total d'inodes uniques qui sont considérés comme un «fichier».

Y a-t-il une meilleure façon?

Remarque:

Je voudrais le faire parce que je développe un programme de synchronisation de fichiers et je voudrais faire une analyse statistique (comme le nombre total de fichiers que l'utilisateur moyen possède par rapport au nombre de fichiers sur le système). Je n'ai cependant pas besoin de savoir quoi que ce soit sur ces fichiers, juste qu'ils existent (les chemins n'ont pas d'importance du tout). Je voudrais surtout connaître ces informations pour chaque système de fichiers monté (et son point de montage associé).

beatgammit
la source

Réponses:

34

L'option --inodes dfvous indiquera le nombre d'inodes réservés à l'utilisation. Par exemple:

$ 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

Notez que le nombre d'entrées renvoyées par findest supérieur à celui IUseddu système de fichiers racine (/), mais inférieur à / home. Mais les deux se situent à moins de 0,0005%. La raison de ces écarts est due aux liens durs et aux situations similaires.

N'oubliez pas que les répertoires, les liens symboliques, les sockets de domaine UNIX et les canaux nommés sont tous des «fichiers» en ce qui concerne le système de fichiers. Donc, utiliser le find -type fdrapeau est extrêmement inexact, d'un point de vue statistique.

Arcege
la source
Je pense que c'est ce que je recherche. Existe-t-il un moyen de connaître le nombre de chaque type de fichier? Ce n'est pas directement nécessaire par mon application, mais pourrait être une connaissance utile.
beatgammit
1
Non sans inspecter les inodes de chaque fichier dans le système de fichiers, ce qui reviendrait à peu près à faire la recherche.
Arcege
Df comprend-il la plupart des systèmes de fichiers (ext2-4, ntfs, fat, reiserfs, etc.)?
beatgammit
Il comprendrait tout type de système de fichiers pouvant être monté. Certains types de systèmes de fichiers n'ont pas d'inodes (par exemple, fat); dfafficherait le nombre total d'inodes à 0 sur ces systèmes de fichiers. Les autres types devraient afficher les statistiques d'inode du système de fichiers sous-jacent.
Arcege
Auriez-vous à rediriger les erreurs pour /dev/nullvoir que vous obtiendrez des lignes vous avertissant que les fichiers /procsont "virtuels"?
n0pe
2

Utilisez statvfs()et calculez f_files - f_ffree.

Chris Down
la source