du
(Disk Usage) 命令详解du
命令是 Linux 系统中一个非常实用的工具,用于估算和显示文件或目录所占用的磁盘空间大小。它通过递归地遍历目录结构来统计空间使用情况。
bashdu [选项] [文件或目录...]
文件或目录
,则默认统计当前所在目录。选项 | 说明 |
---|---|
-h | 易读格式 (Human-readable):以 KB, MB, GB 等更易于理解的单位显示大小。 |
-a | 显示所有 (All):不仅显示目录的总大小,也显示目录下每个文件的大小。 |
-s | 总计 (Summarize):只显示指定目录或文件的总大小,不显示其内部子目录或文件的详情。 |
-d N , --max-depth=N | 限制深度 (Max Depth):只统计到指定的目录层级深度 N。-d 0 等同于 -s ,-d 1 表示只看当前目录下一层。 |
-c | 总和 (Total):在列出所有项目的大小后,在最后一行额外显示一个所有项目的总和。 |
-k | 以 KB (1024 bytes) 为单位显示。 |
-m | 以 MB (1024*1024 bytes) 为单位显示。 |
--exclude=PATTERN | 排除:在统计时排除匹配指定模式的文件或目录。 |
-L | 跟踪符号链接 (Dereference):统计符号链接指向的源文件/目录的大小,而不是链接本身的大小。 |
du -ahd 1
及其排序这是您发现非常有用的组合,用于查看当前目录下第一层的所有文件和子目录各自的大小,并包含当前目录的总大小。
bashdu -ahd 1
-a
: 显示所有项,包括普通文件,而不仅仅是目录。-h
: 使用易读的单位 (K, M, G)。-d 1
: 深度限制为 1,只看当前目录这一层的内容。bashdu -ahd 1 | sort -rh
|
: 这是管道符,将 du
命令的输出传递给 sort
命令进行处理。sort
: Linux 的排序命令。-r
: 反向 (Reverse) 排序,即从大到小。-h
: 易读数字 (Human-numeric-sort) 排序,能够正确处理 K, M, G 等单位,而不是按纯粹的数字或字母顺序。效果:列出当前目录下第一层的所有文件和子目录,并按照它们占用的磁盘空间从大到小排列,最后一行通常是当前目录的总大小 (.
)。
bashdu -ahd 1 | sort -k 2
|
: 管道符,将 du
输出传给 sort
。sort
: 排序命令。-k 2
: 按第 2 列 (Key 2) 排序。du
命令输出的格式通常是 大小 文件名/目录名
,所以第 2 列就是名称。默认按字母顺序排序。效果:列出当前目录下第一层的所有文件和子目录,并按照它们的名称字母顺序排列。
查看当前目录总大小(最常用):
bashdu -sh
# -s: 只显示总和, -h: 易读格式
# . (点) 代表当前目录,可以省略,也可以指定其他目录路径
du -sh /path/to/directory
查看指定目录下所有文件和子目录的大小(递归):
bashdu -ah /path/to/directory
找出当前目录下占用空间最大的前 10 个文件或目录:
bashdu -ah . | sort -rh | head -n 10
# head -n 10: 只显示排序后的前 10 行
查看当前目录,但不包括某个子目录(例如 node_modules
):
bashdu -h --exclude='node_modules' --max-depth=1
统计多个指定目录的总大小:
bashdu -sh dir1 dir2 dir3
统计并显示总和:
bashdu -chd 1
# -c 会在最后加上一行 'total' 显示总计大小
du
可能无法统计这些目录,并可能显示错误信息。使用 sudo du ...
可以获取权限,但需谨慎。du
默认会统计隐藏文件(以 .
开头的文件和目录)。du
vs df
:du
关注的是文件/目录实际占用的磁盘块空间总和,而 df
(Disk Free) 显示的是整个文件系统(分区)级别的使用情况和剩余空间。它们统计的维度不同,有时结果可能看起来不一致(例如,有文件被删除但进程仍占用句柄时)。du
是进行磁盘空间分析和管理不可或缺的命令,掌握其常用选项和组合用法能大大提高效率。