命令简介
du
和 df
是 Linux 系统中常用的两个磁盘空间管理命令,用于查看磁盘的使用情况。
- du (disk usage):用于显示文件和目录所占用的磁盘空间。
- df (disk free):用于显示文件系统的磁盘使用情况统计。
命令区别
命令 | 功能 | 作用范围 |
du | 显示文件或目录的大小 | 文件或目录 |
df | 显示文件系统的磁盘使用情况 | 文件系统 |
简单来说,du
是从文件角度去查看磁盘占用情况,而 df
是从文件系统角度去查看磁盘占用情况。
命令参数
du 命令常用参数
- -h:以人类可读的格式显示大小,例如 1K、2.3M、4G。
- -s:仅显示总计,只显示指定目录或文件的大小。
- -a:显示目录中所有文件的大小。
- -m:以 MB 为单位显示。
- -k:以 KB 为单位显示。
- –max-depth=N:指定递归的最大深度。
df 命令常用参数
- -h:以人类可读的格式显示大小,例如 1K、2.3M、4G。
- -k:以 KB 为单位显示。
- -m:以 MB 为单位显示。
- -T:显示文件系统的类型。
- -i:显示 inode 信息。
命令用法示例
du 命令示例
- 查看当前目录下所有文件和子目录的大小,并以人类可读的格式显示:```
du -sh * - 查看 /var 目录的大小,并以 MB 为单位显示:```
du -sm /var - 递归显示 /home 目录下所有文件和子目录的大小,并指定最大递归深度为 2:```
du -h --max-depth=2 /home
df 命令示例
- 查看所有文件系统的磁盘使用情况,并以人类可读的格式显示:```
df -h - 查看 /boot 分区的使用情况,并显示文件系统类型:```
df -hT /boot
运维示例
案例:查找占用空间最大的10个目录
- 使用
du
命令递归统计所有目录大小:
- 将输出结果排序,并取前10行:
案例:检查系统是否有磁盘空间不足的风险
- 使用
df
命令查看所有文件系统的使用情况:
- 过滤出使用率超过80%的文件系统:
运维问题:df
和 du
查询结果不一致分析与解决方案
问题根源
df -h
和 du -sh
两者虽然都用于查看磁盘使用情况,但其计算方式和统计范围存在差异:
df -h
: 从文件系统层面统计磁盘使用情况,包括文件数据、目录结构、元数据等。du -sh
: 从文件层面统计磁盘使用情况,主要统计文件的大小,但不包括所有元数据。
因此,当出现结果不一致时,通常是以下因素导致:
- 文件系统元数据: 包括 inode、目录条目、权限信息等,这些数据
df
会统计,而du
通常不统计。 - 特殊文件: 软链接、硬链接、设备文件、管道等特殊文件,其大小计算方式不同。
- 文件系统碎片: 严重的磁盘碎片可能导致
du
和df
计算结果的差异。 - 未释放的资源: 已删除的文件被进程持有句柄、缓存数据未同步等情况。
- 文件系统错误: 文件系统损坏可能导致统计不准确。
解决方案
- 检查文件系统元数据:
- 使用
tune2fs
检查文件系统状态:```
tune2fs -l /dev/sda1 - 使用
fsck
检查并修复文件系统错误:```
fsck -f /dev/sda1 - 注意:
fsck
操作可能导致数据丢失,请谨慎使用,建议在备份数据后进行。
- 检查特殊文件:
- 使用
find
命令查找软链接和硬链接:```
find /path/to/directory -type l
find /path/to/directory -samefile - 使用
ls -l
查看文件类型:```
ls -l /path/to/file
- 检查未释放的资源:
- 使用
lsof
查找持有已删除文件句柄的进程:```
lsof | grep deleted - 终止相关进程:```
kill -9 - 同步文件系统缓存:```
sync
- 检查磁盘碎片:
- 使用
fsck
命令检查磁盘碎片:```
fsck -c /dev/sda1 - 使用
e4fsdefrag
或其他工具进行碎片整理:```
e4fsdefrag -f /dev/sda1
- 深入分析:
- 使用
du -a
查看每个文件的大小: 逐一排查异常大的文件。 - 使用
find
结合xargs
进行批量处理:```
find /path/to/directory -type f -size +1G -exec du -sh {} ; - 使用
tree
可视化目录结构: 帮助快速定位问题。
脚本自动化
注意事项
- 备份数据: 在进行任何操作前,务必备份重要数据。
- 谨慎操作:
fsck
和e4fsdefrag
等命令可能导致数据丢失,请谨慎使用。 - 针对性处理: 根据具体情况选择合适的处理方案。
- 定期检查: 将上述脚本集成到系统监控中,定期检查并处理。
总结
du
和 df
命令是 Linux 系统中非常重要的磁盘管理工具。通过灵活运用这两个命令,可以方便地查看磁盘使用情况,查找占用空间大的文件或目录,及时发现潜在的磁盘空间不足问题,从而更好地管理系统资源。