哪个目录占用的空间最多

Ten*_*ers 5 shell disk-usage filenames jenkins

Jenkins 已停止构建,我可以从 df 中看到:/var 已达到最大值。在此之后,我可以看到罪魁祸首是 /var/lib/jenkins

52K     alternatives
...
4.0K    games
2.3G    jenkins   <--this one
4.0K    logrotate.status
...
12M     yum
2.4G    total
Run Code Online (Sandbox Code Playgroud)

但是,当我进入 jenkins 目录查看哪个文件夹消耗了这 2.3GB 的大部分时,出现了一些奇怪的结果:

$ sudo du -csh *
16K     config.xml
0       Connection Activity monitoring to slaves.log
0       Download metadata.log
0       Fingerprint cleanup.log
7.3M    fingerprints
4.0K    hudson.maven.MavenModuleSet.xml
4.0K    hudson.model.UpdateCenter.xml
4.0K    hudson.scm.CVSSCM.xml
4.0K    hudson.scm.SubversionSCM.xml
4.0K    hudson.tasks.Ant.xml
4.0K    hudson.tasks.Mailer.xml
4.0K    hudson.tasks.Maven.xml
4.0K    hudson.tasks.Shell.xml
4.0K    hudson.triggers.SCMTrigger.xml
4.0K    identity.key.enc
4.0K    jenkins.diagnostics.ooom.OutOfOrderBuildMonitor
4.0K    jenkins.model.ArtifactManagerConfiguration.xml
4.0K    jenkins.model.DownloadSettings.xml
4.0K    jenkins.model.JenkinsLocationConfiguration.xml
4.0K    jenkins.mvn.GlobalMavenConfig.xml
4.0K    jenkins.security.QueueItemAuthenticatorConfiguration.xml
160M    jobs
4.0K    nodeMonitors.xml
12K     Out of order build detection.log
41M     plugins
4.0K    proxy.xml
4.0K    queue.xml.bak
4.0K    secret.key
0       secret.key.not-so-secret
32K     secrets
1.1M    updates
8.0K    userContent
12K     users
4.0K    Workspace clean-up.log
209M    total
Run Code Online (Sandbox Code Playgroud)

从 2.3GB 到 209M。谁能解释一下,这样我就可以创造一些空间?我已经从 Web 前端删除了 Jenkins 工作区,但仍然看到这个结果。

jll*_*gre 8

有了这个命令,

sudo du -csh *
Run Code Online (Sandbox Code Playgroud)

您缺少隐藏目录,即*扩展到所有以点 ( .)开头的名称。这意味着所有以点开头的目录名称都不会传递给du命令,并且不会考虑它们的大小。

在大多数情况下,添加.??*到参数将满足需要:

sudo du -csh .??* *
Run Code Online (Sandbox Code Playgroud)

额外的.??*是扩展到所有以点开头并具有两个以上字符的名称。目标是..从参数中排除,即父目录。

假设的文件和目录.a仍然会被遗漏,那些以破折号 ( -)开头的文件和目录充其量会被忽略,最坏的情况是会触发错误。

如果您的文件或目录名称以破折号开头或名称以点开头后跟单个字符,则此增强版本将正确报告所有目录大小:

sudo du -csh -- .[^.] .??* *
Run Code Online (Sandbox Code Playgroud)

这里的意思--du将以破折号开头的参数作为名称,而不是选项,.[^.]并将所有文件和目录添加到已处理的名称中,所有文件和目录以点开头,后跟除点以外的任何单个字符。这包括文件和目录的所有可能名称。

几个 shell 为这些命名问题提供了自定义的解决方法:

bash

shopt -s dotglob
sudo du -csh -- *
Run Code Online (Sandbox Code Playgroud)

zsh

sudo du -csh -- *(D)
Run Code Online (Sandbox Code Playgroud)

ksh93

FIGNORE='@(.|..)'
sudo du -csh -- *
Run Code Online (Sandbox Code Playgroud)