在Linux中locate和which之间的区别


27

locatewhichLinux 和有什么不一样?

为什么当我使用locate mentor它时会列出所有导师,但是当我使用which mentor时却说“在...中没有导师”-这是什么意思?



也有wherewhereis
2016年

在bash中,首选:type -all acommand。而且,如果我阅读了问题背后的XYProblem:您有一个命令,则可以通过locate看到它,但是不能执行它?然后在您的特定用户的~/.profile文件中,或者如果您确信自己知道要做什么,则在全局/etc/profile文件中编辑PATH [警告:如果在其中添加错误的路径,则可能会破坏系统脚本(可能还会破坏很多操作系统)。 / etc / profile的$ PATH ...(例如:包含通常在elswhere中找到的命令的路径)。建议仅在变量的末尾添加。并且请不要 在该路径中放置::.任何位置。
奥利维尔·杜拉克

Answers:


45

locate和之间有什么区别which

locate 使用以前建立的数据库来定位文件。

locate读取由updatedb(8)准备的一个或多个数据库,并将至少匹配PATTERN之一的文件名写入标准输出,每行一个。

源代码定位(1)-Linux手册页

updatedb创建或更新locate(1)使用的数据库。如果数据库已经存在,那么将重用其数据,以避免重新读取未更改的目录。

updatedb通常每天cron(8)运行,以更新默认数据库(/var/lib/mlocate/mlocate.db

源码更新b (8)-Linux手册页


which通过在PATH环境变量的目录中搜索可执行文件来查找可执行文件。

which接受一个或多个参数。对于其每个参数,它将打印到stdout在shell提示符下输入该参数时将要执行的可执行文件的完整路径。它通过在环境变量中列出的目录中搜索可执行文件或脚本来完成此操作PATH

使用与bash(1)相同的算法。

来源which(1)-Linux手册页


locate mentor列出导师,但which mentor说“ ...中没有导师”

这意味着什么?

您有一些名为的文件mentor,可以在locate数据库中找到它们。

你没有一个可执行文件或脚本命名为mentor您的PATH


2
“ updatedb”-很高兴知道,不仅仅是Microsoft提供了一些过于具体的名称。(在Win32中,DeleteObject删除GDI对象,CloseHandle关闭内核句柄,等等。类似地updatedb更新locate数据库)
user253751

如果您可能在路径的不同位置出现同一程序的多个版本,那么“哪个”也特别有用,因此它告诉您在运行命令时实际执行的是哪个程序。这在诊断意外行为之前对我很有帮助-例如,它帮助我意识到我在系统上留下了手动安装的实用程序版本,因此它覆盖了程序包管理器安装的版本。
Carcer 16年

11

which是查找命令(which返回将在当前环境中执行的文件/链接的路径名)

locate用于按名称查找文件(locate读取由一个或多个数据库准备的数据库,updatedb并将与至少一种模式匹配的文件名称写入标准输出,每行一个)


2
请提供您来源的来源-答案中的描述直接来自这些实用程序的手册页。
恢复莫妮卡iamnotmaynard '16

5

locate默认情况下采用glob模式(也可以使用Regex模式),并在数据库中搜索/var/lib/mlocate/mlocate.db与该模式匹配的任何文件名。

which是一个命令,用于在PATH环境变量解释的目录中搜索命令的完整路径。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.