文件搜索命令locate的用法

2017-03-28 15:01 阅读 636 次 评论 0 条

先为大家介绍一款在Windows平台下的快速搜索软件:Everything。在使用Everything进行文件搜索时,实际上是非常迅速的,这时因为Everything是根据NTFS记录日志来遍历搜索的。像这种快速查找是否在我们的Linux中也有诸如此类的呢?今天就给大家介绍Linux下的快速查找命令。

文件搜索命令locate

当你使用locate [文件名],比如locate init时,所有包含init的文件或目录在一瞬间搜索完。成百上千的文件或路径在1秒左右就可以匹配出来。

那么为什么locate搜索速度可以如此之快呢,原因就在于它在系统中有它自己维护的文件资料库。现在我们用locate来搜索locate:

这样你会匹配出很多信息,找到如上图所示名字,这个就是他的文件资料库,系统中所有的文件都会定期收录到这个文件库中。它不会像find那样在某一个目录、某一个分区、某一个硬盘上来查找,而是直接到这个资料库中匹配。

凡事都有其两面性,locate带给我们快速的同时,是否有弊端呢?你可能已经注意到locate是定期将数据收录到自己的资料库,那么是否就会存在更新资料库的时间盲区呢?

首先我们创建一个myLinux目录,ls查看一下的确在当前目录下,但是当我们locate myLinux时,发现未查询到这个目录。

此时,我们用find命令在当前目录查找,发现成功匹配到myLinux这个目录,这也就奠定了locate的弊端是无可争议的。

那么是否locate以后就不能用了呢?其实不然,既然locate自身具有定期才能更新数据的功能,那么我们完全可以手动来更新文件资料库。

我们可以使用updatedb来更新文件资料库,然后用locate查询myLinux的时候会发现搜索成功。

那么请看下面这个例子,你会发现,即使你updatedb更新了文件资料库,locate也无法查询出刚创建的文件或目录。

我们发现,当我们在/tmp临时目录下创建一个MyFiles的文件,updatedb文件资料库后,用locate搜索时却无法搜索到,但用find却可以搜索到。因为该文件存在于/tmp目录下,不再文件资料库的涉猎范围内,因此也就无从谈起搜索到此文件/目录。

补充一点:locate在匹配的时候是严格控制大小写的,因此如果想让匹配不区分大小写,可以效仿find那样在locate后面加上-i选项。

总结:locate它在系统中有它自己维护的文件资料库,具有定期更新数据的能力,其搜索能力非常快,但是刚创建的目录或文件时无法搜索到的,因为locate存在一个更新盲区,需要updatedb更新资料库才可以搜索到。如果文件恰好创建在临时目录/tmp下是不能被搜索到的,因为locate的资料库不会收录此目录下的数据。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:文件搜索命令locate的用法 | 术与道的分享
分类:操作系统 标签:,
1024do.com导航_术与道导航平台

发表评论


表情