ファイルシステムにあるファイルの数を知りたい。私はこのようなことができることを知っています:
find / -type f | wc -l
これは非常に非効率的です。私が本当にやりたいのは、「ファイル」と見なされる一意のiノードの総数を見つけることです。
もっと良い方法はありますか?
注意:
ファイル同期プログラムを開発しているため、これを実行し、いくつかの統計分析を実行したいと思います(平均的なユーザーがシステム上にあるファイルの合計数に対するファイルの数など)。ただし、これらのファイルについて知っている必要はありません。ファイルが存在することだけを知っています(パスはまったく関係ありません)。マウントされた各ファイルシステム(および関連するマウントポイント)について、この情報を特に知りたいです。
df
の--inodesオプションは、使用するために予約されているiノードの数を通知します。例えば:
$ 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
find
から返されるエントリの数は、ルート(/)ファイルシステムのIUsed
よりも大きいが、/ homeの場合は少ないことに注意してください。しかし、どちらも0.0005%以内です。不一致の理由は、ハードリンクおよび同様の状況が原因です。
ディレクトリ、シンボリックリンク、UNIXドメインソケット、および名前付きパイプは、ファイルシステムに関連するため、すべて「ファイル」であることに注意してください。したがって、find -type f
フラグは、統計的な観点から、非常に不正確です。
statvfs()
を使用して、f_files - f_ffree
を計算します。