Answers:
我发现在Linux中定位工作或自动完成(据我所知)有多快令人惊讶。...在后台进行任何索引编制或如何实现?
这实际上是两个完全不同的问题。
locate
使用索引(将索引存储在中/var/lib/slocate/
),该索引由每夜cron
工作更新。这项夜间工作通常在当地时间凌晨1点或凌晨2点运行,并完全扫描整个系统(包括所有连接的驱动器)。生成的索引只是文件名列表。
自动完成由外壳程序处理。大多数系统都使用bash
,bash-completion
用于管理其工作方式的脚本集合也是如此。(zsh
具有类似名称的集合,并且其他大多数Shell都具有某种内置的完成形式。)当Tab按下时,Shell运行一个脚本,该脚本根据您已经键入的内容,确切地需要什么来决定要完成的。然后,脚本会生成一个可能完成的列表,该列表可以是也可以不是当前目录中的文件列表或您目录中的可执行文件列表$PATH
。该locate
命令通常不用于此目的。
locate
服务。我不知道哪一个-我不使用Ubuntu-但想到了mlocate。检查/etc/updatedb.conf
。无论locate
您使用哪种工具,它都可能具有默认路径。
通常,locate使用一个索引,该索引每天通过cron-job生成一次(例如,在我的系统上是/etc/cron.daily/mlocate)。它没有任何花哨的地方,基本上是一个完整的文件系统遍历,并进行了一些优化和索引数据结构的构建。
Shell可能会使用一些内部缓存来完成命令,但不会使用全局索引文件。此外,通常,Unix内核维护一个dentry缓存,即,它们将目录列表等使用的文件目录信息缓存在内存中(包括不存在文件的状态-也称为反向缓存)。