为什么'locate'或'find'找不到'makeinfo'?

为什么'locate'或'find'找不到'makeinfo'?

当我做:

locate makeinfo

或者

find / -name "*makeinfo*"

我什么也没得到。

但是当我这样做时makeinfo --help,它会给我正确的帮助输出。

这怎么可能?如果makeinfo是可执行文件,则必须位于某处, 正确的?或者它可以是别名,但事实并非如此。我检查了.bashrc以及.bash_aliases所有这些文件。我无法想象这是怎么发生的。

这种奇怪行为的原因是什么?

编辑:type makeinfo并且which makeinfo都输出/usr/bin/makeinfo.

答案1

我发现了问题。

看起来速度locate很快,因为它依赖于它构建的数据库来更快地搜索内容。该数据库每天更新。该updatedb命令执行此操作。事实证明,updatedb每 24 小时运行一次,而当我尝试使用 , 搜索文件时locate,从文件创建之日起,24 小时还没有过去。运行后sudo updatedb,locate 能够找到该文件。

locate我建议阅读和的联机帮助页updatedb以获取更多信息。

至于find,我似乎很不耐烦,没有等到它执行完毕。

答案2

我不太使用或了解“locate(1)”。但是“find(1)”可能无法找到您的命令,因为它默认情况下不会跨文件系统行。 makeinfo 命令可能位于 /usr/bin 中(键入which makeinfo即可找到它),而“/usr”分区可能位于另一个文件系统上。

编辑: 哦!我看到问题了!不要使用“*makeinfo*”。使用“makeinfo”。如果您确实想查找其中某处包含字符串“makeinfo”的文件,请使用:find / -type f -name '*makeinfo*'。也就是说,仅与文件(而不是目录——更快)进行比较,并使用单引号,而不是双引号。

最终编辑:我的答案是/way/off。他的问题与双引号无关。

相关内容