我是一名 Windows 用户,来自 Windows,在搜索文件时需要所有索引和永恒的等待时间,我发现令人惊讶的是它的速度有多快定位工作或自动完成(我知道)在linux中工作。
是否有任何索引正在后台完成或者这是如何实现的?我仍然有一个非常干净的安装,所以也许随着时间的推移这会变坏,但在 Windows 中,当你想要搜索未索引的文件夹时,你必须等待几秒钟。
答案1
我发现在 Linux 中定位工作或自动完成(我知道)工作的速度有多快令人惊讶。 ...是否有任何索引正在后台完成或者这是如何实现的?
这实际上是两个完全不同的问题。
locate
使用索引(slocate 将其存储在 中/var/lib/slocate/
),该索引由夜间作业更新cron
。这个每晚的工作通常大约在当地时间凌晨 1 点或 2 点运行,并完全扫描整个系统(包括所有连接的驱动器)。生成的索引只是一个文件名列表。
自动完成由您的 shell 处理。大多数系统都使用bash
,bash-completion
管理其工作方式的脚本集合也是如此。 (zsh
有一个类似名称的集合,并且大多数其他 shell 都内置某种形式的完成功能。)Tab按下 时,shell 会运行一个脚本,根据您已经输入的内容来决定到底需要什么要完成的。然后,该脚本生成一个可能完成的列表,该列表可能是也可能不是当前目录中的文件列表,或者$PATH
.该locate
命令通常是不是用于此。
答案2
通常,locate 使用每天通过 cron-job 生成一次的索引(例如我系统上的 /etc/cron.daily/mlocate)。它没有做任何花哨的事情,基本上是一个完整的文件系统遍历和一些优化以及索引数据结构的构建。
Shell 可能使用一些内部缓存来完成命令,但不使用全局索引文件。此外,通常,Unix 内核会维护一个 dentry-cache,即它们将目录列表等使用的文件目录信息缓存在内存中(包括不存在文件的统计 - 也称为反向缓存)。