为什么 du -b 和 du -k 差别这么大

为什么 du -b 和 du -k 差别这么大

我使用的是Ubuntu 16.04.5 LTS,du的版本是8.25,现在有个问题:

$ du -b /var/log/lastlog
69788251412 /var/log/lastlog

大小与命令 ls -al 匹配。当我使用 du -k 时,它有另一个结果:

$ du -k /var/log/lastlog
80 /var/log/lastlog

两次结果不一致,为什么?

答案1

/var/log/lastlog是一个以“随机访问”模式使用的二进制文件,而不是附加的日志,因此自然是一个稀疏文件, 作为本 (GNU/Linux) 手册中注明

笔记

lastlog 文件是一个数据库,其中包含每个用户上次登录的信息。您不应该轮换它。这是一个稀疏文件,因此其在磁盘上的大小通常比“ls -l”显示的大小要小得多(如果 passwd 中有 UID 较高的用户,则可能表示文件非常大)。您可以使用“ls -s”显示其实际大小。

稀疏意味着其实际磁盘使用量小于其表观大小。

在 GNU/Linux 上,-b选项du描述如下:

-b--bytes

相当于--apparent-size --block-size=1

也就是说,-b通过包含明确禁用稀疏文件检测和处理--apparent-size

因此,为了使字节大小匹配-k(磁盘上的实际使用情况),请使用:

du --block-size=1 /var/log/lastlog

或者为了使 KiB 大小匹配-b(与表观大小一致),请使用:

du --apparent-size -k /var/log/lastlog

相关内容