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

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

ls -lファイルの論理サイズを取得するために使用できますが、ファイルの物理サイズを取得する方法はありますか?

答え1

ls -lプログラムがファイルを最初から最後まで読み取る場合、読み取るバイト数であるファイルの見かけのサイズを提供します。 duファイルの「ディスク上の」サイズを知らせます。

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

duGNU coreutil(おそらくLinux)の場合、-bgetbytesを使用するとこの--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

これは、このファイルが512 MBのファイルで、ディスク上の約24 KBのスペースを占めることを意味します。これは足りないファイル(ほとんどのゼロは実際にはディスクに書き込まれませんが、ファイル内の論理「穴」と表示されます)。仮想マシンのディスクイメージやスワップファイルなど、事前に割り当てられた大容量ファイルを処理する場合は、スパースファイルが一般的です。まれなファイルを作成するのは高速ですが、ゼロで埋めるのは遅くて不要です。

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

答え2

バイト単位で取得するファイルサイズは次のとおりです。

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

関連情報