为什么 df 命令可以 return 比 du 更快地使用磁盘
why df command can return fast that with disk usage than du
为什么df命令可以return快速计算每个分区的使用情况,而du需要较长时间才能计算出return的磁盘使用情况。
df 是如何工作的?
因为df
可以使用statfs(2) syscall. But du
is recursively traversing the file hierarchy, à la nftw(3)
一般来说,请记住大多数 Linux 程序和命令是 free software, so you can study their source code. df
is in coreutils
而且您始终可以 strace(1) 一个命令来了解它是哪个系统调用 运行。
根据手册,df - report file system disk space usage
并且,du - estimate file space usage
df
是显示文件系统使用情况,du
是报告文件space使用情况。 du
从文件工作,而 df
在文件系统级别工作,报告内核所说的可用内容。从广义上讲,df
不关心文件,而是文件系统本身。
明智地工作,df
直接在文件系统元数据中查看磁盘使用块。因此它 returns 比 du
快得多,但只能显示整个 disk/partition 的信息。其中,du
遍历目录树并计算其中所有文件的总大小。由于可能存在不可读文件、目录树中的硬链接等,它可能无法输出准确的信息。
编辑
既然你也问了这个问题,df
是如何工作的,如果你同时使用df
和du
,那真的很有趣您可能会发现,有时可用的免费 space 数量存在差异。现在您可能会惊讶地想,两个相似的命令(df
和 du
)怎么可能为同一个硬盘返回不同的空闲 space???
答案就在df
的工作中,
由于 df 与文件系统元数据直接相关,因此它也连接到 打开文件描述符 。假设发生这样一种情况,当一个文件被删除时,可能有其他进程正在打开该文件,导致它不能被删除; (重新启动或终止该进程将释放文件)此外,如果您创建了硬链接,多个文件名将指向相同的数据,并且数据(实际内容)将被标记为 free/usable 直到所有对它的引用都已删除被删除。在这种情况下,df
将考虑这些文件/数据的大小,因此可用 space 会更低。
df
只是告诉您文件系统上的总空闲 space。文件系统可以通过简单的簿记立即知道这一点。
另一方面,du
实际上遍历一个目录并计算其内容的总大小。这速度较慢,但也更强大:例如,它可以计算单个目录的大小而不是整个文件系统。
df
和 du
是两个不同的实用程序。顾名思义,du
Man page of du will estimate file usage whereas df
Man page of df 将报告磁盘使用情况。
df - report file system disk space usage
和
du - estimate file space usage
df
所做的是解析 /etc/mtab
文件并使用 statfs
报告磁盘使用情况。而 du
将解析每个文件的目录存储大小中的所有文件,然后计算最终总和,这与 df
所做的相比是乏味的。
因为解析文件需要内存访问,这反过来占用 CPU 直到操作完成。因此 df 比 du
更快
为什么df命令可以return快速计算每个分区的使用情况,而du需要较长时间才能计算出return的磁盘使用情况。
df 是如何工作的?
因为df
可以使用statfs(2) syscall. But du
is recursively traversing the file hierarchy, à la nftw(3)
一般来说,请记住大多数 Linux 程序和命令是 free software, so you can study their source code. df
is in coreutils
而且您始终可以 strace(1) 一个命令来了解它是哪个系统调用 运行。
根据手册,df - report file system disk space usage
并且,du - estimate file space usage
df
是显示文件系统使用情况,du
是报告文件space使用情况。 du
从文件工作,而 df
在文件系统级别工作,报告内核所说的可用内容。从广义上讲,df
不关心文件,而是文件系统本身。
明智地工作,df
直接在文件系统元数据中查看磁盘使用块。因此它 returns 比 du
快得多,但只能显示整个 disk/partition 的信息。其中,du
遍历目录树并计算其中所有文件的总大小。由于可能存在不可读文件、目录树中的硬链接等,它可能无法输出准确的信息。
编辑
既然你也问了这个问题,df
是如何工作的,如果你同时使用df
和du
,那真的很有趣您可能会发现,有时可用的免费 space 数量存在差异。现在您可能会惊讶地想,两个相似的命令(df
和 du
)怎么可能为同一个硬盘返回不同的空闲 space???
答案就在df
的工作中,
由于 df 与文件系统元数据直接相关,因此它也连接到 打开文件描述符 。假设发生这样一种情况,当一个文件被删除时,可能有其他进程正在打开该文件,导致它不能被删除; (重新启动或终止该进程将释放文件)此外,如果您创建了硬链接,多个文件名将指向相同的数据,并且数据(实际内容)将被标记为 free/usable 直到所有对它的引用都已删除被删除。在这种情况下,df
将考虑这些文件/数据的大小,因此可用 space 会更低。
df
只是告诉您文件系统上的总空闲 space。文件系统可以通过简单的簿记立即知道这一点。
du
实际上遍历一个目录并计算其内容的总大小。这速度较慢,但也更强大:例如,它可以计算单个目录的大小而不是整个文件系统。
df
和 du
是两个不同的实用程序。顾名思义,du
Man page of du will estimate file usage whereas df
Man page of df 将报告磁盘使用情况。
df - report file system disk space usage
和
du - estimate file space usage
df
所做的是解析 /etc/mtab
文件并使用 statfs
报告磁盘使用情况。而 du
将解析每个文件的目录存储大小中的所有文件,然后计算最终总和,这与 df
所做的相比是乏味的。
因为解析文件需要内存访问,这反过来占用 CPU 直到操作完成。因此 df 比 du
更快