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

在Linux系统里,想知道你的硬盘空间还剩多少、哪些地方被占用了,最常用的、也是我个人觉得最直观的工具,非
命令莫属。它能迅速概览所有已挂载文件系统的空间使用情况,包括总大小、已用、可用以及使用百分比,让你对磁盘状况一目了然。
说起
命令,它的全称是 'disk free',顾名思义,就是告诉你磁盘的空闲情况。
最基础的用法,直接在终端敲入
,你就能看到一个表格。不过,默认输出的单位是KB,对我们人类来说,看那些大数字有点费劲。
所以,我通常会加上
选项,也就是
。这个
代表 'human-readable',它会自动把容量转换成GB、MB这种我们更容易理解的单位。这一下子就清晰多了,比如
挂载在
上,总共多少G,用了多少G,还剩多少G,用了百分之多少,一目了然。
有时候,你可能想知道某个特定目录或者文件系统的使用情况,比如只想看
目录。你可以直接
。
另外一个我偶尔会用的选项是
,它会显示文件系统的类型(Type),比如 ext4、xfs 等等。这对于排查一些文件系统相关的问题时很有用。
还有个
选项,是查看 i
node 使用情况的。虽然不是直接的磁盘空间,但文件系统除了存储数据,还需要存储文件的元数据,也就是 inode。如果 inode 用完了,即使磁盘空间还有,你也创建不了新文件。这在一些特殊场景下,比如小文件特别多的应用,就显得尤为重要了。
我记得有一次,服务器空间明明还有很多,但就是新建不了文件,查了半天,才发现是 inode 耗尽了,
帮了大忙。
df和du命令有什么区别?
很多初学者,甚至一些有经验的用户,都会把
和
这两个命令搞混,或者说不清楚它们到底有什么区别。其实它们虽然都和磁盘空间有关,但关注点完全不同。
(disk free)关注的是
文件系统的使用情况。它读取的是文件系统的元数据,告诉你整个文件系统层面的总容量、已用、可用空间。你可以把它想象成是看一个水库的总水量、已经用了多少、还能装多少。它报告的是
实际挂载点上的空间占用。
而
(disk usage)关注的则是
文件或目录的实际占用空间。它会递归地遍历指定目录下的所有文件和子目录,然后把它们的大小加起来。这就像是你去测量水库里每一艘船、每一块石头占了多少体积。
统计的是
文件或目录实际占用的块大小,这可能会因为文件系统块大小、稀疏文件等原因,与
报告的总和略有差异。
举个例子,一个被删除但仍被进程占用的文件,
会认为这部分空间仍被占用(因为文件句柄还在),而
则不会计算它,因为它已经从文件系统中“消失”了。所以,当你发现
显示的空间占用和
对所有目录求和的结果不一致时,很可能就是有文件被删了但句柄没释放,或者有稀疏文件等特殊情况。理解这个差异,在排查磁盘空间问题时,能省不少力气。
df命令的常见陷阱和注意事项?
虽然
命令用起来简单,但我在实际使用中也遇到过一些“坑”,或者说需要注意的地方。
一个常见的误解是,
报告的“可用空间”并不总是你能完全利用的空间。Linux文件系统(比如ext4)默认会预留一部分(通常是5%)空间给root用户,目的是为了防止磁盘被完全写满后系统无法正常运行,或者root用户无法登录进行维护。所以,如果你看到可用空间还有1GB,但普通用户却写不进去一个1GB的文件,别惊讶,那5%的预留空间可能就是原因。你可以用
tune2fs -l /dev/sda1 | grep 'Reserved block count'
登录后复制
来查看预留块,甚至用
tune2fs -r 0 /dev/sda1
登录后复制
来取消预留(不推荐在生产环境随意操作)。
再就是,
只显示已挂载的文件系统。如果你有未挂载的分区或者裸设备,
是看不到它们的。这时候你需要
或者
来查看物理设备布局。
还有一点,
的结果是
瞬时快照。如果你的系统正在进行大量的写入或删除操作,
的结果可能在短时间内就变得不准确。特别是当有大文件被删除,但文件句柄仍被某个进程占用时,
会继续显示这部分空间已被占用,直到进程释放文件句柄或者重启。遇到这种情况,
可能会帮你找到“元凶”。这可是我排查过好几次生产环境问题才总结出来的经验。
如何结合其他命令更有效地管理磁盘空间?
光会看
输出还不够,真正的磁盘空间管理,往往需要组合拳。
首先,当你通过
发现某个分区空间告急时,下一步通常是找出是哪个目录或文件占用了大量空间。这时候,
在可疑目录下就派上用场了。
会列出当前目录下所有文件和子目录的总大小,
是summary,
是human-readable。我经常会用
du -sh * | sort -rh | head -n 10
登录后复制
来快速找出前十大占用空间的文件或目录,这比漫无目的地一个个查看高效多了。
如果发现是日志文件(比如
)过大,你可以考虑配置日志轮转(logrotate),让系统自动压缩、归档或删除旧日志。这是一个非常重要的系统维护习惯,能有效避免日志文件无限膨胀。
另外,对于那些你不再需要的旧文件、临时文件或者下载包,及时清理也是关键。
find /path/to/search -type f -mtime +30 -delete
登录后复制
这样的命令可以帮你清理30天前修改过的文件。但操作
或
时务必小心,确认无误再执行,一个不小心可能就删掉重要数据了。我个人建议先用
find ... -exec echo {} \;登录后复制
预览一下要删除的文件列表,确认后再替换成
或
。
最后,如果磁盘空间实在不够,而又不能轻易删除文件,那么考虑扩容或者迁移数据就是不得不走的一步了。这通常涉及到更复杂的LVM操作或者云存储的弹性伸缩。但这一切的前提,都是你得先通过
和
清晰地了解当前磁盘的真实状况。
以上就是如何在Linux中查看磁盘使用情况?使用df命令检查磁盘空间占用的详细内容,更多请关注php中文网其它相关文章!