web-dev-qa-db-ja.com

Linuxでファイルの物理サイズを取得する方法は?

使うことができます ls -lファイルの論理サイズを取得しますが、ファイルの物理サイズを取得する方法はありますか?

12
user285003

ls -lは、ファイルの見かけのサイズを示します。これは、プログラムがファイルを最初から最後まで読み取った場合にプログラムが読み取るバイト数です。 duは、「ディスク上の」ファイルのサイズを示します。

デフォルトでは、duはファイルのサイズをディスクブロック数で示しますが、-hを使用して人間が読める単位にすることもできます。システムのduのマニュアルも参照してください。

GNU coreutil's 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ファイルであることを意味します。これはsparseファイルです(実際にはディスクに書き込まれず、ファイル内の論理的な「ホール」として表されるほとんどのゼロ)。スパースファイルは、事前に割り当てられた大きなファイルを操作する場合に一般的です。仮想マシンまたはスワップファイルなどのディスクイメージ。スパースファイルの作成は高速ですが、ゼロで埋めるのは低速です(そして不要です)。

Linuxシステムのfallocateのマニュアルも参照してください。

28
Kusalananda

私はこのようにバイト単位でファイルサイズを取得します:

actualsize=$(du -b "${file}" | cut -f 1)
3
woohoo