我使用的是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