为什么 /home 是预期的两倍大?

为什么 /home 是预期的两倍大?

我今天检查了我的磁盘使用情况,并运行了以下命令(使用 sudo 所以我没有得到“权限被拒绝”)

$ du -hs /home
26G     /home

$ ls -la /home
total 24
drwxr-xr-x  4 root  root   4096 Dec 27  2017 .
drwxr-xr-x 25 root  root   4096 Oct  1 17:39 ..
drwxrwxr-x  3 root  root   4096 Dec 27  2017 .ecryptfs
drwx------ 53 paper paper 12288 Oct  6 14:38 paper`

$ du -hs /home/*
13G    /paper

为什么我的 /home 目录的大小恰好是我的用户目录大小的两倍,而用户目录看起来像是 /home 中唯一的东西?

答案1

尝试shopt dotglob在同一个 shell 中执行。

很可能是dotglob关闭的,这会导致*扩展(通配符)不包含其名称开头的文件和目录.(包括特殊的目录条目...我相当确定这些条目永远不会包含在通配符扩展中;想象一下如果rm -rf ./*扩展会造成的混乱以便包括./..)。

因此,当您运行时,du -hs /home它会计算该目录中的所有内容,但du -hs /home/*会扩展为仅du -hs /home/paper,因此仅计算后一个目录。

由于可能/home/.ecryptfs包含加密数据,因此它的大小与解密数据的大小大致相同是有道理的。因此,文件实际上会被计数两次,但前提是您指向du父目录。

如果您shopt -s dotglob在该 shell 会话中打开 dotglob 设置,然后sudo du -hs /home/*再次运行,您可能会看到它显示的大小与运行时的大小相同sudo du -hs /home

演示这一点的另一种方法是将其放在echo命令的开头。因此,例如,du -hs /home/*您可以尝试echo du -hs /home/*显示*shell 如何扩展 。


作为旁白,我确实建议您不要开始习惯性地遍历所有内容sudo。必要时使用 sudo,否则不要使用。例如,不需要ls -la /home以超级用户身份运行;该目录/home可能是全世界可读的。

相关内容