Linux 中locate
和有什么区别?which
为什么当我使用时locate mentor
它会列出所有的导师但是当我使用时which mentor
它说“没有导师......” - 这是什么意思?
答案1
locate
和有什么区别which
?
locate
使用先前建立的数据库来定位文件。
locate
读取由updatedb
(8) 准备的一个或多个数据库,并将与至少一个 PATTERN 匹配的文件名写入标准输出,每行一个。
updatedb
创建或更新 (1) 使用的数据库locate
。如果数据库已存在,则将重用其数据,以避免重新读取未更改的目录。
updatedb
通常由(8)每天运行cron
以更新默认数据库(/var/lib/mlocate/mlocate.db
)
which
通过在环境变量中的目录中搜索来查找可执行文件PATH
。
which
接受一个或多个参数。对于每个参数,它会打印出stdout
在 shell 提示符下输入此参数时将执行的可执行文件的完整路径。它通过在环境变量中列出的目录中搜索可执行文件或脚本来实现此目的PATH
。
bash
使用与(1)相同的算法。
locate mentor
列出了导师,但which mentor
说“没有导师……”
这意味着什么?
mentor
您有一些可以在数据库中找到的文件locate
。
您没有以 命名的可执行文件或mentor
脚本PATH
。
答案2
which
是定位一个命令(which
返回在当前环境中执行的文件/链接的路径名)
locate
是通过名称查找文件(locate
读取一个或多个数据库准备的updatedb
并将与至少一种模式匹配的文件名写入标准输出,每行一个)
答案3
locate
默认采用 glob 模式(也可以使用正则表达式模式)并在数据库中搜索/var/lib/mlocate/mlocate.db
与该模式匹配的任何文件名。
which
是在环境变量解释的目录中搜索命令的完整路径的命令PATH
。