第21课 - df 与 du:磁盘使用查看
学习目标
- 理解
df与du命令的核心区别及适用场景 - 掌握
df和du命令的常用参数,用于监控磁盘空间 - 能够使用这些命令结合其他工具,快速定位磁盘空间问题
核心概念
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:基础使用
- 使用
df -h命令,查看你系统中所有文件系统的使用情况。请找出使用率(Use%)最高的分区及其挂载点。 - 使用
du -sh命令,查看你主目录(~或/home/你的用户名)的总大小。 - 预期输出:
# (练习1的示例回答) 使用率最高的分区是 `/dev/sda2`,挂载点为 `/`,使用率为 `78%`。 # (练习2的示例输出) 1.2G /home/user
练习 2:进阶查找
假设你收到磁盘空间告警,请按以下步骤操作:
- 使用
df命令找到使用率超过 80% 的分区。 - 使用
du和管道命令(sort),列出该分区根目录下占用空间前 5 名的子目录。 - 预期输出(示例):
$ 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 目录突然变大了,导致服务器运行缓慢。请写一组命令,帮助他:
- 确认
/var目录的总大小。 - 列出
/var目录下最大的3个子目录。 - (可选)尝试用命令找出
/var/log目录下大于 100MB 的文件。 提示:可以使用find /var/log -type f -size +100M命令。
常见错误
-
混淆
df和du- 错误:想查某个应用(如 MySQL 数据目录)占多大空间,用了
df。 - 正确:查具体目录/文件大小用
du。df只告诉你这个目录所在分区的整体情况。
- 错误:想查某个应用(如 MySQL 数据目录)占多大空间,用了
-
du结果与df显示的已用空间不符- 现象:
df显示已用 80G,但对所有目录用du -s求和只有 75G。 - 原因:可能是被删除但仍被进程占用的文件(不会释放空间),或是文件系统元数据、
/proc等特殊目录占用的空间。这是正常现象,du是估算值。
- 现象:
-
在挂载点上使用
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等工具查找具体大文件。 - 理解
df和du的输出差异(如已删除未释放文件),有助于你更准确地诊断问题。
练习编辑器
rust
Loading...