web-dev-qa-db-ja.com

du -hとls -lhの違いは何ですか?

コマンドごとに結果が異なるため、ファイルのサイズを読み取る正しい方法を把握するのに苦労しています。 http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html にも投稿があり、以下;

duは、ファイルシステムにあるファイルのサイズを示します。 (IEは常に1024で割り切れる結果を提供します)。

lsはファイルの実際のサイズを示します。

あなたが見ているのは、ファイルの実際のサイズとそれが取るディスク上のスペースの量の違いです。 (ファイルシステム効率とも呼ばれます)。

ファイルシステムに常駐しているときとファイルの実際のサイズの違いは何ですか

31
PeanutsMonkey

これは slack space と呼ばれます:

個々のビットとバイトの上にある抽象化の各層は、データファイルがファイルシステムが追跡できる最小のデータ単位よりも小さい場合、無駄なスペースになります。セクター、クラスター、またはブロック内のこの無駄なスペースは、一般にスラックスペースと呼ばれ、通常、追加のデータの保存には使用できません。個々の256バイトセクターの場合、最大の無駄なスペースは255バイトです。 64キロバイトのクラスターの場合、最大の無駄なスペースは65,535バイトです。

したがって、ファイルシステムが64 KB単位でスペースを割り当て、3 KBのファイルを保存する場合、次のようになります。

  • ファイルの実際のサイズは3 KBです。
  • ファイルの常駐サイズは64 KBです。そのユニットの残りの61 KBは別のファイルに割り当てることができないため、失われます。

:一部のファイルシステムは block suballocation をサポートしています。これは、複数の小さなファイル(または大きなファイル)を同じブロックに入れます。

48
Handyman5

ここには、カバーされていない別のオプションがあります-スパースファイル。この場合、duは単純なls -lよりも小さいサイズを表示します。これは、lsがファイルの「サイズ」をapparentサイズ(多くのゼロが必要な場合は読み取ることができるバイト数)、duは実際のディスクブロック数を引き続き使用します使用中で。

楽しいトリック:非常に多くの大規模なスパースファイルを作成し、ディスク容量の大きさを友達に印象づけます(「ほら、何千億もの1TBのファイルをハードドライブに保存しています!」)。じゃあ、そんなに楽しくないかも。

19
womble

ファイルシステムはブロックで構成されています。ファイルはブロックにきちんと収まる必要はありません。ファイルが1024バイトの場合、ファイルのサイズはlsおよびduで1024になります。ファイルサイズが1025の場合、サイズはlsで1025、duで2048になります。

上記の例では、ブロックサイズを1024と想定しています。最近では、より大きなブロックサイズが一般的です。

ls -l fred
-rw-r--r-- 1 iain users 1024 Jul 13 22:06 fred

du -h fred
8.0K    fred
6
user9517

それらが異なる場合がある理由はまだ1つあります。 du -hは、同じファイルを別の名前(シンボリックリンクではなくハードリンク)で見たときにそれを認識し、各ファイルのサイズを報告しますが、共通の親ディレクトリに一度だけサイズを追加します。

0
Clifford Heath