du -sh --max-depth=1 可只统计当前目录下一级子项大小,--max-depth=0等价于du -sh,--max-depth=2则多展开一层;常用组合如du -sh --max-depth=1 /path | sort -hr | head -5查看最大5个子项。

用 du -sh 统计目录大小时,默认会递归遍历所有子目录,但有时你只想看某一层级(比如只看当前目录下一级子目录的大小),这时需要配合 --max-depth 参数来限制层级。
使用 --max-depth 限定统计深度
du 命令本身不支持直接用 -sh 限制层级,-s 是汇总整个路径,-h 是人性化显示,真正控制层级的是 --max-depth=N(N 为整数)。
-
--max-depth=0:只显示目标目录自身总大小(等价于du -sh dir) -
--max-depth=1:显示目标目录及其**直接子项**(文件和一级子目录)各自的大小 -
--max-depth=2:再往下多展开一层(即子目录里的内容也计入,但只到第二层)
常用组合示例
假设当前在 /var/log 目录下,想快速查看各日志子目录占多少空间:
du -sh --max-depth=1 /var/log/
输出类似:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
4.2M /var/log/apt<br>12K /var/log/fsck<br>86M /var/log/journal<br>1.1G /var/log/syslog<br>1.2G /var/log/
注意最后一行是总计,前面每行是一级子项大小。如只需排除总计,可加 | head -n -1 过滤。
排序与筛选更直观
配合 sort 和 head 快速定位最大几个目录:
- 按大小倒序(最大的在前):
du -sh --max-depth=1 /path | sort -hr - 只看前5个最大的:
du -sh --max-depth=1 /path | sort -hr | head -5
注意:sort -h 支持人类可读单位(K/M/G)正确排序,老版本 sort 若不支持 -h,可用 du -sm --max-depth=1 输出 MB 整数再用 sort -nr。
避免常见误区
-
du -sh dir/*看似简洁,但会因 shell 展开忽略隐藏目录(以.开头),且遇到大量子项可能报“argument list too long” -
-s和--max-depth可共存,但-s作用于每个满足深度的路径项,不是全局汇总 - 权限不足的子目录会报错(如
Permission denied),加2>/dev/null可静默跳过










