Linux怎么查看目录大小并排序
想快速找出当前目录里最占空间的子项,直接用du -sh | sort -hr通常就够了;不过这个写法默认不会把隐藏文件算进去,而且一旦碰到权限不足,还会直接报错。更稳妥的做法,是用du -sh .1 或du -sh ./ 2>/dev/null | sort -hr,把隐藏项一并覆盖掉,同时把权限报
想快速找出当前目录里最占空间的子项,直接用du -sh | sort -hr通常就够了;不过这个写法默认不会把隐藏文件算进去,而且一旦碰到权限不足,还会直接报错。更稳妥的做法,是用du -sh .1 或du -sh ./ 2>/dev/null | sort -hr,把隐藏项一并覆盖掉,同时把权限报错静默处理。要是还想继续往下追,递归排查更深层的大文件,就用du -ah /path | sort -hr | head -n 20。
. ↩
直接用 du -sh * 加 sort -hr 就能快速定位当前目录下谁占空间最多,但默认不包含隐藏项、遇权限错误会报错、深层大文件容易被忽略——得根据场景选对参数组合。
查当前目录一级子项(含隐藏项)并排序
只运行 du -sh * 会漏掉 .git、.cache 这类隐藏目录。正确做法是显式匹配:
- 用
du -sh .[^.]* *:覆盖以.开头、但非.或..的项,再补上非隐藏项 - 或更稳妥地用
du -sh ./* 2>/dev/null:统一用./*展开所有项,2>/dev/null静默跳过权限拒绝(如/var/log/journal) - 管道接
| sort -hr才能按人类可读单位逆序排(最大在前);若系统 locale 不是 C/en_US.UTF-8,加LC_ALL=C防止排序错乱
递归扫全树找最大文件或目录
怀疑大文件藏在深层子目录里(比如 /var/lib/docker/overlay2/...),就得递归统计:
du -ah /path | sort -hr | head -n 20:列出所有文件+目录,取前 20 条。注意-a是关键,没它就只统计目录,漏掉单个大文件- 输出中类似
1.8G ./data/archive.tar.gz和1.7G ./logs/并列,需人工区分是删文件还是清目录 - 扫描根目录时务必加
-x(即du -ahx /),否则碰到/proc、/sys这类虚拟文件系统会卡死或报错
用 ncdu 交互式钻取(适合复杂目录结构)
当目录嵌套深、内容杂(如用户家目录、Docker 数据卷),肉眼扫几十行文本效率低且易漏:
- 安装后首次运行
ncdu /path前,必须加--exclude过滤虚拟文件系统,例如ncdu / --exclude /proc --exclude /sys,否则会在/proc上卡死甚至触发 OOM killer - 进目录后按
s键重排序,注意:默认排的是“该目录下所有子项的磁盘占用总和”,不是“子项自身大小”;想看纯文件大小,得先cd进去再按s - 按
i键可查看高亮项的实际磁盘占用(on-disk size),比逻辑大小更真实
真正难的不是命令怎么写,而是判断“哪个大”之后该不该动——比如 /var/log/journal 占 3G,清空可能影响故障排查;~/.cache 占 5G,多数情况可安全清理。别光盯着数字,得结合路径语义做决策。


































