Linux中如何获取文件的物理大小?

Linux中如何获取文件的物理大小?

我可以用来ls -l获取文件的逻辑大小,但是有没有办法获取文件的物理大小?

答案1

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

这意味着这是一个 512 MB 的文件,大约占用磁盘上 24 KB 的空间。它是一个文件(大多数零实际上并未写入磁盘,而是表示为文件中的逻辑“孔”)。稀疏文件在处理预分配的大文件(例如虚拟机的磁盘映像或交换文件等)时很常见。创建稀疏文件很快,而用零填充它很慢(而且不必要)。

fallocate另请参阅Linux 系统上的手册。

答案2

我得到的文件大小以字节为单位,如下所示:

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

相关内容