搜索文件(查找)或自动完成如何工作?


8

我是Windows用户,来自Windows,具有在搜索文件时的所有索引编制和永恒的等待时间,我感到惊讶的是,定位工作或自动完成(我知道)在Linux中的工作速度有多快。

是否在后台进行任何索引编制或如何实现此目的?我仍然有一个非常干净的安装,因此可能会随着时间的流逝变坏,但是在Windows中,当您要搜索未建立索引的文件夹时,必须等待几秒钟。

Answers:


18

我发现在Linux中定位工作或自动完成(据我所知)有多快令人惊讶。...在后台进行任何索引编制或如何实现?

这实际上是两个完全不同的问题。

locate使用索引(将索引存储在中/var/lib/slocate/),该索引由每夜cron工作更新。这项夜间工作通常在当地时间凌晨1点或凌晨2点运行,并完全扫描整个系统(包括所有连接的驱动器)。生成的索引只是文件名列表。

自动完成由外壳程序处理。大多数系统都使用bashbash-completion用于管理其工作方式的脚本集合也是如此。(zsh具有类似名称的集合,并且其他大多数Shell都具有某种内置的完成形式。)当Tab按下时,Shell运行一个脚本,该脚本根据您已经键入的内容,确切地需要什么来决定要完成的。然后,脚本会生成一个可能完成的列表,该列表可以是也可以不是当前目录中的文件列表或您目录中的可执行文件列表$PATH。该locate命令通常不用于此目的。


1
谢谢!我知道了,所以它不是那么“神奇” :)
oli206 2010年

greyfade永远毁灭了魔法-_-
Michael Mrozek

@Michael Mrozek:对不起。:(
greyfade 2010年

Shell运行的脚本听起来并不是100%正确的,在实施Shell时,不应误导人们以为他们应该编写外部脚本。它只是代码本身的一个例程,为方便配置,它可以访问或不访问外部文件,但是简单的内置完成效果很好。
2012年

1
@NabinKhadka自从我写了答案以来,我认为Ubuntu更改为另一个locate服务。我不知道哪一个-我不使用Ubuntu-但想到了mlocate。检查/etc/updatedb.conf。无论locate您使用哪种工具,它都可能具有默认路径。
greyfade16年

5

通常,locate使用一个索引,该索引每天通过cron-job生成一次(例如,在我的系统上是/etc/cron.daily/mlocate)。它没有任何花哨的地方,基本上是一个完整的文件系统遍历,并进行了一些优化和索引数据结构的构建。

Shell可能会使用一些内部缓存来完成命令,但不会使用全局索引文件。此外,通常,Unix内核维护一个dentry缓存,即,它们将目录列表等使用的文件目录信息缓存在内存中(包括不存在文件的状态-也称为反向缓存)。

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.