Linux下的文件查找

当计算机中的文件多到一定程度,凭记忆查找特定的文件会变得很麻烦,我们就需要借助一些工具。

大约在十年前,MS Windows 下一款叫的文件查找软件很流行,据说是日常工作的利器。不过,我对这样的小工具不太感兴趣:从十多年前开始,除了要处理必须用 Word 的行政管理类文件,我几乎没怎么用过 Windows,这是原因之一。另一个原因,在 Linux/Unix 下,这样的文件检索工具是系统自带的,没必要为这样的功能去费心寻找软件。这些年来,Linux 下的软件发展很迅速,文件查找类工具也经历过很多演变,不妨小结一下。

文件查找类工具可大致分为两大类:一类是无数据库的遍历检索,其代表是 GNUfindutils套件;另一类是有数据库的缓冲检索,从古老的slocate到现代桌面系统的各类“语义检索”,如 GNOME 下Tracker和 KDE 下的Baloo。不妨分类简介之。

及 GNU findutils

是一个老牌的 Unix 命令,大多数类 Unix 系统中都默认安装了。它能在一或多个目录树下查找并定位文件,对匹配的文件执行相应的操作。其查找功能十分强大,包括通配符、正规表达式运算、类型时间等属性匹配,等等。 是用来查找任意文件的,它需要能够实时访问存储介质。

命令最早在 Unix V5 (1974 年)中引入,并成为 POSIX 系统的一部分。早期的 设计是为了同 命令一起使用,最常见的场景是把特定的文件打包备份到磁带上。

目前使用最多的是 GNU 实现的自由软件 中所包含的 GNU find,它添加了许多传统 Unix 下所没有的特性。在 软件包中还有另一个命令 , 它的主要用于通过管道操作对 的输出进行调整,以便其他命令执行进一步的处理。

熟练使用 , 与其他命令的组合,会让日常文件的维护管理变得很便利。比如,将当前目录下在过去 60 分钟内被修改的实验数据文件全部打包压缩到一个文件中,如下一个命令就足够了:

find . -cmin -60 -iname "*.bin" | xargs tar Jcvf exp-1h.tar.xz

要查找可执行文件、程序参考文档等特殊文件,一般不用 , 而是用 包中提供的 命令,或者用 bash/zsh 等 shell 中内嵌的 及 命令。

命令及其演变

当目录下文件很多时,或者要检索整个系统文件时(比如 ),使用 的检索速度会很慢,这是因为 命令需要实时读取存储介质的索引(也就是文件系统的 inode)。其实,系统中有大量的文件很少会变更,如果把这些文件信息建立一个数据库,再从这个小数据库中查找,就会比检索整个文件系统快很多。这就是 Unix 系统上的 命令所实现的功能。

命令最早于 1983 年出现在 Unix 系统上。其后有多个变种,包括 (a.k.a., Secure Locate), 以及 . 其中 出现最晚,由于其性能比其他几个实现更好,是目前许多 Linux 系统中默认的 命令提供者。其中的 也代表着 , 即合并了以前的多个 命令实现。

命令的使用需要经过如下几步:

安装 软件包,比如

建立文件索引,需要执行命令 , 会创建一个数据文件(大致位于 )

使用 检索文件。

当系统文件有变更时,相应的 数据库也需要变更,因此,使用 包通常需要创建一个系统定时任务 (),让系统在指定时间(如半夜时分)更新该数据库。

语义检索

图形界面是现代桌面型操作系统的标配。这些年来,流行的操作系统中都提供了文件管理器类工具,文件检索也是这类程序的标配功能,并且,现代的文件检索不仅能检索文件名,还能够按关键字检索可读取文档全文。在 Unix/Linux 桌面系统中也具备了相应的功能。这类能够对部分类型的全文及附加属性进行检索的软件叫“语义检索”(semantic searching)。

与 类似,语义检索也需要建立相应的索引数据库。 程序只是对文件名建立一个索引数据库,其刷新数据库和检索的操作都比较快。语义检索的索引数据库通常较大,其中不止包含文件名信息,还有很多文件的关联属性,也就是文件的“元数据”(metadata),如 EXIF 信息、用户添加的标签,等等。相应地,建立语义索引的时间也比较久。

很多人在初次接触到 GNOME Tracker或 Plamsa (KDE) Baloo 时,往往会关闭语义检索功能,就是因为建立语义索引会消耗额外的硬盘空间,并且,其索引守护进程在监视系统文件变更时会降低系统的响应时间。其实,如果系统性能足够,语义检索会给桌面应用带来很多便利。

目前,在 Linux/Unix 下流行的语义检索软件有两个:GNOME 桌面下的Tracker和 KDE 桌面(plasma)下的Baloo(巴鲁)。在图形界面下使用文件浏览器进行检索时,在后台提供支撑的就是这两个软件之一。

GNOME 与

GNOME 桌面的默认文件浏览器是 Nautilus,在其文件检索框内可以按类型、时间、文件名等进行关键字搜索。其后台提供服务的程序是 Tracker.

Tracker 使用 作为数据库引擎,主命令 下有一系列的子命令,提供了文件系统变更监视、检索、SQL 查询、标签管理等功能。不使用图形界面,你也可以在命令行下或脚本中很高效地使用语义检索。

KDE (Plasma) 与 Baloo

KDE 桌面在 4.0 版本初期使用了 Nepomuk 和 Strigi 来提供语义检索功能。Nepomuk 使用RDF尝试将所有的元数据都连接起来。RDF 也是语义网络的信息建模标准,是一项十分先进的技术。可是,处理 RDF 信息在初期需要耗费大量的系统资源和时间,导致系统响应缓慢,数据库也变得很臃肿。从 4.13 版本开始,KDE 桌面检索切换到了 Baloo 引擎,不再使用 RDF 作为中心数据库,而是采用插件的形式来分类处理各种服务。

与 Tracker 类似, Baloo 提供了一个底层命令接口 , 你可以通过这个命令在执行相应的语义检索操作。当然,你可以抛开命令行,通过 Dolphin或 Konqueror 等图形工具进行检索。不过,在一些效率至上的场景下,命令行会比图形操作更便捷。

小结

在 Linux 检索文件有两大类:

这样的实时硬检索工具,它需要遍历文件系统来查找文件,当文件数据庞大时,操作会很慢。

使用数据库进行缓冲的检索工具,包括早期的 及现代的 或 .

在文件刷新迅速的场合,使用 命令快速检索一个目录下的内容会比较恰当。当从很多几乎不再变更的历史文件中检索资料时,使用古老的 或现代的 , 等工具则比较合适。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180610G03P4N00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券