最准确的方法是用 du -sh .[!.]* 直接匹配以点开头、第二位非点的隐藏文件或目录,避开 . 和 ..,避免统计错误;该模式为 shell glob,非正则表达式,若无匹配项会报错属正常现象。

用 du -sh .[!.]* 查隐藏文件大小最准
直接匹配以点开头、且第二位不是点的文件或目录,能避开 . 和 ..,避免统计错误。这是最常用也最可靠的写法。
-
.[!.]*是 shell glob,不是正则表达式 —— 它靠 shell 展开,不是grep或find解析 - 如果当前目录没有隐藏项,命令会报错
bash: .[!.]*: No such file or directory,属于正常现象,不是失败 - 想同时看非隐藏项,可以拼成
du -sh .[!.]* *,但注意:如果某项名含空格,*展开后可能出错,建议优先分两次执行 - 权限不足时(比如某些
.config下子目录),du会打印警告但继续统计;加2>/dev/null可静默,但会掩盖真实问题
ls -Alh 能快速列出,但不反映真实磁盘占用
ls -Alh 显示的是文件逻辑大小(即 stat 中的 Size 字段),对稀疏文件、硬链接、符号链接容易误判。比如一个 1GB 的稀疏日志文件,ls 显示 1G,du 可能只显示几 MB。
-
-A列出所有隐藏项(除.和..),比-a更干净 -
-S可按大小倒序:ls -AlhS,但排序依据是逻辑大小,不是磁盘实际占用 - 对目录本身,
ls只显示目录元数据大小(通常 4K),完全不体现其内容体积 —— 这是新手最容易误解的一点
递归查隐藏子目录要用 --max-depth
默认 du -sh .[!.]* 只统计一级隐藏项总和。若要看到每个隐藏子目录(如 .git、.cache)各自占多少空间,必须加深度限制:
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
-
du -sh --max-depth=1 .[!.]*:只展开一层,适合定位“谁吃掉了空间” - 省略
--max-depth会递归到底,输出大量行,难以聚焦;加了之后末尾一行仍是汇总,但中间每行对应一个隐藏项 - 如果某个隐藏目录权限受限(如
/root/.cache),du会跳过其子树并报错,此时需sudo,但要注意这可能暴露敏感路径
du -ah | grep "^\." 适合查小文件,但结果杂乱
这个组合能捕获所有隐藏文件(包括多层嵌套),但代价是输出量大、无结构、难过滤:
-
-a强制列出所有文件(含普通文件),grep "^\."筛出以点开头的行 —— 注意它匹配的是du输出的路径前缀,不是文件名 - 输出里混着目录和文件,且没排序;加
| sort -rh后虽可看最大项,但顶部常是.git/objects这类深层路径,不易定位源头 - 真正需要定位单个巨型隐藏文件时(比如
.bash_history膨胀到几百 MB),这个方法比.[!.]*更彻底,但日常排查优先用前者
实际操作中,.[!.]<em></em> 的匹配边界和 du 的统计逻辑是关键。很多人卡在“为什么 du -sh . 报错或包含 .”,本质是 shell glob 展开规则和 du 对目录参数的处理方式不一致 —— 这点不理解,换再多命令也绕不出坑。










