locate / whereis /哪个有什么区别


13

locate whereiswhich命令之间的基本区别是什么。

我观察到的基本区别是locate在整个文件系统中找到所有相关文件名,而whereisand which命令仅给出已安装应用程序的位置(文件的系统/本地地址)。我的观察有多准确?

这些命令如何在内部实现。为什么locate与破折号搜索相比,它的工作速度如此之快,而locate必须在整个文件系统层次结构中搜索与目标字符串匹配的特定文件名?


2
那又如何type呢?:P
jamesmstone's

@jamesmstone您是什么意思type,请详细说明
Chinmaya B

2
抱歉,我只是想补充您的问题。type(在我看来)是另一个命令,它与您提到的命令相似。
jamesmstone

@jamesmstone我不认为在我的系统中可以使用任何类型的命令。我找不到该type命令的任何手册或信息页。我试着man typeinfo type
Chinmaya B

嗯,我想知道为什么...您在使用bash吗?
jamesmstone '16

Answers:


17

which查找程序的二进制可执行文件(如果在您的PATH中)。man which解释得更清楚:

如果参数在严格符合POSIX的外壳中作为命令给出,则它返回将在当前环境中执行的文件(或链接)的路径名。它通过在PATH中搜索与参数名称匹配的可执行文件来实现。它不遵循符号链接。

whereis查找程序的二进制文件,源文件和手册页文件。例如

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

您可以通过将这些命令的输出作为参数传递给ls -l或来获得更多细节。file

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locate确实会找到在其路径中任何位置都指定了模式的所有文件。您可以告诉它仅查找名称(而不是完整路径)包含带有模式的-b选项的文件和目录,该选项通常是您想要的,并且列表较少。

locate之所以快速,是因为它使用了定期更新的二进制数据库(每天一次,通过cron)。您可以自己更新它,以确保通过运行找到最近添加的文件sudo updatedb

还有一件事locate-不在乎文件是否仍然存在,因此请避免使用查找最近删除的文件-eless由于列表可能很长,所以我经常也会管道连接到。通常我会:

sudo updatedb && locate -b -e gimp | less

此处解释 Unity破折号的工作原理-它使用Zeitgeist索引系统文件并从使用模式中学习,并使其他应用程序可以利用此数据,因此它要做的工作比得多locate


您可以比较破折号并找到命令性能和实现细节吗?二进制数据库的更新应该在系统中创建任何新文件之后进行,不是这样,期间会无限期正确还是由系统进程管理?
Chinmaya B

2
cron每天都会执行一次@Creator自动更新数据库的操作。您可以检查何时安装了某些无法立即找到文件的文件locate。破折号使用完全不同的索引-速度较慢,因为它执行的工作更多(我编辑了答案)
Zanna

1
因此归纳起来,locate比which或whereis有用且功能更强大,但笨拙而破折号则更强大并实现了机器学习。并感谢sudo updatedb您的命令非常有帮助,尽管我经常使用-e,但它却不知道。
Chinmaya B

@Creator是的,您说得更好:)很高兴它有所帮助
Zanna

0

只是

$ which samba

哪个命令搜索通过PATH设置列出的程序列表

$ whereis samba

whereis命令还会搜索PATH设置中不存在的程序

$locate samba

还按文件名查找文件,但不搜索目录结构本身,而仅搜索由updatedb准备的数据库。因此,定位比查找要快,但准确性较差。例子:

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.