(H1):
【2025终极指南】Linux du命令用法全解析:从入门到精通,一文搞懂磁盘空间管理

Meta描述(用于百度搜索结果摘要):
还在为Linux服务器磁盘空间告急而烦恼?本文是一份超详细的Linux du命令用法指南,涵盖基础查询、高级筛选、实战技巧及自动化脚本,从du -sh到du --max-depth,带你彻底掌握磁盘空间分析,成为运维高手!
文章正文:
引言:为什么每个Linux用户都必须精通du命令?
在网站建设与服务器运维的日常工作中,磁盘空间管理是一项永恒的主题,无论是服务器因日志文件爆满而宕机,还是开发环境因缓存堆积导致性能下降,其根源往往在于我们对磁盘空间的“无知”。
du(Disk Usage)命令,正是我们穿透文件系统迷雾,洞察磁盘空间占用的“火眼金睛”,它不像ls命令那样只告诉你文件的大小,而是能深入到目录的每一个角落,告诉你每个文件夹、每个子目录究竟“吃”掉了多少空间。
本文将作为你的终极实战手册,从最基础的用法讲起,逐步深入到复杂场景的应用,让你不仅能“用”好du,更能“玩”转du,轻松应对各种磁盘空间管理难题。

初识du命令:最核心、最常用的5种用法
对于初学者来说,掌握以下5种用法已经能解决80%的日常问题,我们直接通过实例来理解。
假设我们有一个项目目录结构如下:
/my-project/
├── src/
│ ├── app.js (5KB)
│ └── utils.js (3KB)
├── dist/
│ ├── bundle.js (1024KB)
│ └── assets/
│ └── image.png (500KB)
├── node_modules/ (假设占用50MB)
└── README.md (2KB)
用法1:查询当前目录总大小 ( -s )
- 命令:
du -s - 作用:
-s(summarize) 参数意为“汇总”,它只显示指定目录的总大小,而不会列出其下每个子目录的大小。 - 示例:
[user@server ~]$ du -s /my-project/ 54516 /my-project/
解读:
/my-project/目录及其所有子文件、子目录总共占用了54516字节(约53KB)。
用法2:以人类可读格式显示大小 ( -h )
- 命令:
du -h - 作用:
-h(human-readable) 参数是du的灵魂!它会自动将字节转换为KB、MB、GB等更易读的单位。 - 示例:
[user@server ~]$ du -h /my-project/ 4.0K /my-project/src/utils.js 8.0K /my-project/src/app.js 504K /my-project/dist/assets 1.5M /my-project/dist/bundle.js 1.5M /my-project/dist 51M /my-project/node_modules 8.0K /my-project/README.md 53M /my-project/ # 这是总大小
解读: 现在是不是一目了然了?
node_modules目录是最大的“元凶”,占了51MB。
(图片来源网络,侵删)
用法3:组合拳 -sh:查看指定目录总大小(推荐)
-
命令:
du -sh <目录名> -
作用: 这是最常用、最实用的组合。
-s负责汇总,-h负责易读,让你快速掌握任意目录的“体重”。 -
示例:
[user@server ~]$ du -sh /my-project/ 53M /my-project/ [user@server ~]$ du -sh /my-project/node_modules/ 51M /my-project/node_modules/
实战技巧: 在排查空间问题时,先用
du -sh /*查看根目录下各个顶级目录的大小,快速定位问题区域。
用法4:显示指定层级目录的大小 ( --max-depth )
-
命令:
du --max-depth=<层级数> -
作用: 当目录结构复杂时,我们只想看到前几级的目录大小,这个参数就派上用场了。
-
示例:
# 只显示当前目录和其直接子目录的大小 [user@server ~]$ du -h --max-depth=1 /my-project/ 53M /my-project/node_modules 1.5M /my-project/dist 16K /my-project/src 8.0K /my-project/README.md 55M /my-project/ # 总大小 # 只显示当前目录的大小(等同于 -s) [user@server ~]$ du -h --max-depth=0 /my-project/ 55M /my-project/
用法5:排除特定文件或目录 ( --exclude )
- 命令:
du --exclude=<模式> - 作用: 在分析空间时,我们常常想忽略某些无关紧要的目录,如
.git、node_modules或临时文件。 - 示例:
# 排除 node_modules 目录 [user@server ~]$ du -sh --exclude=node_modules /my-project/ 4.0K /my-project/src/utils.js 8.0K /my-project/src/app.js 504K /my-project/dist/assets 1.5M /my-project/dist/bundle.js 1.5M /my-project/dist 8.0K /my-project/README.md 1.5M /my-project/ # 总大小已变为1.5M
进阶用法:成为磁盘空间管理专家
掌握了基础用法,我们来看看如何更高效地工作。
找出最大的10个目录
这是运维排查的“必杀技”,结合 sort 和 head 命令,我们可以轻松定位空间占用大户。
# 查看当前目录下最大的10个子目录 du -sh * | sort -rh | head -n 10
du -sh *:列出当前所有目录的大小。sort -rh:-r表示降序,-h表示按人类可读的单位排序(非常重要!)。head -n 10:只显示前10行结果。
找出超过指定大小的文件
使用 find 命令配合 -size 参数,可以精准定位大文件。
# 查找 /var/log 目录下超过100MB的文件 find /var/log -type f -size +100M
-type f:只查找文件。-size +100M:查找大小大于100MB的文件,你也可以用-size -100M(小于)或-size 100M(等于)。
查看特定类型文件的总大小
查看一个项目中所有 .log 文件的总大小。
# 查找所有.log文件并用du求和
find . -name "*.log" -exec du -ch {} + | grep total$
find . -name "*.log":查找当前目录下所有.log文件。-exec du -ch {} +:对找到的每个文件执行du -ch命令。-c会显示一个总计。grep total$:从结果中过滤出包含total的行,这就是所有.log文件的总和。
实战场景:网站服务器磁盘告急怎么办?
假设你的网站服务器根分区 空间告急,df -h 显示已用95%,如何排查?
排查流程:
-
定位问题分区:
df -h # Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 47.5G 1.2G 95% /
确认是 分区满了。
-
扫描根目录下的“巨无霸”:
du -sh /* | sort -rh | head -n 5 # 输出可能如下: # 25G /var # 10G /usr # 5.2G /opt # ...
发现
/var目录是最大的“元凶”。 -
深挖
/var目录:cd /var du -sh * | sort -rh | head -n 5 # 输出可能如下: # 22G log # 1.8G cache # 800M lib # ...
找到
/var/log目录占用22G。 -
分析日志文件:
# 进入日志目录 cd /var/log # 查找最大的日志文件 du -sh * | sort -rh | head -n 5 # 输出可能如下: # 18G nginx/access.log # 2.1G nginx/error.log # ...
罪魁祸首找到了:
nginx/access.log文件过大。 -
解决方案:
- 方案A(治标): 对日志文件进行轮转(logrotate),这是标准做法。
- 方案B(治本): 检查网站配置,是否有异常爬虫或攻击导致日志量暴增,并配置日志自动清理策略。
通过这一套组合拳,你就能像侦探一样,精准定位并解决问题。
du命令速查表
为了方便你快速查阅,这里整理了一份du命令速查表。
| 功能/目标 | 命令 | 描述 |
|---|---|---|
| 查看当前目录总大小 | du -sh . |
最常用,显示当前目录总大小,人类可读格式。 |
| 查看指定目录大小 | du -sh /path/to/dir |
查看任意指定目录的总大小。 |
| 查看所有子目录大小 | du -h --max-depth=1 |
查看当前目录下所有一级子目录的大小。 |
| 找出最大的目录 | du -sh * \| sort -rh \| head -n 10 |
查看当前目录下最大的10个子目录。 |
| 排除特定目录 | du -sh --exclude=dir_name . |
在计算大小时,忽略名为 dir_name 的目录。 |
| 查找大文件 | find /path -type f -size +100M |
在指定路径下查找大于100MB的文件。 |
| 查看某类文件总大小 | find . -name "*.log" -exec du -ch {} + \| grep total$ |
计算所有.log文件的总占用空间。 |
du命令虽然看似简单,但组合使用后却能爆发出巨大的能量,它不仅是Linux运维人员的必备技能,对于网站开发者、运维工程师乃至任何需要与Linux打交道的用户来说,都是提升工作效率、保障系统稳定性的利器。
从今天起,不要再盲目地删除文件,拿起du这个工具,做到心中有“数”,让每一次磁盘空间管理都变得精准而高效,希望这份详尽的指南能真正帮助你解决问题,成为你Linux工具箱中的珍藏宝典。
