を使用ls -lしてファイルの論理サイズを取得できますが、ファイルの物理サイズを取得する方法はありますか?
を使用ls -lしてファイルの論理サイズを取得できますが、ファイルの物理サイズを取得する方法はありますか?
回答:
ls -lファイルの見かけのサイズがわかります。これは、プログラムがファイルを最初から最後まで読み取った場合にプログラムが読み取るバイト数です。 du「ディスク上の」ファイルのサイズがわかります。
デフォルトでduは、ファイルのサイズをディスクブロック数で示しますが、-h代わりに人間が読める単位を使用することもできます。duシステムのマニュアルも参照してください。
GNU coreutil du(おそらくLinux上にあるもの)では、 -bバイトを取得することは--apparent-sizeオプションを意味することに注意してください。これは、実際にディスクで使用されているバイト数を取得するために使用するものではありません。代わりに、--block-size=1またはを使用してください-B 1。
GNU lsではls -s --block-size=1、ファイルに対しても実行できます。これによりdu -B 1、ファイルと同じ番号が与えられます。
例:
$ ls -l file
-rw-r--r-- 1 myself wheel 536870912 Apr 8 11:44 file
$ ls -lh file
-rw-r--r-- 1 myself wheel 512M Apr 8 11:44 file
$ du -h file
24K file
$ du -B 1 file
24576 file
$ ls -s --block-size=1 file
24576 file
これは、これがディスク上で約24 KBを必要とする512 MBファイルであることを意味します。これはスパースファイルです(ほとんどの場合、実際にはディスクに書き込まれず、ファイル内の論理的な「穴」として表されるゼロ)。スパースファイルは、事前に割り当てられた大きなファイル(仮想マシンのディスクイメージやスワップファイルなど)で作業する場合によく見られます。スパースファイルの作成は高速ですが、ゼロで埋めるのは遅い(そして不要です)。
fallocateLinuxシステムのマニュアルも参照してください。
duは、実際に読み取ることができるデータ量をls示し、ディスクセクターが割り当てられている範囲を示します。
duファイルが実際に使用しているディスクの量を示します。一方、によって示される見かけのサイズ(論理サイズ)lsは、プログラムがファイルから読み取ることができるバイト数です。ファイルがスパースの場合、読み取られたバイトの一部はゼロになりますが、それらは(ディスクからではなく)それらを読み取るプログラムに配信されます。