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

Nic*_*eed 6 filesystems disk-usage

我今天正在检查我的磁盘使用情况,并运行以下命令(使用 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
Run Code Online (Sandbox Code Playgroud)

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

use*_*ser 21

尝试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/*which 将显示*shell如何扩展 。


顺便说一句,我建议您不要开始习惯性地通过sudo. 必须时使用 sudo,否则不要使用。例如,应该不需要以ls -la /home超级用户身份运行;该目录/home很可能是世界可读的。