ファイルシステム上のファイルの数を見つけるにはどうすればよいですか?


26

ファイルシステムにいくつのファイルがあるか知りたい。私は次のようなことができることを知っています:

find / -type f | wc -l

これは非常に非効率的です。私が本当にやりたいのは、「ファイル」と見なされる一意のiノードの総数を見つけることです。

もっと良い方法はありますか?

注意:

私はファイル同期プログラムを開発しているので、これをしたいと思います。統計分析(平均的なユーザーの合計ファイル数とシステム上のファイル数など)を行いたいのです。ただし、これらのファイルについて何も知る必要はありません。ファイルが存在するというだけです(パスはまったく関係ありません)。特に、マウントされた各ファイルシステム(および関連するマウントポイント)についてこの情報を知りたいと思います。

回答:


34

--inodesオプションをdf使用すると、使用のために予約されている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、統計的な観点から、フラグの使用は非常に不正確です。


これが私が探しているものだと思います。各タイプのファイルがいくつあるかを知る方法はありますか?これは私のアプリケーションでは直接必要ではありませんが、役に立つ知識になる可能性があります。
beatgammit

1
ファイルシステム内の各ファイルのiノードを検査せずに、これは検索を行うのとほぼ同じです。
アルケージュ

dfはほとんどのファイルシステム(ext2-4、ntfs、fat、reiserfsなど)を理解しますか?
-beatgammit

マウント可能なファイルシステムの種類を理解します。一部のファイルシステムタイプにはinodeがありません(たとえば、fat)。dfこれらのファイルシステムでは、iノードの総数が0として表示されます。他のタイプは、基礎となるファイルシステムのiノード統計を表示する必要があります。
アルケージュ

/dev/nullファイル/procが「仮想」であることを警告する行が表示されるので、エラーを表示にリダイレクトする必要がありますか?
n0pe

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.