df命令用于查看文件系统整体使用情况,显示各挂载点的总容量、已用空间和可用空间,适合快速判断哪个分区快满;2. du命令用于统计具体文件或目录的磁盘占用,可深入目录结构定位大文件或占用最多的目录;3. 两者结果不一致时,常见原因为文件被删除但仍在被进程占用,此时df显示的空间包含该“隐藏”占用,而du无法统计已删除文件;4. 解决方法为使用lsof +l1查找并终止相关进程或重启服务释放空间;5. 使用du时若遇权限问题,应使用sudo提权确保统计完整;6. 日常运维中应先用df -h查看整体情况,再用du -sh或du -h –max-depth=1定位具体占用,结合二者可高效排查磁盘空间问题。
在linux系统中,查看磁盘空间使用情况是日常运维和系统管理中的基本操作。
df
和
du
是两个最常用的命令,虽然它们都与磁盘空间相关,但用途和输出结果有明显区别。下面详细对比这两个命令的使用方法和适用场景。
一、df 命令:查看文件系统整体使用情况
df
(disk Filesystem)命令用于显示文件系统的磁盘使用情况,包括总容量、已用空间、可用空间和挂载点等。
常用选项:
-
-h
:以人类可读的方式显示(如 KB、MB、GB)
-
-T
:显示文件系统类型
-
-i
:查看 inode 使用情况
示例:
df -h
输出示例:
Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 20G 28G 42% / tmpfs 3.2G 0 3.2G 0% /dev/shm /dev/sdb1 100G 80G 15G 85% /data
特点:
- 显示的是整个文件系统级别的空间使用情况
- 关注的是挂载点的总体占用
- 不深入目录结构,适合快速查看各分区使用率
- 常用于判断哪个分区快满了
二、du 命令:查看文件和目录的磁盘占用
du
(disk usage)命令用于统计指定文件或目录的磁盘使用情况,可以深入到具体目录查看谁占用了空间。
常用选项:
-
-h
:人类可读格式
-
-s
:只显示总计(不列出子目录)
-
--max-depth=N
:限制显示的目录层级
-
-a
:显示所有文件(包括文件和目录)
示例:
du -sh /home
输出示例:
15G /home
查看
/var
下各子目录的使用情况:
du -h --max-depth=1 /var
输出示例:
1.2G /var/log 8.5G /var/lib 100M /var/cache 9.8G /var
特点:
- 统计的是目录或文件的实际占用
- 可以定位到具体哪个目录占空间最多
- 适合排查“是谁占满了磁盘”
- 执行速度受目录大小影响,大目录可能较慢
三、df 和 du 的关键区别对比
对比项 | df 命令 | du 命令 |
---|---|---|
统计对象 | 文件系统整体 | 具体文件或目录 |
单位 | 按分区/挂载点显示 | 按目录或文件递归统计 |
常见用途 | 查看哪个分区快满了 | 查找大文件或占用空间的目录 |
是否受已删除但未释放的文件影响 | 是(已删除文件若被进程占用,df仍显示占用) | 否(只统计实际存在的文件) |
输出简洁性 | 简洁,适合快速查看 | 可详细可汇总,灵活但可能输出较多 |
四、常见问题与注意事项
-
df 和 du 结果不一致?
- 常见原因:某个大文件被删除了,但仍有进程在占用它(如日志文件被删除但服务未重启)。
- 解决方法:查找被删除但仍被占用的文件:
lsof +L1
或重启相关进程释放空间。
-
df 显示空间不足,但 du 统计总和不大?
- 很可能是上述“已删除但未释放”的文件占着空间。
- 此时 df 显示的已用空间包括这些“隐藏”占用,而 du 找不到这些文件,所以统计偏小。
-
权限问题
- 使用
du
遍历目录时,若无权限访问某些子目录,会报错或统计不全。
- 可用
sudo
提权查看:
sudo du -sh /var
- 使用
总结
- 用
df -h
快速查看各分区使用情况,判断是否磁盘满。
- 用
du -sh 目录
或
du -h --max-depth=1 目录
查找具体哪个目录占空间多。
- 当两者结果不一致时,优先检查是否有被删除但仍在占用的文件。
基本上就这些。掌握这两个命令的差异和配合使用,能高效解决大多数磁盘空间问题。