我在 ubuntu 服务器上,想检查内部目录的磁盘使用情况摘要,/var/lib/docker
我很困惑为什么我无法/var/lib/docker
使用 glob检查内部所有目录的磁盘使用情况*
。
该目录/var/lib/docker
显然存在并且里面有目录:
$ sudo du -s /var/lib/* | grep docker
865644 /var/lib/docker
8 /var/lib/docker-engine
$ sudo du -s /var/lib/docker/*
du: cannot access '/var/lib/docker/*': No such file or directory
$ sudo file /var/lib/docker
/var/lib/docker: directory
$ sudo ls /var/lib/docker | head -n 1
builder
$ sudo du -s /var/lib/docker/builder
20 /var/lib/docker/builder
为什么我会收到错误消息du
?
du: cannot access '/var/lib/docker/*': No such file or directory
我的错误似乎与非 root 用户有关,因为如果我切换到 root 用户,那么我可以发出du
命令:
# du -s /var/lib/docker/* | sort -n
4 /var/lib/docker/runtimes
4 /var/lib/docker/swarm
4 /var/lib/docker/tmp
4 /var/lib/docker/trust
20 /var/lib/docker/builder
20 /var/lib/docker/plugins
36 /var/lib/docker/volumes
60 /var/lib/docker/network
72 /var/lib/docker/buildkit
208 /var/lib/docker/containers
1880 /var/lib/docker/image
863328 /var/lib/docker/overlay2
您收到错误是因为您的(非根)shell 尝试扩展 glob
/var/lib/docker/*
并且无法扩展(因为您的用户无法读取 /var/lib/docker)。然后,您的外壳将 glob 完好无损,留下一个字面星号 forsudo
,这就是du
抱怨的原因:*
...因为在 /var/lib/docker/ 下没有命名文件或目录。该
du
命令由 root 用户执行,但 glob 扩展是在您的用户之前完成的,并且由于无法扩展(由于目录权限),该du
命令使用文字*
作为路径的一部分。如果您想查看其中文件夹的大小
/var/lib/docker
,可以使用单引号调用 shellsudo
并保护全局扩展 ( ):*
(我使用人类可读的 (
-h
in-sh
) 格式并根据返回的大小对结果进行排序,但您可以更改它)这样,扩展将以 root 用户身份完成(而不是由您的用户完成)。