给安全工程师讲透Linux
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4.4 利用find命令执行更强大的搜索

find命令是非常强大而灵活的搜索工具。它能够在任何指定目录中进行搜索,并查找众多不同的参数,其中当然包括文件名称,还包括创建或修改日期、所有者、群组、权限以及大小。

以下是find命令的基本用法:

因此,如果想要从根目录开始搜索一个名为apache2(开源网络服务器)的文件,那么应该进行如下输入:

首先声明要开始搜索的目录,在本例中是/➊。然后,指明待搜索文件的类型,在本例中f代表一个常规文件➋。最后,给定要搜索的文件名称,在本例中是apache2➌。

本次搜索的结果如下所示:

find命令从文件系统的顶端(/)开始,遍历每个目录来查找apache2这一文件名,然后列举查找到的所有实例。

可以想象,一次遍历每个目录的搜索肯定会很慢。一种加速的方法是,只在预计能够找到所需文件的目录中进行遍历。在这种情况下,如果想要寻找一个配置文件,那么我们可以直接在/etc目录中进行搜索,这样Linux系统只会搜索其子目录。让我们来试一试:

这次明显更快的搜索只会在/etc目录及其子目录中查找apache2出现的位置。还要特别注意的是,与其他一些搜索命令不同,find命令只显示与名称严格匹配的结果。如果文件apache2有一个后缀,比如说apache.conf,那么搜索过程将不会发现一个匹配结果。我们可以通过使用通配符来突破这种限制,从而匹配多个字符。通配符主要有三种不同的形式:*、?和[]。

让我们在/etc目录中查找所有以apache2开头、带有任意后缀的文件。对此,我们可以编写一条使用如下通配符的find命令:

当这条命令运行时,我们在/etc目录中发现只有一个文件符合apache2.*的模式。当我们使用点号后跟一个*通配符时,终端会寻找在文件名apache2后带有任何后缀的文件。对于查找不知道后缀的文件,这是一种非常有用的技术。

当这条命令运行时,我在/etc目录中找到两个以apache2开头的文件,其中包括apache2.conf文件。

通配符简单介绍

假设我们正在一个包含文件cat、hat、what和bat的目录中进行搜索。通配符?被用来代表一个单独的字符,因此针对?at的搜索结果将返回hat、cat和bat,而不包括what,因为在该文件名中的at之前存在两个字母。通配符[]用于匹配出现在中括号内的字符。例如,针对[c,b]at的搜索结果将匹配cat和bat,而并不包括hat和what。使用最为广泛的通配符是星号(*),它将匹配任意长度的任意字符,包括从零到无限长度的字符。例如,针对*at的搜索结果将返回cat、hat、what和bat。