![为什么 /home 是预期的两倍大?](https://linux22.com/image/140201/%E4%B8%BA%E4%BB%80%E4%B9%88%20%2Fhome%20%E6%98%AF%E9%A2%84%E6%9C%9F%E7%9A%84%E4%B8%A4%E5%80%8D%E5%A4%A7%EF%BC%9F.png)
我今天检查了我的磁盘使用情况,并运行了以下命令(使用 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
可能是全世界可读的。