whereis
Ubuntu 上的、locate
和命令有什么区别find
?从搜索的角度来看,它们的基本区别是什么?
答案1
find 程序搜索目录树以查找文件或文件组。它遍历目录树并报告所有符合用户要求的文件。find 程序具有非常强大的搜索功能。
定位程序会扫描一个或多个文件名数据库并显示所有匹配项。如果文件在上次文件名数据库更新期间存在,则可将其用作非常快速的查找命令。
find
当您想按特定标准进行搜索并操作文件时,您可以使用它。它有比这更多的选项,因此locate
可以更精细地控制结果。它很慢,因为它对每个文件执行请求的测试以查看它是否匹配。
locate
用于快速扫描整个系统以查找某些内容 - 当您不知道某些内容在哪里,或者想要查找分散在各个未知位置的所有相关文件时,您可能会使用它。它速度很快,因为它使用二进制数据库来索引系统。要显示新文件,请先运行sudo updatedb
(它每天更新一次的数据库cron
该whereis
命令仅返回可执行文件、手册页和程序源代码的位置(参见man whereis
)
答案2
最大的区别是,find
搜索真实文件时会沿着给定的目录递归,而locate
搜索数据库时则不需要特定的目录。因此,如果您在更新数据库之前保存了文件,find
则会找到它,但locate
不会找到它。
至于whereis
和which
,它们仅在 PATH 变量中提到的目录中搜索,并且仅搜索具有可执行权限集的目录