我最近试图找到一个具有特定名称的二进制文件。我决定使用whereis
搜索实用程序(util-linux 包的一部分)。与尝试使用类似命令相比,这可以用一半的时间找到文件find
。
我还使用了该locate
命令,该命令产生的速度类似于whereis
.
与find
命令相比,这些命令如何能够如此快速地查找文件?
答案1
find
盲目地遍历整个文件系统来寻找匹配项。它需要很长时间,因为它正在查看每个目录中的每个文件,直到覆盖整个文件系统才停止。
locate
updatedb
还涵盖整个文件系统,但它通过使用预构建的数据库(使用命令更新)来查找匹配文件来 加快速度。
whereis
并且which
还通过目录搜索来查找文件,但它们仅搜索文件系统中非常特定的位置子集(通常由环境变量指定,$PATH
如$MANPATH
适当)。它们还可以阻止第一次发生,从而加快运行时间。