Linux 磁盘查看命令详解:df 与 du
在 Linux 系统运维中,查看磁盘空间、定位大文件是高频操作。df 和 du 是最核心的两个磁盘相关命令,二者功能相近但用途截然不同。本文从作用、语法、常用参数、实战场景、区别对比等方面详细讲解,方便日常运维与问题排查。
一、df 命令:查看文件系统磁盘使用情况
1. 命令含义
df = disk free ,用于查看整个磁盘分区/文件系统 的总容量、已用空间、剩余空间、挂载点等信息。
它读取的是文件系统超级块(superblock)中的元数据,因此速度极快,适合快速判断分区是否爆满。
2. 基本语法
bash
df [选项] [文件/目录]
不指定路径时,默认显示所有已挂载文件系统。若指定文件或目录,则显示该路径所在分区的使用情况。
3. 常用核心参数
| 参数 | 说明 |
|---|---|
-h |
以人类可读格式显示(KB/MB/GB),最常用 |
-T |
显示文件系统类型(ext4/xfs/tmpfs 等) |
-i |
查看 inode 使用情况(文件数量占用) |
-a |
显示所有文件系统,包括伪文件系统(proc、tmpfs) |
-t 类型 |
只显示指定类型的文件系统 |
-x 类型 |
排除指定类型的文件系统 |
4. 常用示例
(1)查看所有分区空间(推荐)
bash
df -h
输出字段说明:
Filesystem:设备或分区名Size:总容量Used:已使用空间Avail:可用空间Use%:使用率Mounted on:挂载点
(2)查看文件系统类型
bash
df -Th
-T显示类型,-h人类可读,两者结合非常实用。
(3)查看指定目录所在分区
bash
df -h /home
(4)查看 inode 占用(解决"磁盘未满但无法创建文件"问题)
bash
df -i
当 Use% 达到 100% 时,即使还有空间也无法新建文件。
(5)过滤掉临时文件系统(让输出更干净)
bash
df -h -x tmpfs -x devtmpfs
二、du 命令:查看文件/目录磁盘占用大小
1. 命令含义
du = disk usage ,用于统计指定目录或文件 实际占用的磁盘空间(以块为单位计算)。
它会递归遍历目录下所有文件,统计精确,但速度比 df 慢,尤其在大目录下耗时明显。
2. 基本语法
bash
du [选项] [文件/目录]
不指定路径时,默认统计当前目录。
3. 常用核心参数
| 参数 | 说明 |
|---|---|
-h |
人类可读格式显示 |
-s |
只显示总计大小,不展开子目录 |
-a |
显示所有文件和目录的大小(默认仅显示目录) |
-d N / --max-depth=N |
限制递归深度为 N 级(-d 1 仅看一级子目录) |
-c |
最后显示总计大小 |
--exclude=PATTERN |
排除匹配的文件或目录(支持通配符) |
4. 常用示例
(1)查看当前目录总大小
bash
du -sh .
(2)查看指定目录总大小
bash
du -sh /var/log
(3)查看一级子目录大小(快速定位大目录)
bash
du -h --max-depth=1 /
或简写为(GNU 版本支持):
bash
du -hd1 /
(4)显示目录下所有文件大小
bash
du -ah /etc
(5)排除某些文件后统计
bash
du -sh --exclude="*.log" /var
也可排除多个模式:
bash
du -sh --exclude="*.log" --exclude="*.tmp" /var
(6)统计多个目录并显示总和
bash
du -ch /home /root /usr
末尾会自动输出一行总计。
三、df 与 du 的核心区别
| 对比项 | df | du |
|---|---|---|
| 统计对象 | 磁盘分区/文件系统 | 目录/单个文件 |
| 统计速度 | 快(读取超级块元数据) | 慢(递归遍历所有文件) |
| 统计范围 | 全局空间(整个分区) | 具体路径(按需统计) |
| 数据来源 | 文件系统元数据 | 实际文件占用的磁盘块 |
| 典型用途 | 查看分区是否满 | 定位大文件、大目录 |
常见现象:df 和 du 结果不一致
-
表现 :
df显示磁盘已满,但du统计的总和远小于分区容量 -
原因 :某个文件已被
rm删除,但仍然被某个运行的进程打开(未释放句柄),导致空间未真正释放 -
排查方法 :
bashlsof | grep deleted找到占用进程的 PID,然后重启该进程或直接
kill -9 PID,空间即可释放 -
预防提示 :大文件建议使用
> /path/to/file清空而非直接rm
四、实战场景:快速定位磁盘爆满原因
- 先看整体 :用
df -h查看哪个分区使用率接近 100% - 进入分区挂载点 :例如
cd /var - 逐层定位大目录 :用
du -h --max-depth=1查看一级子目录大小 - 深入最大目录:重复上一步,直到找到可疑目录
- 找出 Top 10 大文件 :使用
find+sort组合
示例命令链:
bash
df -h
cd /var
du -h --max-depth=1
du -ah /var/log | sort -hr | head -10
⚠️ 注意:
sort -hr中的-h参数在部分旧版 sort 中不支持,若报错可改用sort -rn(按数字倒序)。
更稳健的 Top 10 大文件查找:
bash
find /var/log -type f -exec du -h {} + 2>/dev/null | sort -hr | head -10
五、补充说明:命令安装与最小化系统
在某些 Docker 容器或最小化 Linux 系统中,df 和 du 可能默认可用(属于 coreutils 包),但如果提示未找到,可安装:
-
Debian/Ubuntu :
bashapt install coreutils -
CentOS/RHEL :
bashyum install coreutils
lsof 命令需要单独安装:
- Debian/Ubuntu :
apt install lsof - CentOS/RHEL :
yum install lsof
六、总结
| 场景 | 推荐命令 |
|---|---|
| 快速检查分区是否爆满 | df -h |
| 查看 inode 是否耗尽 | df -i |
| 统计某个目录总大小 | du -sh <目录> |
| 定位当前目录下的大目录 | du -hd1 |
| 查找最大的一批文件 | find + du + sort 组合 |
| 解决 df 和 du 结果不一致 | `lsof |
- df 看分区整体空间,快速判断是否爆满
- du 看目录/文件大小,精准定位占用源
- 日常优先使用
-h参数,可读性最强 - 磁盘空间异常时,先 df 再 du,配合
lsof排查删除但未释放的文件
掌握这两个命令,Linux 磁盘管理将不再困难。