登录
首页 >  文章 >  linux

Linux下df命令查看磁盘使用详解

时间:2025-09-06 14:37:58 351浏览 收藏

在Linux系统中,`df`命令是查看磁盘空间使用情况的利器。本文将深入解析`df`命令的各项功能与用法,助你快速了解磁盘总容量、已用空间、可用空间以及使用百分比。通过`-h`选项,`df`命令能以更易读的GB、MB等单位显示磁盘空间,`-T`选项则可显示文件系统类型,而`-i`选项用于检查inode使用情况。此外,本文还将阐述`df`命令与`du`命令的区别,并提醒在使用`df`命令时需注意的预留空间、未挂载分区以及瞬时快照等问题。最后,本文还将介绍如何结合`du`、`lsof`、`find`等命令,更有效地分析和管理磁盘空间,避免因日志文件过大、旧文件堆积等原因导致的磁盘空间不足问题。

df命令用于查看文件系统磁盘使用情况,加-h选项可读性强,-T显示文件系统类型,-i检查inode使用;df与du区别在于前者看文件系统整体空间,后者统计文件实际占用,二者差异常因已删除但被占用的文件导致;注意df显示的可用空间含root预留5%,且结果为瞬时快照,需结合du、lsof、find等命令综合分析和管理磁盘空间。

如何在Linux中查看磁盘使用情况?使用df命令检查磁盘空间占用

在Linux系统里,想知道你的硬盘空间还剩多少、哪些地方被占用了,最常用的、也是我个人觉得最直观的工具,非df命令莫属。它能迅速概览所有已挂载文件系统的空间使用情况,包括总大小、已用、可用以及使用百分比,让你对磁盘状况一目了然。

说起df命令,它的全称是 'disk free',顾名思义,就是告诉你磁盘的空闲情况。 最基础的用法,直接在终端敲入df,你就能看到一个表格。不过,默认输出的单位是KB,对我们人类来说,看那些大数字有点费劲。 所以,我通常会加上-h选项,也就是df -h。这个-h代表 'human-readable',它会自动把容量转换成GB、MB这种我们更容易理解的单位。这一下子就清晰多了,比如 /dev/sda1 挂载在 / 上,总共多少G,用了多少G,还剩多少G,用了百分之多少,一目了然。 有时候,你可能想知道某个特定目录或者文件系统的使用情况,比如只想看 /home 目录。你可以直接 df -h /home。 另外一个我偶尔会用的选项是-T,它会显示文件系统的类型(Type),比如 ext4、xfs 等等。这对于排查一些文件系统相关的问题时很有用。 还有个 -i 选项,是查看 inode 使用情况的。虽然不是直接的磁盘空间,但文件系统除了存储数据,还需要存储文件的元数据,也就是 inode。如果 inode 用完了,即使磁盘空间还有,你也创建不了新文件。这在一些特殊场景下,比如小文件特别多的应用,就显得尤为重要了。 我记得有一次,服务器空间明明还有很多,但就是新建不了文件,查了半天,才发现是 inode 耗尽了,df -i 帮了大忙。

df和du命令有什么区别?

很多初学者,甚至一些有经验的用户,都会把dfdu这两个命令搞混,或者说不清楚它们到底有什么区别。其实它们虽然都和磁盘空间有关,但关注点完全不同。 df(disk free)关注的是文件系统的使用情况。它读取的是文件系统的元数据,告诉你整个文件系统层面的总容量、已用、可用空间。你可以把它想象成是看一个水库的总水量、已经用了多少、还能装多少。它报告的是实际挂载点上的空间占用。 而du(disk usage)关注的则是文件或目录的实际占用空间。它会递归地遍历指定目录下的所有文件和子目录,然后把它们的大小加起来。这就像是你去测量水库里每一艘船、每一块石头占了多少体积。du统计的是文件或目录实际占用的块大小,这可能会因为文件系统块大小、稀疏文件等原因,与df报告的总和略有差异。 举个例子,一个被删除但仍被进程占用的文件,df会认为这部分空间仍被占用(因为文件句柄还在),而du则不会计算它,因为它已经从文件系统中“消失”了。所以,当你发现df显示的空间占用和du对所有目录求和的结果不一致时,很可能就是有文件被删了但句柄没释放,或者有稀疏文件等特殊情况。理解这个差异,在排查磁盘空间问题时,能省不少力气。

df命令的常见陷阱和注意事项?

虽然df命令用起来简单,但我在实际使用中也遇到过一些“坑”,或者说需要注意的地方。 一个常见的误解是,df报告的“可用空间”并不总是你能完全利用的空间。Linux文件系统(比如ext4)默认会预留一部分(通常是5%)空间给root用户,目的是为了防止磁盘被完全写满后系统无法正常运行,或者root用户无法登录进行维护。所以,如果你看到可用空间还有1GB,但普通用户却写不进去一个1GB的文件,别惊讶,那5%的预留空间可能就是原因。你可以用tune2fs -l /dev/sda1 | grep 'Reserved block count'来查看预留块,甚至用tune2fs -r 0 /dev/sda1来取消预留(不推荐在生产环境随意操作)。 再就是,df只显示已挂载的文件系统。如果你有未挂载的分区或者裸设备,df是看不到它们的。这时候你需要fdisk -l或者lsblk来查看物理设备布局。 还有一点,df的结果是瞬时快照。如果你的系统正在进行大量的写入或删除操作,df的结果可能在短时间内就变得不准确。特别是当有大文件被删除,但文件句柄仍被某个进程占用时,df会继续显示这部分空间已被占用,直到进程释放文件句柄或者重启。遇到这种情况,lsof | grep deleted 可能会帮你找到“元凶”。这可是我排查过好几次生产环境问题才总结出来的经验。

如何结合其他命令更有效地管理磁盘空间?

光会看df输出还不够,真正的磁盘空间管理,往往需要组合拳。 首先,当你通过df -h发现某个分区空间告急时,下一步通常是找出是哪个目录或文件占用了大量空间。这时候,du -sh *在可疑目录下就派上用场了。du -sh *会列出当前目录下所有文件和子目录的总大小,-s是summary,-h是human-readable。我经常会用du -sh * | sort -rh | head -n 10来快速找出前十大占用空间的文件或目录,这比漫无目的地一个个查看高效多了。 如果发现是日志文件(比如/var/log)过大,你可以考虑配置日志轮转(logrotate),让系统自动压缩、归档或删除旧日志。这是一个非常重要的系统维护习惯,能有效避免日志文件无限膨胀。 另外,对于那些你不再需要的旧文件、临时文件或者下载包,及时清理也是关键。find /path/to/search -type f -mtime +30 -delete 这样的命令可以帮你清理30天前修改过的文件。但操作rmdelete时务必小心,确认无误再执行,一个不小心可能就删掉重要数据了。我个人建议先用find ... -exec echo {} \;预览一下要删除的文件列表,确认后再替换成rm-delete。 最后,如果磁盘空间实在不够,而又不能轻易删除文件,那么考虑扩容或者迁移数据就是不得不走的一步了。这通常涉及到更复杂的LVM操作或者云存储的弹性伸缩。但这一切的前提,都是你得先通过dfdu清晰地了解当前磁盘的真实状况。

今天关于《Linux下df命令查看磁盘使用详解》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>