Linux du 命令(长文解析)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 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 结合 sortawk:快速定位大文件

若需找出占用空间最大的前 N 个文件或目录,可将 du 的输出与 sortawk 等工具结合。
示例

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:清理磁盘空间

场景:系统提示磁盘空间不足,需快速定位占用最大的目录。
步骤

  1. 全局统计:du -sh /* 查看根目录下各主要目录的大小。
  2. 精准定位:若发现 /var 占用异常,执行 du -h --max-depth=1 /var,进一步排查子目录。
  3. 清理操作:删除无用日志或临时文件,如 rm -rf /var/log/old_logs

4.2 案例 2:监控项目目录的存储结构

场景:开发者需分析项目目录的存储分布,优化代码仓库结构。
步骤

  1. 统计总大小:du -sh project/
  2. 分析细节:du -ah project/ | sort -hr | less,逐行查看占用较大的文件(如大体积的依赖库或日志文件)。
  3. 优化建议:将非代码文件(如图片、日志)迁移至外部存储或版本控制外的目录。

五、常见问题与进阶技巧

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 命令是开发者管理磁盘空间的必备工具,其简洁的语法与丰富的参数组合,能够满足从基础统计到复杂分析的多样化需求。通过结合 sortgrep 等命令,开发者还能进一步扩展其功能,实现高效的问题诊断与优化。掌握 du 的核心用法,不仅能提升日常工作的效率,更能培养对系统资源的全局把控能力。建议读者在实际操作中多尝试不同参数的组合,并针对具体场景设计统计策略,逐步将这一工具内化为开发与运维的得力助手。


通过本文的学习,读者应能熟练运用 Linux du 命令完成磁盘空间分析,并灵活结合其他工具解决实际问题。实践是掌握技术的关键,建议在虚拟环境或本地测试环境中多加练习,逐步深化理解。

最新发布