Linux du 命令(长文解析)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
在 Linux 系统的日常使用和开发过程中,磁盘空间管理是一项基础但重要的任务。无论是排查磁盘占用异常、优化项目存储结构,还是监控系统资源状态,开发者都需要一个高效且直观的工具来快速分析文件和目录的大小。Linux du 命令(Disk Usage)正是为此而生的利器。它能够递归统计指定文件或目录的磁盘使用量,并以清晰的方式呈现结果。本文将从基础用法到高级技巧,结合具体案例,深入讲解这一工具的核心功能与应用场景,帮助开发者提升工作效率。
一、du 命令的基础用法:快速入门
1.1 基本语法与核心功能
du
命令的全称是 disk usage,其核心功能是统计文件或目录的磁盘占用空间。它的基本语法如下:
du [选项] [目标路径]
- 默认行为:当直接执行
du 目录名
时,命令会递归遍历该目录下的所有子目录和文件,并逐行输出每个文件或子目录的占用空间(以 块 为单位,默认块大小为 1 KB)。 - 示例:
du /var/log
执行结果可能类似:
4 /var/log/syslog 8 /var/log/apache2 12 /var/log
这表明
/var/log
目录本身占用 12 KB,其中syslog
占用 4 KB,apache2
占用 8 KB。
1.2 常见误解:块与实际字节的差异
需要注意的是,du
默认以 块(block) 为单位计算空间,而每个块的大小默认为 1 KB。因此,若文件实际大小为 1.5 KB,du
可能会显示为 2 KB(向上取整)。
比喻:这就像用标准尺子测量物体长度,即使物体实际长度不足一格,也会按完整格数计算。
二、常用参数详解:提升统计精度与可读性
2.1 -h
或 --human-readable
:人类友好的单位显示
直接输出的块数可能难以直观理解。添加 -h
参数后,结果会以 KB、MB、GB 等更易读的单位显示。
示例:
du -h /var/log
输出可能为:
4.0K /var/log/syslog
8.0K /var/log/apache2
12K /var/log
2.2 -s
或 --summarize
:仅显示总和
若只需知道目标路径的总占用空间,而非逐层统计,可使用 -s
参数。
示例:
du -sh /var/log
输出可能为:
12K /var/log
技巧:组合 -sh
是开发者常用的快速统计总空间的快捷方式。
2.3 -a
或 --all
:统计所有文件而非仅目录
默认情况下,du
仅显示目录的统计结果。若需包含普通文件的大小,需添加 -a
参数。
示例:
du -ah /home/user/project
此命令会列出该目录下所有文件和子目录的大小。
2.4 -c
或 --total
:显示总计与分项
-c
参数可在末尾添加一行总计,便于对比各目录或文件的占比。
示例:
du -h --max-depth=1 /var | sort -n | tail -3
此命令会显示 /var
下一级目录的大小,并按数值排序后输出最后 3 行(可能包含总计)。
三、高级用法:结合其他命令与参数优化分析
3.1 --max-depth=N
:控制递归层级
通过 --max-depth=N
参数,可限制 du
统计的递归层级,避免深入过深的目录结构。
示例:
du -h --max-depth=1 /var
此命令会统计 /var
目录下直接子目录的大小,但不会显示子目录内的更深层级。
3.2 结合 sort
和 awk
:快速定位大文件
若需找出占用空间最大的前 N 个文件或目录,可将 du
的输出与 sort
、awk
等工具结合。
示例:
du -ah /home/user | sort -hr | head -n 10
此命令会列出用户主目录下占用空间最大的前 10 个文件或目录,并按从大到小排序。
3.3 使用 -d
参数替代 --max-depth
-d
参数与 --max-depth
功能相同,但语法略有差异。例如,du -d 1
等同于 du --max-depth=1
。
四、实际案例:如何用 du 命令解决常见问题
4.1 案例 1:清理磁盘空间
场景:系统提示磁盘空间不足,需快速定位占用最大的目录。
步骤:
- 全局统计:
du -sh /*
查看根目录下各主要目录的大小。 - 精准定位:若发现
/var
占用异常,执行du -h --max-depth=1 /var
,进一步排查子目录。 - 清理操作:删除无用日志或临时文件,如
rm -rf /var/log/old_logs
。
4.2 案例 2:监控项目目录的存储结构
场景:开发者需分析项目目录的存储分布,优化代码仓库结构。
步骤:
- 统计总大小:
du -sh project/
。 - 分析细节:
du -ah project/ | sort -hr | less
,逐行查看占用较大的文件(如大体积的依赖库或日志文件)。 - 优化建议:将非代码文件(如图片、日志)迁移至外部存储或版本控制外的目录。
五、常见问题与进阶技巧
5.1 问题:du 统计结果与 ls -l
显示的大小不一致
原因:ls -l
显示的是文件实际大小,而 du
统计的是磁盘分配的块数(可能因块大小导致差异)。
解决:使用 -b
参数以字节为单位统计:du -b
。
5.2 技巧:排除特定文件或目录
若需排除某些文件(如 .git
或缓存目录),可结合 find
命令过滤:
du -sh $(find /path -maxdepth 1 -not -path '*/.git*')
5.3 性能优化:对大目录使用 --apparent-size
对于包含大量硬链接或稀疏文件的目录,--apparent-size
可更准确反映实际数据量而非磁盘分配量。
六、结论
Linux du 命令是开发者管理磁盘空间的必备工具,其简洁的语法与丰富的参数组合,能够满足从基础统计到复杂分析的多样化需求。通过结合 sort
、grep
等命令,开发者还能进一步扩展其功能,实现高效的问题诊断与优化。掌握 du
的核心用法,不仅能提升日常工作的效率,更能培养对系统资源的全局把控能力。建议读者在实际操作中多尝试不同参数的组合,并针对具体场景设计统计策略,逐步将这一工具内化为开发与运维的得力助手。
通过本文的学习,读者应能熟练运用 Linux du 命令完成磁盘空间分析,并灵活结合其他工具解决实际问题。实践是掌握技术的关键,建议在虚拟环境或本地测试环境中多加练习,逐步深化理解。