21·文件管理入门

df 与 du 磁盘使用查看

disk-usagedfdu

第21课 - df 与 du:磁盘使用查看

学习目标

  • 理解 dfdu 命令的核心区别及适用场景
  • 掌握 dfdu 命令的常用参数,用于监控磁盘空间
  • 能够使用这些命令结合其他工具,快速定位磁盘空间问题

核心概念

1. df (disk filesystem) - 文件系统的“航拍图”

df 命令用于查看已挂载文件系统的磁盘空间使用情况。它就像一个高空航拍图,让你一眼看清各个分区(文件系统)的整体空间占用、已用空间、剩余空间和使用百分比。

  • 核心问题:我的磁盘分区(如 /, /home)还剩多少空间?哪个分区快满了?
  • 特点:以文件系统为单位,显示的是整体情况。

2. du (disk usage) - 文件或目录的“地推统计”

du 命令用于估算指定文件或目录所占用的磁盘空间。它更像地面普查员,深入某个目录或文件内部,统计它们具体占用了多少空间。

  • 核心问题/var/log 这个目录到底占了多大?/home 下哪个子目录最占空间?
  • 特点:以文件或目录为单位,显示的是局部细节。它默认递归计算目录下所有文件。

简单类比

  • df:告诉你“整个小区(磁盘)里,哪几栋楼(分区)快住满了?”
  • du:告诉你“2号楼1单元(某个目录)里,哪几户(子目录/文件)的东西最多,占了多少面积?”

代码示例

1. 使用 df 查看文件系统概览

# 基础用法:以易读的格式(如KB, MB, GB)查看所有文件系统
df -h

# 输出示例(重点关注Use%列,判断是否快满):
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1        50G   35G   13G  73% /
# /dev/sdb1       200G  100G  100G  50% /data
# tmpfs           3.9G     0  3.9G   0% /dev/shm

# 只查看特定文件系统(如根分区)
df -h /

# 查看文件系统类型(如ext4, xfs)
df -Th

2. 使用 du 深入分析目录大小

# 基础用法:查看当前目录下各文件和子目录的大小
du -h

# 更实用的组合:查看指定目录的总大小,并只显示汇总信息(-s)
du -sh /var/log

# 输出示例:
# 120M	/var/log

# 查看目录下各子目录的大小,并按大小排序(前10名)
du -h --max-depth=1 /var | sort -hr | head -n 10

# 解释:
# -h: 人性化显示
# --max-depth=1: 只向下看一层,不递归所有子目录
# sort -hr: 按人类可读数字逆序排序(大的在前)
# head -n 10: 只显示前10行

3. 综合实战:找出磁盘使用大户

# 场景:发现根分区使用率超过90%,需要查找哪个目录占用空间最大。
# 步骤1:先用df确认问题分区
df -h /

# 步骤2:切换到问题分区挂载点(如根目录),用du从大到小查看目录占用
sudo du -h --max-depth=1 / | sort -hr | head -n 10
# 使用sudo是因为普通用户可能无法读取某些系统目录。

# 步骤3:根据结果,进入可疑的大目录(如`/home`)继续深入分析
du -h --max-depth=1 /home | sort -hr

实践练习

练习 1:基础使用

  1. 使用 df -h 命令,查看你系统中所有文件系统的使用情况。请找出使用率(Use%)最高的分区及其挂载点。
  2. 使用 du -sh 命令,查看你主目录(~/home/你的用户名)的总大小。
  3. 预期输出
    # (练习1的示例回答)
    使用率最高的分区是 `/dev/sda2`,挂载点为 `/`,使用率为 `78%`。
    # (练习2的示例输出)
    1.2G    /home/user
    

练习 2:进阶查找

假设你收到磁盘空间告警,请按以下步骤操作:

  1. 使用 df 命令找到使用率超过 80% 的分区。
  2. 使用 du 和管道命令(sort),列出该分区根目录下占用空间前 5 名的子目录。
  3. 预期输出(示例)
    $ df -h | awk '$5+0 > 80 {print $0}'
    /dev/sda1        50G   38G   10G  80% /
    $ sudo du -h --max-depth=1 / | sort -hr | head -n 5
    20G    /
    8.0G   /usr
    5.0G   /var
    4.0G   /home
    3.5G   /opt
    

练习 3:实际场景应用

你的好友告诉你他的 /var 目录突然变大了,导致服务器运行缓慢。请写一组命令,帮助他:

  1. 确认 /var 目录的总大小。
  2. 列出 /var 目录下最大的3个子目录。
  3. (可选)尝试用命令找出 /var/log 目录下大于 100MB 的文件。 提示:可以使用 find /var/log -type f -size +100M 命令。

常见错误

  1. 混淆 dfdu

    • 错误:想查某个应用(如 MySQL 数据目录)占多大空间,用了 df
    • 正确:查具体目录/文件大小用 dudf 只告诉你这个目录所在分区的整体情况。
  2. du 结果与 df 显示的已用空间不符

    • 现象df 显示已用 80G,但对所有目录用 du -s 求和只有 75G。
    • 原因:可能是被删除但仍被进程占用的文件(不会释放空间),或是文件系统元数据、/proc 等特殊目录占用的空间。这是正常现象,du 是估算值。
  3. 在挂载点上使用 du 导致误报

    • 错误:在 /mnt/data 挂载点上运行 du -sh /mnt/data,结果非常大,误以为该目录下文件很多。
    • 分析du 默认会递归计算。如果 /mnt/data 是另一个独立磁盘的挂载点,du 会计算这个磁盘的全部内容,但这并不意味着你的源目录 /mnt/data 下有那么多文件。
    • 建议:使用 du -hx 参数,-x 表示不跨越文件系统边界,即只计算当前文件系统内的文件,可以避免此问题。

小结

  • df 是你的 “磁盘全局监控仪表”,用于快速掌握各个分区的空间压力,首选参数 -h
  • du 是你的 “目录空间分析探针”,用于深入排查具体是哪个文件或目录占据了大量空间。常用组合 du -sh(看总大小)和 du -h --max-depth=1(看子目录分布)。
  • 当磁盘空间告警时,标准排查流程是:df 定位问题分区 -> du 分析问题目录 -> 进入大目录逐层深入或使用 find 等工具查找具体大文件
  • 理解 dfdu 的输出差异(如已删除未释放文件),有助于你更准确地诊断问题。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「用户管理基础」 以巩固所学知识。