Sudo

檢查/var/lib/docker的磁碟使用情況

  • April 23, 2020

我在 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 完好無損,留下一個字面星號 for sudo,這就是du抱怨的原因:

du: cannot access '/var/lib/docker/*': No such file or directory

*…因為在 /var/lib/docker/ 下沒有命名文件或目錄。

du命令由 root 使用者執行,但 glob 擴展是在您的使用者之前完成的,並且由於無法擴展(由於目錄權限),該du命令使用文字*作為路徑的一部分。

如果您想查看其中文件夾的大小/var/lib/docker,可以使用單引號呼叫 shellsudo並保護全域擴展 ( ):*

sudo bash -c 'du -sh /var/lib/docker/*' | sort -h

(我使用人類可讀的 ( -hin -sh) 格式並根據返回的大小對結果進行排序,但您可以更改它)

這樣,擴展將以 root 使用者身份完成(而不是由您的使用者完成)。

引用自:https://unix.stackexchange.com/questions/534788