Linux 从入门到跑路第五讲 -- 文件搜索命令

前言

文件搜索是一个很耗费系统资源的操作,我们应该尽量少执行这样的操作,特别是不要在服务器高峰时期进行查找,而且搜索范围越小越好。

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 这个字符串的行并输出,可以执行以下操作。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值