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
很可能是世界可读的。