菜鸟科技网

du命令用法有哪些核心参数?

(H1):

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

du命令用法有哪些核心参数?-图1
(图片来源网络,侵删)

Meta描述(用于百度搜索结果摘要):

还在为Linux服务器磁盘空间告急而烦恼?本文是一份超详细的Linux du命令用法指南,涵盖基础查询、高级筛选、实战技巧及自动化脚本,从du -shdu --max-depth,带你彻底掌握磁盘空间分析,成为运维高手!


文章正文:

引言:为什么每个Linux用户都必须精通du命令?

在网站建设与服务器运维的日常工作中,磁盘空间管理是一项永恒的主题,无论是服务器因日志文件爆满而宕机,还是开发环境因缓存堆积导致性能下降,其根源往往在于我们对磁盘空间的“无知”。

du(Disk Usage)命令,正是我们穿透文件系统迷雾,洞察磁盘空间占用的“火眼金睛”,它不像ls命令那样只告诉你文件的大小,而是能深入到目录的每一个角落,告诉你每个文件夹、每个子目录究竟“吃”掉了多少空间。

本文将作为你的终极实战手册,从最基础的用法讲起,逐步深入到复杂场景的应用,让你不仅能“用”好du,更能“玩”转du,轻松应对各种磁盘空间管理难题。

du命令用法有哪些核心参数?-图2
(图片来源网络,侵删)

初识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。

    du命令用法有哪些核心参数?-图3
    (图片来源网络,侵删)

用法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=<模式>
  • 作用: 在分析空间时,我们常常想忽略某些无关紧要的目录,如 .gitnode_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个目录

这是运维排查的“必杀技”,结合 sorthead 命令,我们可以轻松定位空间占用大户。

# 查看当前目录下最大的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%,如何排查?

排查流程:

  1. 定位问题分区:

    df -h
    # Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda1        50G   47.5G  1.2G  95% /

    确认是 分区满了。

  2. 扫描根目录下的“巨无霸”:

    du -sh /* | sort -rh | head -n 5
    # 输出可能如下:
    # 25G    /var
    # 10G    /usr
    # 5.2G   /opt
    # ...

    发现 /var 目录是最大的“元凶”。

  3. 深挖 /var 目录:

    cd /var
    du -sh * | sort -rh | head -n 5
    # 输出可能如下:
    # 22G    log
    # 1.8G   cache
    # 800M   lib
    # ...

    找到 /var/log 目录占用22G。

  4. 分析日志文件:

    # 进入日志目录
    cd /var/log
    # 查找最大的日志文件
    du -sh * | sort -rh | head -n 5
    # 输出可能如下:
    # 18G    nginx/access.log
    # 2.1G    nginx/error.log
    # ...

    罪魁祸首找到了:nginx/access.log 文件过大。

  5. 解决方案:

    • 方案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工具箱中的珍藏宝典。

分享:
扫描分享到社交APP
上一篇
下一篇