df命令查看文件系统级磁盘使用,du命令分析目录级实际占用;二者差异常因已删但未释放文件导致空间不一致,可用lsof定位,lsblk理清设备关系,find精准查找大文件。

如果您需要快速掌握Linux系统中磁盘空间的占用情况,但对df与du命令的用途和区别感到困惑,则可能是由于未区分文件系统级与目录级统计维度。以下是针对该问题的多种排查与分析方法:
一、使用df命令查看文件系统整体空间
df命令用于显示已挂载文件系统的磁盘使用概况,包括总容量、已用、可用空间及挂载点,其统计基于文件系统元数据,能反映包括被删除但未释放文件在内的真实占用。
1、在终端中直接输入 df,以KB为单位输出所有挂载点信息。
2、执行 df -h,以人类可读格式(GB/MB)显示各分区使用率,便于直观判断瓶颈。
3、运行 df -i,检查inode使用率,避免因inode耗尽导致“磁盘有空间却无法写入”的异常。
4、使用 df -T /path,确认指定路径所在分区的文件系统类型(如ext4、xfs),辅助后续针对性操作。
二、使用du命令分析目录级空间分布
du命令递归计算指定目录或文件的实际磁盘占用,不包含已被删除但进程仍打开的文件,适用于定位大目录、清理冗余数据。
1、输入 du -sh /var,获取/var目录总大小,跳过子目录逐项展开,提升响应效率。
2、执行 du -h --max-depth=1 /home,列出/home下一级子目录各自占用量,快速识别高占用子路径。
3、运行 du -ah /tmp | sort -hr | head -n 10,按大小逆序排列/tmp下所有文件与目录,提取前10个最大项。
4、使用 du -shc /var/log/*,分别统计/var/log各子目录大小并汇总总量,支持-c选项生成合计行。
三、结合df与du定位“空间不一致”问题
当df显示某分区使用率高达95%以上,而du统计该挂载点根目录总和远小于此值时,通常表明存在已被删除但仍有进程持有句柄的大文件,这类文件仍占用磁盘空间但du不可见。
1、执行 lsof +L1,列出所有处于已删除(unlinked)状态但仍被打开的文件。
2、运行 lsof | grep deleted,筛选出含“deleted”标记的条目,重点关注Size列较大的记录。
3、使用 lsof -nP -p PID | grep deleted(将PID替换为对应进程号),深入查看特定进程所持已删文件详情。
4、重启或终止相关进程(如日志服务),或向其发送SIGUSR1等信号触发日志轮转与句柄释放。
四、使用lsblk辅助识别设备与挂载关系
lsblk命令提供块设备拓扑视图,明确磁盘、分区与挂载点的物理归属关系,避免误操作非目标设备。
1、输入 lsblk,以树状结构展示所有块设备及其挂载点,识别主磁盘(如sda)与逻辑卷(如vg-root)。
2、执行 lsblk -f,附加显示每个分区的文件系统类型(FSTYPE)与LABEL,增强识别准确性。
3、运行 lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,定制输出字段,聚焦关键信息,排除无关列干扰。
五、使用find命令查找大文件进行精准定位
当需绕过目录层级限制、直接扫描全路径下的超大单文件时,find命令配合-size参数可实现高效筛选。
1、输入 find / -type f -size +100M 2>/dev/null,搜索整个系统中大于100MB的普通文件,忽略权限错误提示。
2、执行 find /var -name "*.log" -size +50M,在/var下定位大于50MB的日志文件,缩小清理范围。
3、运行 find /home -type f -mtime +365 -size +10M,查找/home中一年以上未修改且体积超10MB的陈旧文件。
4、使用 find /tmp -type f -mmin -60 -size +1M,筛选/tmp中最近一小时内创建或修改、且大于1MB的临时文件,辅助排查突发写入源。










