为什么 du 给出不同的结果?

Why does du give different results?

我经常使用du 命令。最近,我用它来找出服务器根目录中最重的 5 个文件,我使用了以下命令:

sudo du -ah / | sort -nr | head -n 5

结果是:

1016K   /var/cache/apt/archives/fonts-dejavu-core_2.35-1_all.deb
1016K   /bin/bash
1008K   /usr/src/linux-aws-headers-4.4.0-1052/fs
1008K   /usr/src/linux-aws-headers-4.4.0-1049/fs
1004K   /var/awslogs/lib/python2.7/site-packages/botocore/data/ec2/2016-09-15/

然后我删除了 -h,并观察到完全不同的结果:

sudo du -a / | sort -nr | head -n 5

结果:

2551396 /
1189240 /usr
894000  /var
541836  /usr/lib
406276  /var/lib

来自 duman 页,

-h, --human-readable
              print sizes in human readable format (e.g., 1K 234M 2G)

根据我的理解,包括或排除 -h 应该不会真正导致结果发生变化,只是大小格式发生变化。

你能帮我理解为什么会这样吗?

sort命令不考虑K/M/G,所有"K"排在所有"M"之前。

1016K 在数值上大于 2Msort -n 仅提取 10162.

如果您的类型支持,请尝试 sort -h

可能 -h 您的目录大小约为 2G4G,而文件保持 1016K1008K,以及 2 小于 1016 因此目录被整理到列表的末尾。

没有 -h 目录的总大小(实际上:目录树)明显大于内部文件的大小,因此目录排在列表的顶部。