tree命令默认仅显示目录结构,不统计磁盘占用;需结合du -sh生成大小数据,或使用ncdu等专用工具实现树状空间分析。

tree 命令本身不显示大小,别被名字误导
很多人看到 tree 就以为它能像 GUI 文件管理器那样带大小信息——其实不能。tree 默认只画结构,不统计磁盘占用。它输出的是目录层级关系,不是空间分析工具。想靠 tree 直接看出哪个文件夹吃掉最多空间,行不通。
du -sh + tree 组合才是实用解法
真实可行的做法是先用 du 算好各目录大小,再把结果“喂”给 tree 渲染成树状。核心思路是:用 du -sh 生成带大小的路径列表,按深度排序后交给 tree 的 -f(全路径)和 --prune 配合处理。
-
du -sh */ | sort -hr | head -n 20:先快速揪出当前目录下最大的前 20 个子目录 -
du -sh /path/to/dir/* | sort -hr | head -n 10 | cut -f2 | xargs -r tree -sh --du -L 2:对这些大目录单独跑tree,--du参数启用大小标注(仅部分新版tree支持),-L 2限制深度防卡死 - 注意:
--du不是所有发行版默认可用;Ubuntu/Debian 的tree通常要装tree包而非tree-sg或精简版
ncdu 是更省心的替代方案
如果你真需要“树状图 + 实时大小 + 可交互”,直接上 ncdu。它本质是 du 的终端图形封装,启动后自动扫描、按大小排序、支持方向键钻入子目录、按 d 删除、按 a 切换单位——比硬凑 tree + du 稳定得多。
- 安装:
sudo apt install ncdu(Debian/Ubuntu)或sudo yum install ncdu(CentOS/RHEL) - 运行:
ncdu /var/log—— 扫描完直接进交互界面,顶部显示总大小,箭头选中目录回车即可下钻 - 关键细节:
ncdu默认跳过权限不足目录,加-x可跨挂载点,加--exclude能过滤掉/proc这类伪文件系统
df -h 和 du -sh 的差异必须分清
排查空间问题时,常有人把 df -h 和 du -sh 结果对不上当成 bug。其实这是两个维度:df 看的是文件系统级块占用(含已删未释放文件、预留空间、inode 耗尽等),du 看的是当前目录树下实际可见文件的块总和。比如 df 显示 / 已满但 du -sh /* 加起来才 80%,大概率是有进程还在写一个已被 rm 掉的大日志文件。
- 验证是否为“已删未释放”:
lsof +L1查找被删除但仍被打开的文件 - 检查 inode 是否耗尽:
df -i,尤其在大量小文件场景下容易触发 -
du的路径必须明确,du -sh .和du -sh *结果可能差很多——前者包含隐藏文件(如.git),后者不包含
真正需要树状空间视图时,别在 tree 上硬刚。用 ncdu 看得清、删得准、钻得深,是多数人漏掉但最该优先试的工具。











