何百ものファイル(実際のファイル、シンボリックリンクなし、サブディレクトリなし)があるディレクトリがあります。
ls -la
Excelでサイズを使用して合計すると、287190
バイト(?)が表示されます。
バイト(?)を使用du -b
またはdu --apparent-size --block-size=1
取得するとき。422358
どちらも同じ意味だと思いましたが、なぜ差が出るのでしょうか?
答え1
du
すべてのファイルサイズの合計とは異なるディスク使用量を提供します。
たとえば、aはdu -b file
「dir」ディレクトリを作成し、同じファイルを「dir」に入れてから実行するのとは異なる出力を提供しますdu -b dir
。私のシステムでは、ディレクトリの「オーバーヘッド」に30バイトが追加されます。ディレクトリの内容によってディレクトリのサイズが変わると思います(ただし、完全に線形であれば驚きます)。
また、相違の相対サイズは、かなり多くのファイルを含む隠しディレクトリが欠落しているか、または多くの隠されたファイルが欠落している可能性があることを意味します(-aフラグを使用した場合でも)。
また、あるツールではシンボリックリンクに従い、他のツールではシンボリックリンクに従わないため、不一致が発生する可能性があります。
最後に、一部のファイルシステムでは、ファイルの内容が十分に小さい場合はファイルシステムのInodeにインライン化され、多くのファイルシステムではブロックがファイルの内容を保持するように予約されています。完全に使用されていません。これらの変更は、2つを比較しようとしたときに追加のノイズを追加します。
答え2
ハードドライブは複数のエンクロージャに分かれています。各ファイルは1つ以上のクラスタを占有します。
16 バイトのクラスターを搭載したハードドライブを想像してみてください。
12バイトファイルは1つのクラスタを占有し、一部のバイトはクラスタで使用されません。 lsを使用するとファイルサイズは12になり、duを使用するとファイルサイズは16になります。
32バイトファイルは正確に2つのクラスタを占有します。 lsを使用するとファイルサイズは32になり、duを使用するとファイルサイズは32になります。
すべてのファイルに対してこれを行うと、要約すると、作成した値が得られます。