首页 > 志趣人生 > Ubuntu系统Ubuntu系统
一文读懂linux系统df及du命令的使用
df 与 du命令的详细解读
在Linux/Unix系统中,df
和du
是两个用于查看磁盘空间的核心命令,虽然功能相关,但侧重点和原理不同,以下是详细解读:
一、df 命令:查看文件系统整体磁盘使用情况
df
全称 disk free,用于查看文件系统级别的磁盘空间使用情况(包括已用、可用空间、挂载点等)。它从文件系统的"元数据"(如超级块)中直接读取信息,反映的是整个分区的宏观使用状态。
核心功能
显示所有已挂载文件系统的总容量、已用容量、可用容量、使用率及挂载点。
会包含被删除但仍被进程占用的文件(这些文件未真正释放磁盘空间,文件系统层面仍视为"已用")。
常用选项及示例
选项 | 作用 |
---|---|
-h | 以人性化单位(K、M、G)显示(默认是字节) |
-T | 显示文件系统类型(如ext4、xfs、tmpfs等) |
-i | 显示inode的使用情况(而非磁盘容量,inode用于存储文件元数据,可能先耗尽) |
-P | 以POSIX标准格式输出(便于脚本解析) |
示例1:查看所有文件系统的磁盘使用情况(人性化)
df -h
输出示例:
Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 20G 28G 42% / tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/sdb1 100G 60G 35G 63% /data
Filesystem
:文件系统(通常是设备路径,如/dev/sda1
)。Size
:总容量;Used
:已用容量;Avail
:可用容量;Use%
:使用率。Mounted on
:挂载点(文件系统对应的目录)。
示例2:查看inode使用情况(避免"磁盘未满但无法创建文件")
每个文件需要一个inode(存储文件名、权限等元数据),若inode耗尽,即使磁盘有空间也无法创建文件。用df -i
查看:
df -i
输出示例:
Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 3276800 15000 3261800 1% / /dev/sdb1 6553600 6553600 0 100% /data # inode耗尽,无法创建文件
二、du 命令:查看文件/目录的磁盘占用量
du
全称 disk usage,用于计算具体文件或目录占用的磁盘空间。它通过遍历目录下的所有文件和子目录,累加每个文件的实际大小(按块计算),反映的是文件层面的微观占用。
核心功能
计算指定目录/文件的总大小(默认递归统计所有子目录)。
不包含被删除但仍被进程占用的文件(这些文件已不在目录结构中,无法被遍历)。
常用选项及示例
选项 | 作用 |
---|---|
-h | 以人性化单位(K、M、G)显示 |
-s | 只显示总和(不列出子目录的明细) |
-a | 显示所有文件(包括普通文件,默认只显示目录) |
-c | 在最后添加一行"总计"(总和) |
--max-depth=N | 限制递归深度(如--max-depth=1 只统计当前目录下一级的目录/文件) |
示例1:查看当前目录总大小(不显示子目录明细)
du -sh # -s:总和;-h:人性化
输出:2.5G .
(当前目录总大小为2.5G)
示例2:查看指定目录下一级的目录大小(限制深度)
想快速定位/data
目录下哪些子目录占用空间大:
du -h --max-depth=1 /data
输出示例:
100M /data/logs 20G /data/backup 5G /data/tmp 25.1G /data
示例3:显示所有文件的大小(包括普通文件)并统计总计
du -ahc /home/user/docs # -a:包含文件;-c:总计
输出示例:
4.0K /home/user/docs/readme.txt 1.5M /home/user/docs/report.pdf 2.0G /home/user/docs/archive 2.0G 总计
三、df 与 du 的核心区别
维度 | df | du |
---|---|---|
统计对象 | 整个文件系统(分区) | 具体文件/目录 |
数据来源 | 文件系统元数据(超级块) | 遍历目录结构,累加文件大小 |
是否包含"删除未释放"文件 | 是(这些文件仍占用文件系统空间) | 否(这些文件已不在目录中,无法被遍历) |
用途 | 查看分区整体使用状态(如"哪个盘满了") | 定位具体大文件/目录(如"谁占了空间") |
常见问题:df 与 du 结果不一致?
如果df
显示某个分区使用率很高,但du
统计该分区总大小远小于分区容量,通常是因为存在被删除但仍被进程占用的文件(这些文件在df
中算"已用",但du
无法统计)。
解决方法:用lsof
查找被占用的删除文件,重启对应进程释放空间:
lsof | grep deleted # 列出被删除但仍被占用的文件
df 后跟目录名称的作用
当 df
后跟一个目录名称时,它会显示该目录所在的文件系统(分区)的磁盘使用情况,而不是该目录本身的大小。
简单说:它不关心这个目录有多大,只告诉你这个目录"挂在哪个分区上",以及这个分区的总容量、已用空间等信息。
示例对比
假设系统中有如下挂载关系:/dev/sda1
(50G分区)挂载到 /
(根目录),/home
是 /
下的一个子目录(属于 sda1
分区)。
1. 执行 df /home
:
输出的是 /dev/sda1
分区的信息(因为 /home
属于该分区):
Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 20G 28G 42% /
2. 若 /home
是一个独立分区(如 /dev/sdb1
挂载到 /home
),执行 df /home
:
输出的是 /dev/sdb1
分区的信息:
Filesystem Size Used Avail Use% Mounted on /dev/sdb1 100G 60G 35G 63% /home
与 du 命令的区别
df 目录名
:显示目录所在分区的整体使用情况(分区层面)。du 目录名
:显示该目录本身及其内容占用的磁盘空间(文件层面)。
例如:
df /home
→ 告诉你/home
所在分区还剩多少空间。du -sh /home
→ 告诉你/home
目录下所有文件总共占了多少空间。
总结
df
后跟目录名称是合法的,但其功能是"查询该目录所属分区的磁盘使用情况",而非目录自身的大小。若想查看目录的实际占用,需用 du
命令。
快快抢占沙发吧!