为什么df命令可以快速返回有关每个分区的使用情况,而du将花费更长的时间来计算要返回的磁盘使用情况。
df是如何工作的?
答案 0 :(得分:5)
根据手册df - report file system disk space usage
和du - estimate file space usage
虽然df
是显示文件系统使用情况,但du
是报告文件空间使用情况。 du
来自文件,而df
在文件系统级别工作,报告内核所说的可用内容。从广义上讲,它的设计df
并不关心文件,而是文件系统本身。
明智地工作,df
直接在文件系统元数据中查看磁盘使用的块。因此,它返回的速度比du
快得多,但只能显示有关整个磁盘/分区的信息。其中,du
遍历目录树并计算其中所有文件的总和大小。由于可能存在不可读的文件,目录树中的硬链接等,它可能无法输出确切的信息。
编辑
既然您也问过df
如何运作,那么说如果同时使用df
和du
,您可能会看到可用空间量有所不同。现在你可能会惊讶地发现两个相似的命令(df
和du
)为同一个硬盘返回不同的空闲空间有多大可能???
答案在于df
的工作,
由于df与文件系统元数据直接相关,因此它也连接到打开文件描述符。假设情况发生,当删除文件时,某些其他进程可能正在保持文件打开,导致文件无法删除; (重新启动或终止该进程将释放文件)此外,如果您创建了硬链接,则多个文件名将指向相同的数据,并且数据(实际内容)将被标记为空闲/可用,直到所有对它的引用都被删除为止。在这种情况下,df
会考虑这些文件/数据的大小,因此可用空间会更低。
答案 1 :(得分:2)
因为df
可以使用statfs(2)系统调用。但du
以递归方式遍历文件层次结构,即la nftw(3)
一般来说,请记住大多数Linux程序和命令都是free software,因此您可以研究它们的源代码。 df
位于coreutils
你总是可以strace(1)命令来了解它正在运行的系统调用。
答案 2 :(得分:2)
df
只是告诉你文件系统上的总可用空间。文件系统可以通过简单的簿记立即知道这一点。
du
实际遍历目录并计算其内容的总大小。这个速度较慢,但它也更强大:例如,它可以计算单个目录的大小而不是整个文件系统的大小。
答案 3 :(得分:1)
df
和du
是两个不同的实用程序。顾名思义du
Man page of du会估算文件使用情况,而df
Man page of df会报告磁盘使用情况。
df - report file system disk space usage
和
du - estimate file space usage
df
所做的是解析/etc/mtab
文件并使用statfs
报告磁盘使用情况。而du
将解析每个文件的目录存储大小中的所有文件,然后计算与df
相比较繁琐的最终总和。
由于解析文件需要内存访问,因此在操作完成之前会占用CPU。因此,与du相比,df更快