Linux du命令详解
Linux du 命令详解 🐧📊📁
学习目标 🎯
- 理解
du命令的基本功能与使用场景。 - 掌握查看文件和目录占用磁盘空间的多种方式(如按大小排序、汇总统计等)。
- 了解不同 Linux 发行版(如 Ubuntu、CentOS、EulerOS)在默认行为和权限控制上的差异。
- 能结合实际开发、运维、脚本编写等场景灵活运用
du。 - 熟悉常见错误及优化建议,避免误操作导致资源浪费或系统性能下降。
核心重点 ✅
| 类别 | 内容 |
|---|---|
| 命令含义 | disk usage 查看磁盘使用情况 |
| 基本语法 | du [选项] [路径] |
| 核心功能 | - 统计目录/文件占用空间 - 按大小排序查找“大文件” |
| 常用参数 | -s, -h, -a, -d, -k, -m, --max-depth |
| 权限控制 | 受限于文件系统权限,普通用户不能访问 /root |
| 跨平台差异 | 不同发行版对单位显示、深度限制略有差异 |
详细讲解 💡
1. 基本介绍 📘
📌 功能:
du 是 disk usage 的缩写,用于统计指定路径下文件和目录所占用的磁盘空间。它是 Linux 中最常用的磁盘分析工具之一,尤其适合用于排查“哪个目录吃掉了硬盘”。
📌 语法:
du [选项] [路径]
📌 示例:
du -sh /home/ubuntu/
👀 输出示例:
3.2G /home/ubuntu/
2. 常用参数详解 🛠️
✅ -s:汇总总空间(summary)
只显示总空间,不列出子目录:
du -s /var/log/
👀 应用:快速查看某个目录整体大小。
✅ -h:人类可读格式(human-readable)
自动将字节转为 KB/MB/GB:
du -sh /etc/
👀 输出示例:
4.0M /etc/
✅ -a:显示所有文件(all)
不仅显示目录,也显示每个文件的大小:
du -ah /tmp/
👀 应用:精确找出哪些文件占用了空间。
✅ -d N 或 --max-depth=N:设置最大显示层级
例如只显示一级子目录大小:
du -sh --max-depth=1 /home/
👀 输出示例:
3.2G /home/ubuntu/
4.0K /home/test/
👀 应用:快速定位“大目录”,进行进一步分析。
✅ -k / -m:以 KB/MB 为单位输出
du -sk /var/log/
👀 应用:脚本中处理数值时更方便。
3. 实际应用场景 🏢
🧱 场景一:排查服务器磁盘爆满原因
du -sh --max-depth=1 / | sort -hr
👀 输出示例:
15G /var
8.0G /usr
3.0G /home
👀 应用:快速找到占用最多空间的目录,进一步深入分析。
🧱 场景二:定期检查日志目录大小
#!/bin/bash
LOG_DIR="/var/log/app"
SIZE=$(du -sm $LOG_DIR | awk '{print $1}')
if [ $SIZE -gt 10 ]; then
echo "警告:$LOG_DIR 占用超过 10MB!"
fi
👀 应用:自动化监控日志增长,防止磁盘溢出。
🧱 场景三:查找当前目录下的大文件
du -ah . | sort -hr | head -n 20
👀 输出示例:
1.2G ./video.mp4
500M ./database.sql
👀 应用:清理无用的大文件,释放空间。
🧱 场景四:配合 find 删除旧文件并统计空间变化
find /tmp -name "*.log" -mtime +7 -exec rm -f {} \;
du -sh /tmp/
👀 应用:删除旧临时文件后查看剩余空间。
4. 不同 Linux 发行版差异对比 🖥️🐧
| 对比项 | Ubuntu | CentOS | EulerOS |
|---|---|---|---|
| 默认 shell | bash | bash | bash |
是否支持 --max-depth |
✅ | ✅ | ✅ |
| 默认单位 | 字节 | 字节 | 字节 |
| root 用户权限限制 | sudo 制度严格 | su 更常见 | 政企级安全强化 |
| SELinux/AppArmor 影响 | ❌ | ✅ | ✅ |
⚠️ 小贴士:某些政企级系统(如 EulerOS)可能因 SELinux 限制无法访问特定目录,需调整策略或使用提权。
5. du vs df 对比 🤔
| 特性 | du |
df |
|---|---|---|
| 查看对象 | 文件/目录 | 文件系统整体 |
| 显示内容 | 各目录/文件大小 | 分区挂载点使用率 |
| 是否受软链接影响 | ✅ | ❌ |
| 使用建议 | 查找具体目录/文件大小 | 查看整个磁盘分区使用情况 |
6. 常见问题与解决方案 ❗
❌ 错误 1:权限不足无法访问目录
du: cannot read directory '/root': Permission denied
解决:
sudo du -sh /root/
❌ 错误 2:输出刷屏太多信息
解决:加 -s 或 --max-depth=1 控制输出层级。
❌ 错误 3:结果不准确(如隐藏文件未显示)
解决:确保使用 -a 显示所有文件。
7. 小技巧 & 高效用法 🚀
- Tab 补全:输入部分路径后按
Tab键自动补全。 - 历史记录:使用上下箭头键查看之前执行过的
du命令。 - 排序查看最大目录:
du -sh */ | sort -hr
👀 应用:快速查看当前目录下哪些子目录最大。
- 配合变量使用(脚本中):
DIR="/var/log/"
SIZE=$(du -sh $DIR | awk '{print $1}')
echo "$DIR 占用空间为:$SIZE"
8. 实战练习题 🧪
🔍 练习 1:
请写出以下命令的作用:
du -sh --max-depth=2 /home/ubuntu/
📝 答案:
显示 /home/ubuntu/ 下所有二级目录的大小,以易读格式展示。
🔍 练习 2:
编写一个脚本 check_disk_usage.sh,实现以下功能:
- 接收一个参数:要检查的目录路径
- 显示该目录及其一级子目录的大小
- 按大小排序显示前 10 条结果
📝 答案:
#!/bin/bash
DIR=$1
if [ -z "$DIR" ]; then
echo "Usage: $0 <目录路径>"
exit 1
fi
echo "正在分析目录:$DIR"
du -sh --max-depth=1 $DIR | sort -hr | head -n 10
使用方法:
chmod +x check_disk_usage.sh
./check_disk_usage.sh /var/
总结 📋
du 是 Linux 中最基础但极其强大的命令之一,尤其在查看磁盘使用情况时不可或缺。它不仅适用于日常运维、程序调试、日志分析等多个场景,还广泛用于自动化脚本中。
掌握 du 的各种参数组合,理解不同发行版之间的权限与安全机制差异,并结合实际场景灵活运用,可以显著提升你的工作效率和系统掌控能力。
建议多与 df, find, ls, rm, tar, scp, rsync 等命令配合使用,形成完整的文件管理与磁盘分析流程。

浙公网安备 33010602011771号