文章目录
- Linux du 命令终极指南:从基础到精通
- du 命令简介
- 常用参数详解
- 常见用法示例
- 查看当前目录总大小
- 查看当前目录及其子目录占用空间
- 只显示当前目录总占用空间
- 查看目录下每个文件和子目录的大小
- 查看某目录深度为 1 的大小分布
- 查看某目录并排除日志文件
- 查看多个目录的总大小
- 统计单个文件的磁盘占用
- 进阶技巧与常见问题
- 文件逻辑大小 vs 磁盘占用
- 符号链接处理
- 快速定位大文件
- 自动化清理实战
- 定期清理旧日志
- 清理空目录
- du 和 df 的区别
- 实战:查找占用空间最多的目录
- 总结
Linux du 命令终极指南:从基础到精通
在日常的 Linux 运维或开发工作中,我们经常需要查看某个目录或文件所占用的磁盘空间,以便进行空间管理、故障排查或优化存储结构。而 du
(Disk Usage)命令就是专门用于显示磁盘使用情况的利器。
本文将为你全面讲解 du
命令的使用方法、常用参数及典型示例,帮助你快速上手并灵活运用。
du 命令简介
du
(disk usage)命令用于显示文件或目录所占用的磁盘空间。默认情况下,它会递归地统计每个子目录的大小,并以字节为单位输出。
du [选项] [文件或目录]
常用参数详解
参数 | 含义 |
---|---|
-h | 以人类可读的方式显示(如 KB、MB、GB) |
-s | 仅显示总计(summary),不递归显示子目录 |
-a | 显示所有文件和目录的大小 |
-c | 最后增加一行显示总计(总和) |
-d N | 显示目录深度为 N 的子目录大小(适用于 GNU 版本) |
--max-depth=N | 功能与 -d 相同(更具可读性) |
--exclude=PATTERN | 排除匹配模式的文件或目录 |
-x | 只统计当前文件系统的使用情况,忽略挂载点 |
--time | 显示目录的最后修改时间 |
--apparent-size | 显示文件逻辑大小(非磁盘占用) |
-L | 统计符号链接指向的目标大小 |
常见用法示例
查看当前目录总大小
du -sh
输出:
12G .
查看当前目录及其子目录占用空间
du -h
输出示例:
4.0K ./cache
2.5G ./projects/code
8.2G ./projects
只显示当前目录总占用空间
du -sh
输出示例:
100M .
查看目录下每个文件和子目录的大小
du -ah
查看某目录深度为 1 的大小分布
du -h --max-depth=1
或
du -h -d 1
适用于按模块查看空间占用情况,非常适合查找“哪个目录最大”。
查看某目录并排除日志文件
du -h --exclude="*.log"
查看多个目录的总大小
du -ch dir1 dir2
输出中会显示每个目录的大小,最后一行是总计(total)。
统计单个文件的磁盘占用
du -h filename
注意:
du
显示的是文件实际占用磁盘的空间,而不是逻辑文件大小(逻辑大小可通过ls -l
查看)。
进阶技巧与常见问题
文件逻辑大小 vs 磁盘占用
- 逻辑大小:文件实际内容长度(
ls -l
显示的值)。 - 磁盘占用:文件占用的块空间(
du
默认值)。
示例:
echo "1" > small.txt # 创建 1 字节文件
ls -l small.txt # 输出:1 (逻辑大小)
du -h small.txt # 输出:4.0K(块大小)
du --apparent-size -h small.txt # 输出:1
符号链接处理
- 默认行为:统计链接指向的文件大小。
- 仅统计链接自身:去掉
-L
参数。
du -sh /usr/bin/python # 统计 Python 可执行文件大小
du -shL /usr/bin/python # 同上(显式解除引用)
快速定位大文件
结合 find
和 sort
:
find /home -type f -size +500M -exec du -h {} + | sort -rh
输出:
3.5G /home/user/videos/movie.mp4
2.9G /home/user/backup.tar.gz
自动化清理实战
定期清理旧日志
脚本 /scripts/clean_logs.sh
:
#!/bin/bash
# 删除 /var/log 下 30 天前的日志
find /var/log -name "*.log" -mtime +30 -exec rm -f {} \;
添加定时任务:
crontab -e
# 每天凌晨 2 点执行
0 2 * * * /scripts/clean_logs.sh
清理空目录
删除 7 天内未被访问的空目录:
find /data/tmp -type d -empty -atime +7 -delete
du 和 df 的区别
命令 | 功能 | 使用层级 |
---|---|---|
du | 显示文件/目录占用的磁盘空间 | 具体到目录或文件 |
df | 显示整个文件系统的磁盘使用情况 | 文件系统级别 |
因此,当你想分析“哪个目录占了太多空间”时,用 du
;当你想知道“磁盘还剩多少空间”时,用 df
。
实战:查找占用空间最多的目录
结合 sort
和 du
使用:
du -h --max-depth=1 | sort -hr | head -n 10
这条命令将列出当前目录下占用空间最多的前 10 个目录,非常适合快速分析磁盘空间瓶颈。
总结
du
是一个功能强大又轻量的命令,掌握其用法可以帮助我们快速定位磁盘空间的使用情况,是每个 Linux 用户的必备技能之一。
建议你在日常工作中,多尝试将 du
与 sort
、head
、find
等命令组合使用,打造属于自己的空间分析工具链。