Linux du命令详解

Linux du 命令详解 🐧📊📁


学习目标 🎯

  • 理解 du 命令的基本功能与使用场景。
  • 掌握查看文件和目录占用磁盘空间的多种方式(如按大小排序、汇总统计等)。
  • 了解不同 Linux 发行版(如 Ubuntu、CentOS、EulerOS)在默认行为和权限控制上的差异。
  • 能结合实际开发、运维、脚本编写等场景灵活运用 du
  • 熟悉常见错误及优化建议,避免误操作导致资源浪费或系统性能下降。

核心重点 ✅

类别 内容
命令含义 disk usage 查看磁盘使用情况
基本语法 du [选项] [路径]
核心功能 - 统计目录/文件占用空间
- 按大小排序查找“大文件”
常用参数 -s, -h, -a, -d, -k, -m, --max-depth
权限控制 受限于文件系统权限,普通用户不能访问 /root
跨平台差异 不同发行版对单位显示、深度限制略有差异

详细讲解 💡

1. 基本介绍 📘

📌 功能:

dudisk 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 等命令配合使用,形成完整的文件管理与磁盘分析流程。

posted @ 2025-06-19 21:50  红尘过客2022  阅读(356)  评论(0)    收藏  举报