首页 > 志趣人生 > Ubuntu系统Ubuntu系统

一文读懂linux系统df及du命令的使用

在Linux/Unix系统中,`df`和`du`是两个用于查看磁盘空间的核心命令,虽然功能相关,但侧重点和原理不同,以下是详细解读:

df 与 du命令的详细解读

在Linux/Unix系统中,dfdu是两个用于查看磁盘空间的核心命令,虽然功能相关,但侧重点和原理不同,以下是详细解读:

一、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 的核心区别

维度dfdu
统计对象整个文件系统(分区)具体文件/目录
数据来源文件系统元数据(超级块)遍历目录结构,累加文件大小
是否包含"删除未释放"文件是(这些文件仍占用文件系统空间)否(这些文件已不在目录中,无法被遍历)
用途查看分区整体使用状态(如"哪个盘满了")定位具体大文件/目录(如"谁占了空间")

常见问题: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 命令。

0
0

文章导航

共有 0 条热心评论

快快抢占沙发吧!

发表评论

安全验证
Top