du 磁盘占用空间命令

发布时间: 更新时间: 总字数:1134 阅读时间:3m 作者: IP上海 分享 网址

du (Disk Usage) 是 Linux 系统中一个非常常用且重要的命令,用于查看文件或目录占用的磁盘空间大小。它会递归地遍历目录,计算每个文件和子目录的大小。

基本语法

du [选项] [文件或目录名称]
  • 如果不指定目录,默认分析当前目录。

最常用的选项 (Options)

选项 含义 说明
-h Human-readable 以 K, M, G 为单位显示大小(人类可读),最常用。
-s Summary 仅显示总计,不列出子目录的详细信息。
-a All 列出所有文件和目录的大小(默认只列出目录)。
-c Total 在最后一行显示所有查询结果的总和。
-d N Depth 指定递归的深度(例如 -d 1 只看当前层级子目录)。同 --max-depth=N
--exclude Exclude 排除指定的文件或目录。

实战场景与示例

场景一:查看当前目录下所有子目录的大小

这是最直接的用法,但如果不加 -h,显示的数字是以 K 为单位的块大小,不直观。

du -h

场景二:查看某个具体目录的总大小 (最常用 ⭐)

如果你只想知道 var/log 文件夹一共占用了多少空间,而不关心里面每个子文件夹的大小:

# -s 代表汇总(summary),-h 代表人类可读格式
du -sh /var/log

输出示例: 2.5G /var/log

场景三:查看当前目录下,一级子目录的大小

当你发现硬盘满了,想知道是当前哪个文件夹占用了空间,但不想看太深层级时:

# --max-depth=1 表示只看一层
du -h --max-depth=1
# 或者简写为
du -h -d 1

场景四:查看所有文件的大小(包括隐藏文件)

默认 du 只显示目录大小,加上 -a 可以显示文件大小。

du -ah

场景五:查找大文件并排序 (高阶用法 🚀)

配合 sort 命令,找出当前目录下占用空间最大的前 5 个文件夹或文件:

# du -sh * : 计算当前目录下每个项目的大小
# sort -rh : r表示逆序(大到小),h表示配合du的human-readable格式排序
# head -5  : 只看前5个

du -sh * | sort -rh | head -5

场景六:排除特定文件

比如计算大小时忽略 .log 文件:

du -sh --exclude="*.log" /var/www

查找最占空间的 10 个文件

du -a /data | sort -n -r | head -n 10
或
cd /data
du -hsx * | sort -rh | head -10
或
du -ah . | sort -n -r | head -n 10
  • du : 计算出单个文件或者文件夹的磁盘空间占用
  • sort : 对文件行或者标准输出行记录排序后输出
  • head : 输出文件内容的前面部分

查找最大占用空间的目录

du -h --max-depth=1 /data/
du -sh .
du -h -d 1
du -h -d 1 | sort -hr | head -3
  • --max-depth: 检测深度

du 和 df 的区别 (面试/常识点)

很多新手容易混淆这两个命令:

  • du (Disk Usage)

    • 关注点:文件和目录。
    • 原理:通过遍历文件系统,累加文件大小。
    • 特点:比较慢(文件多时),能看到具体是谁占用了空间。
  • df (Disk Free)

    • 关注点:文件系统(磁盘分区)。
    • 原理:直接读取文件系统的超级块信息。
    • 特点:速度极快,用于查看整个磁盘还剩多少空间。

注意:有时候 df 显示磁盘满了,但 du 算出来的文件总和却没满。 原因:通常是因为有已删除但在内存中仍被进程占用的文件du 找不到它们(因为文件名没了),但 df 知道空间仍被占用。解决方法是重启相关进程或系统。

总结

日常使用只需要记住一个万能组合:

  • du -sh <目录名>/du -sh * 看总大小
  • du -h -d 1 看各子目录分布
  • du -lh
本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics