如何快速找出Linux系统中占用空间最大的目录
在日常Linux系统管理中,我们经常需要检查磁盘空间使用情况,找出哪些目录占用了大量空间。本文将介绍一个简单而强大的命令组合,帮助你快速定位空间占用大户。
核心命令
du -sh /* 2>/dev/null | sort -h
这个命令组合能快速扫描根目录下所有一级子目录的大小,并按人类可读格式排序显示。
命令分解
让我们分解这个命令,理解每个部分的作用:
-
du -sh /*
du
:disk usage,磁盘使用情况统计命令-s
:只显示每个参数的总计(summary)-h
:以人类可读格式显示大小(KB, MB, GB)/*
:匹配根目录下的所有一级子目录和文件
-
2>/dev/null
- 将错误信息重定向到/dev/null(即丢弃错误信息)
- 因为扫描某些系统目录可能需要root权限,这可以避免权限不足的报错干扰结果
-
| sort -h
- 管道将du的输出传递给sort命令
-h
:按人类可读的数字大小排序(能正确识别K、M、G等单位)
实际应用示例
执行该命令后,你会看到类似这样的输出:
12K /lost+found
1.2M /tmp
156M /etc
3.4G /var
15G /home
256G /data
这个结果清楚地显示了根目录下各一级子目录的大小排序,让你一眼就能看出哪个目录占用了最多空间。
进阶用法
1. 包含隐藏目录
du -sh /.* | grep -v "/\.\." | sort -h
2. 扫描特定目录
du -sh /home/* 2>/dev/null | sort -h
3. 显示前N大目录
du -sh /* 2>/dev/null | sort -hr | head -n 5
4. 排除特定文件系统
du -sh --exclude=/proc --exclude=/sys /* 2>/dev/null | sort -h
注意事项
-
权限问题:某些系统目录需要root权限才能完整扫描,可以使用sudo:
sudo du -sh /* 2>/dev/null | sort -h
-
执行时间:扫描大容量磁盘可能需要较长时间,可以考虑使用
-d
参数限制扫描深度:sudo du -h -d 1 / 2>/dev/null | sort -h
-
远程服务器:在远程服务器上使用时,建议搭配
timeout
命令防止长时间无响应:timeout 30s du -sh /* 2>/dev/null | sort -h
替代方案
如果你的系统不支持sort -h
(较老的Linux版本),可以使用:
du -sk /* 2>/dev/null | sort -n | awk '{if($1>1024**2) printf("%.1fG\t",$1/1024**2); else if($1>1024) printf("%.1fM\t",$1/1024); else printf("%.1fK\t",$1); print $2}'
这个复杂的命令会:
- 以KB为单位统计大小
- 数字排序
- 使用awk转换为易读格式
总结
du -sh /* 2>/dev/null | sort -h
是一个简单而强大的命令组合,能帮助你快速定位磁盘空间占用问题。记住这个命令,它将成为你Linux系统管理工具箱中的重要工具之一。
掌握这个技巧后,你可以轻松:
- 找出哪个目录占用了最多空间
- 定位异常增长的文件目录
- 定期监控系统磁盘使用情况
- 为磁盘清理和扩容提供数据支持