df和du命令指南:Linux磁盘空间分析工具

1. 简介

df(disk free)和du(disk usage)是Linux系统中两个重要的磁盘空间分析工具。df用于查看文件系统的磁盘空间使用情况,而du用于统计文件和目录的磁盘使用量。

主要功能

  • 查看文件系统空间使用状况
  • 统计目录和文件的大小
  • 分析磁盘空间占用
  • 监控磁盘使用趋势
  • 识别大文件和目录

2. df命令详解

基本用法

# 显示所有文件系统信息
df

# 使用人类可读格式显示
df -h

# 显示文件系统类型
df -T

# 显示inode信息
df -i

# 指定文件系统
df /dev/sda1

常用选项

# 显示所有文件系统(包括0块的)
df -a

# 只显示本地文件系统
df -l

# 不显示特定类型文件系统
df -x tmpfs -x devtmpfs

# 以1K块为单位显示
df -k

3. du命令详解

基本用法

# 显示当前目录使用情况
du

# 使用人类可读格式
du -h

# 只显示总计
du -s

# 显示指定深度的目录
du --max-depth=1

# 按大小排序(需要sort命令)
du -h | sort -hr

常用选项

# 显示文件大小
du -a

# 不跟随符号链接
du -P

# 统计硬链接文件
du -l

# 排除特定模式
du --exclude="*.log"

4. 常见使用场景

磁盘空间分析

# 查找大文件目录
du -h --max-depth=1 /path | sort -hr

# 统计特定类型文件
du -ch *.log

# 查看用户主目录使用情况
du -sh /home/*

# 分析系统目录空间
du -h --max-depth=1 /var/

空间监控

# 检查磁盘使用率
df -h | awk '$5 > "80%"'

# 监控特定目录增长
watch -n 60 'du -sh /var/log'

# 检查inode使用情况
df -i | awk '$5 > "90%"'

5. 高级特性

自定义输出

# 自定义输出格式(df)
df --output=source,size,used,avail

# 时间戳显示(du)
du -h --time

# 显示文件所属(du)
du -h --apparent-size

组合使用

# 查找最大的目录并显示详细信息
du -h --max-depth=1 | sort -hr | head -n 5

# 统计不同文件类型的空间使用
for i in /*; do du -sh "$i" 2>/dev/null; done | sort -hr

# 监控磁盘使用变化
while true; do df -h > df_now; diff df_prev df_now; cp df_now df_prev; sleep 300; done

6. 最佳实践

性能优化

  • 使用-x选项排除不需要的文件系统
  • 使用--max-depth限制扫描深度
  • 避免在大文件系统上频繁运行du
  • 使用-s选项只获取总计信息

监控建议

  • 定期检查关键目录的空间使用
  • 设置阈值告警(如使用率超过80%)
  • 关注inode使用情况
  • 监控空间使用趋势

7. 常见问题排查

空间不足问题

# 查找最大的文件
find / -type f -exec du -h {} + | sort -hr | head -n 10

# 检查删除文件但空间未释放
lsof | grep deleted

# 分析日志文件增长
du -h --time /var/log/* | sort -hr

inode耗尽问题

# 查找包含大量小文件的目录
for i in /*; do echo "$(find "$i" -type f | wc -l) $i"; done | sort -nr

# 检查inode使用率
df -i | awk '$5 ~ /%/ && $5 > 85'

# 查找空文件
find / -type f -empty -ls