文章目录
前言
文件搜索是一个很耗费系统资源的操作,我们应该尽量少执行这样的操作,特别是不要在服务器高峰时期进行查找,而且搜索范围越小越好。
find 命令
该命令可用于文件搜索,其语法为;
find [搜索范围] [匹配条件]
根据文件名搜索
一般我们用的最多的就是根据文件名搜索,这个在 Linux 中需要使用 -name 选项,例如,如果我们需要在目录 /etc 中查找文件 init,命令可以这么写:
注意,在这里 Linux 与 Windows 不同,Windows 搜索文件 init,会返回文件名包含 init 的所有结果,举个例子,文件名 initabc 与 文件名 init 都是符合 Windows 规范的,但是在 Linux 中,你要搜索文件 init,就只会给你返回文件名恰好为 init 的文件,其它的不会返回,例如文件名为 initabc 的文件,是不会被返回的。
那如果我们在 Linux 中想像 Windows 一样,返回文件名中包含 init 这个字符串的所有文件,怎么做呢?使用通配符就可以了,例子如下:
在 init 前后加上通配符之后,表示我们匹配所有文件名包含 init 这个字符串的文件。
根据文件大小进行搜索
如果需要根据文件大小进行搜索,我们要用到 -size 这个选项。
下面我们有个需求,需要找到根目录下所有大于 100M 的文件,这怎么实现呢?这就需要用到我们提到过的 -size 这个选项了,命令如下:
咦,我们不是说要查找大于 100M 的文件吗?怎么给我整了个 +204800 出来?其实,这个数字是这么理解的,数字前面加上 + 表示大于,加上 - 表示小于,什么都不加表示等于。后面的数字,其实表示的是有几个数据块,又因为一个数据块表示 0.5KB,故 100M 就可以等价为 204800。
根据文件所有者进行搜索
如果要根据文件所有者进行搜索,我们可以使用 -user 选项,举个例子,现在我们需要在 /tmp 目录下查找文件所有者为 ling 的所有文件,命令应该这么写。
可以发现,Linux 给我们显示了 /tmp 目录下所有文件所有者为 ling 的文件。
如果我们需要根据文件的所属组进行查找,那么又该怎么办呢?其实根据所属组查找与根据所有者大同小异,只不过根据所属组查找需要加上的选项为 -group 罢了。
根据文件内容进行搜索
在 Linux 中,我们可以查找在一段时间内被修改过的文件或目录,其中,-amin 查找一段时间内被访问的文件或目录,-cmin 查找一段时间内被修改过文件属性的文件或目录,-mmin 查找一段时间内被修改过文件内容的文件。
我们举个例子,如果需要在 /var 中查找在十分钟之内被修改过文件属性的文件或目录,命令可以这样写。
多条件搜索
如果我们需要根据多个条件进行搜索,我们需要用到一些用于关联条件的选项,例如,-a 选项表示两个条件需要同时满足,-o 选项则表示两个条件满足其中一个即可。
对搜索出来的文件进行操作
如果我们需要对搜索出来的文件进行操作,可以使用 -exec 选项,使用 -exec 命令 {} \;
可以对搜索结果进行相应的操作,例如,我们需要搜索出 /etc 目录下所有 init 文件且显示其详细信息,命令应该这么写。
现在我们能够获取 /etc 目录下所有 init 文件的详细信息了。
我们也可以使用 -ok 选项来代替 -exec 选项,其实它们的功能一样,只不过 -ok 选项会比 -exec 多一步,会在操作之前进行询问确认。
locate 命令
该命令用户在文件资料库中查找文件,命令格式如下:
locate 文件名
该命令由于是在文件资料库中直接查找而不是遍历所有文件,故这个操作是很快的,不过它也存在一些问题,比如,文件资料库是定时更新的,有可能出现你新建了一个文件但是未被文件资料库收录导致查找失败的情况,另外,有一些目录,例如存放临时文件的目录,并不在文件资料库的收录范围以内,locate 是没有办法找到这些目录下的文件的。
which 命令
一般来说,存放在 /bin 和 /usr/bin 下的命令,是所有用户都可以执行的,而存放在 /sbin 和 /usr/sbin 下的命令,只有 root 可以执行。那么,我怎么知道一个命令是存放在哪一个目录下的呢?固然我们可以使用 find 这个命令,不过 Linux 给我们提供了一种查找命令的快捷方式 – which 命令。
which 命令用于搜索命令所在目录及别名信息,其语法如下:
which 命令
例如,如果我们想搜索 ls 命令所在目录,可以这么写命令:
whereis 命令
该命令功能与 which 命令功能类似,只不过它用于搜索命令所在目录及帮助文档路径,其语法也与 which 命令一致。
如果我们想搜索 ls 命令的所在目录及帮助文档路径,可以执行以下操作:
grep 命令
该命令用于在文件中搜寻字串匹配的行并输出,其中,-i 选项表示不区分大小写,-v 选项表示排除指定字串。该命令语法如下:
grep -iv [指定字串] [文件]
例如,如果我们需要在 /etc/services 文件下查找包含 bcs-broker 这个字符串的行并输出,可以执行以下操作。