Blog

更新 Mac OS X 的 locate 数据库

什么样的操作系统早就什么样的操作习惯。

在过去用 Gentoo 的时候,很多动作都是在终端下面完成的。而在 Mac OS X 中,我虽然每次开机后一定要启动的程序就包括了终端,但很多动作都无法在这边完成了。久而久之,我对这些动作的命令也记不太清了。

印象里过去在 Gentoo 时用的很多的一个命令就是 locate。有的时候需要在硬盘上寻找某个文件,相对于 find 那些繁杂的参数,locate 是最简单的了。其实 locate 就是一个 find 加强版前端。它维护一个数据库,提前运行 find 命令来遍历硬盘上的文件,把结果存放在数据库中,调用 locate 的时候就是从数据库里搜索。这样无论是便利上还是速度上都非常不错。

虽然在 Gentoo 下面我也运行 beagle,但我用的并不多。我当时看到 Nat Friedman 的 Beagle 演示视频 感觉非常不错,可当我实际上使用后发现它并不适合我。一是它的速度比较慢,我印象里理想的桌面搜索应该就像在一份文档里执行查找命令那样,不光可以立即到达搜索的地方,而且可以增量搜索。可我实际上使用起 Beagle 来看,它的效率还达不到。另一方面可能是桌面搜索本身的问题了,有时候我会思考我为什么要搜索桌面。或许我使用计算机主要的作用不是文档方面吧。如果我要管理一系列文档,或者需要与其他人进行事物性互动,我可能会觉得桌面搜索有用。而把计算机用来编程的话,我感觉桌面搜索的方向不对。

我在看了 Mac OS X 的一些介绍后,曾经非常喜欢里面的 Spotlight 桌面搜索。觉得这是把桌面搜索完美的结合到了日常事物当中去了。可实际上使用了 Mac 后,我感觉并不是那么一回事。首先是速度还是太慢,或许硬件提升之后会有改善,但我目前使用的 MacBook(2.4G / 2G)无法达到要求。其次在使用起来它也并不是很方便。所以有时我更喜欢用 Linux 下的 locate 搜索。

或许 Apple 本身并无意让用户过多的接触 UNIX 下的一些工具,所以我觉得相比起 Gentoo 下的 locate, Mac OS X 下的 locate 在便利性上差了一些。主要是一些辅助工具。我在开始用 Mac OS X 下的 locate 时,把过去知道的创立数据库的命令尝试了个遍,就是没有可行的。后来搜索网络才找到了正确的命令,不过这命令也太变态了吧,完全没有过去的那种方便直观。

我在那篇文章中说,那个命令是用来创建数据库的,而我当时还没有找到更新用的命令,留在以后找到了再补充。今天想用 locate 搜索 magit 安装的文件时忽然想起了这件事,就专门搜索了一下,找到了更新数据库的命令:

sudo /usr/libexec/locate.updatedb

运行之后,系统会调用 find 来更新数据库,所以会占用一些 CPU 资源。具体耗时要看硬盘上的文件比上次更新数据库有了多少改动。

我现在离过去用 Gentoo 的时间有点长了,对于当时是怎么更新数据库的没有印象了。我忘了是我定期手动执行命令来更新还是放在脚本里定期运行的。不过好在更新了数据库之后,locate 又可以使用了。我尝试了一下,速度明显比桌面搜索来的快。用文件名搜索也非常精准。

没有评论

Leave a Reply