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