在Linux系统中,查看磁盘空间最核心且通用的命令是df和du,前者用于查看文件系统整体使用情况,后者用于统计文件或目录的具体占用大小。
当你面对一个突然变慢或者报错提示“磁盘空间不足”的服务器时,第一反应不应该是惊慌失措地重启,而是迅速定位问题源头,Linux提供了非常丰富的工具链来帮助你完成这一任务,但不同的命令适用于不同的场景,理解它们的区别,能帮你节省大量排查故障的时间。
df命令:宏观视角的文件系统概览
df(disk free)是系统管理员最常用的命令之一,它的主要作用是报告文件系统的磁盘空间使用情况,你可以把它想象成一张整个城市的地图,让你一眼就能看出哪些区域(分区)已经拥挤不堪,哪些区域还有大片空地。
基础用法与关键参数解析
在终端中输入df并回车,你会看到一堆看似杂乱无章的数据,为了更直观地理解,我们需要关注几个核心列:
- Filesystem:显示设备名称或挂载点,比如
/dev/sda1或/dev/mapper/vg0-lv_root。 - 1K-blocks:以1KB为单位的总块数。
- Used:已使用的空间。
- Available:可用空间。
- Use%:使用百分比,这是判断是否需要清理的最直观指标。
- Mounted on:挂载点,告诉你在哪个目录下可以访问这个分区。
默认情况下,df显示的单位是1K块,这对于人类阅读并不友好,业内专家指出,使用-h参数是最佳实践,它能自动将数据转换为KB、MB、GB或TB,使输出结果一目了然。
常用组合命令示例
- 查看人类可读格式:
df -h
- 查看特定文件系统类型:
df -T - 查看inode使用情况(防止小文件过多导致空间满):
df -i
du命令:微观视角的目录深度扫描
如果说df是看地图,那么du(disk usage)就是拿着放大镜去检查每一个房间,当你发现某个分区空间不足时,df只能告诉你“/home”分区满了,但无法告诉你具体是哪个文件夹占用了空间,这时就需要du出场了。
如何快速定位大文件
du命令默认显示当前目录下每个子目录的大小,为了快速找到占用空间最大的目录,通常结合sort和head命令使用。
执行du -sh / | sort -rh | head -n 10,这条命令的含义如下:
du -sh /:递归统计根目录下所有一级目录的大小,并以人类可读格式(-h)和汇总大小(-s)显示。sort -rh:按照人类可读的数字格式进行反向排序(从大到小)。head -n 10:只输出前10行,即占用空间最大的10个目录。
这种组合拳是排查磁盘空间占用问题的标准动作,通过层层深入,你可以从根目录深入到具体的日志文件或备份目录,从而精准定位“磁盘空间杀手”。
du与df的差异对比与实战场景
很多初学者容易混淆df和du,甚至在遇到空间不一致时感到困惑,理解它们的底层逻辑差异,是进阶Linux运维的关键。
为什么df和du显示的大小不一致?
这是一个经典的面试考点,也是实际运维中常见的问题,当你运行df -h和du -sh /时,发现两者结果相差甚远,通常有以下几个原因:
- 已删除但未释放的文件:这是最常见的原因,如果某个进程(如日志写入进程)正在写入一个文件,而你通过
命令删除了该文件,操作系统并不会立即释放其占用的磁盘空间,因为文件句柄仍被进程持有。
rm
df显示空间未释放,而du因为文件已被标记删除,不再计入统计,解决方案是重启相关进程或重启服务器。 - 隐藏文件与权限问题:
du默认会统计当前用户有权访问的文件,而df显示的是整个文件系统的状态,如果你没有权限访问某些目录,du可能会漏掉部分数据。 - 文件系统保留空间:Linux文件系统(如ext4)默认会为root用户保留5%的空间,以防止普通用户占满磁盘导致系统崩溃。
df显示的是总空间,而du统计的是实际数据占用,因此两者存在固定比例的差异。
场景化应用建议
- 监控告警:在编写监控脚本时,优先使用
df -h,因为它读取的是文件系统元数据,速度极快,适合高频次的状态检查。 - 清理优化:在执行磁盘清理前,务必使用
du进行深度扫描,只有知道具体是哪个大文件在作祟,才能有的放矢地清理,避免误删重要数据。
进阶工具:ncdu与iotop的辅助作用
虽然df和du是标配,但在处理TB级别的存储或复杂的目录结构时,终端输出的文本信息可能显得过于枯燥且难以交互,引入一些第三方工具能极大提升效率。
ncdu:交互式磁盘分析利器
ncdu(NCurses Disk Usage)是一个基于ncurses的磁盘使用分析器,它的最大优势在于交互性,运行ncdu /path/to/directory后,你会看到一个类似文件浏览器的界面,可以直接用键盘上下键选择目录,按Enter进入子目录,按Delete删除文件(需谨慎)。

对于经常需要处理大量日志或临时文件的运维人员来说,ncdu的可视化交互体验远胜于反复敲击du命令,它支持快速导出报告,也支持忽略特定类型的文件(如.log),从而聚焦于真正占用空间的大文件。
iotop:监控磁盘IO压力
磁盘空间看似充足,但系统依然卡顿,这可能是因为磁盘IO瓶颈。iotop命令可以实时显示哪些进程正在读写磁盘,虽然它不直接显示空间大小,但结合df和du,它能帮你判断是“空间满了”还是“读写太慢”导致的问题。
常见问题解答
Linux查看磁盘空间常用命令有哪些区别?
df命令主要用于查看文件系统的整体使用情况,包括总容量、已用空间、可用空间及使用百分比,适合快速判断分区是否满载;du命令则用于统计特定文件或目录树的具体大小,适合深入排查具体哪个文件夹占用了过多空间,简而言之,df看宏观,du看微观。
df命令显示的可用空间与du统计的不一致怎么办?
这种情况通常是因为存在已删除但被进程占用的文件,可以通过lsof | grep deleted命令查找这些文件,找到对应的进程ID后,重启该进程即可释放被占用的磁盘空间,文件系统默认保留的空间也会导致两者存在微小差异,属正常现象。
如何防止Linux磁盘空间被小文件占满?
小文件过多会导致inode耗尽,即使磁盘空间还有剩余,也无法写入新文件,可以使用df -i命令查看inode使用情况,为防止此类问题,应定期清理无用的临时文件,并在创建文件系统时根据业务需求调整inode数量,对于日志类应用,建议使用日志轮转机制(如logrotate)定期压缩或归档日志文件。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/417793.html
