linux下which的原理,Linux下4个查找命令which、whereis、locate、find详细讲解及区别分析...

Linux 提供了许多用于文件搜索的命令,这些命令都很强大,但是也有一些不同之处,这里分别介绍一下。

一、find 命令

find 是最常见和最强大的一个文件搜索命令。使用 find 命令可以在指定目录中搜索指定的文件。语法如下:

find [目录] [选项] [动作]

其中,目录是 find 命令将要去搜索的目录,包括该目录及其子目录,默认情况下是当前目录及其子目录;选项指定以何种方式查找文件;动作指定要查找哪些文件,动作可以是一个字符串,也可以是一个正则表达式。

由于 find 命令是对整个磁盘进行搜索,因此搜索速度会比较慢,但是如果有这个文件的话,一定可以找到。为了加快 find 查找的速度,在使用 find 命令时,最好不要直接在根目录下进行查找,搜索目录越小越好,搜索条件越精确越好。

find 命令常见选项

1)-name 、-iname 选项:根据指定的文件名查找文件,其中使用 -iname 可以忽略大小写;

find [目录] -name [文件名]

需要注意的是,find 命令是精准搜索,即精准的搜索指定目录下与文件名完全匹配的文件,如果需要模糊搜索的话,可以使用正则表达式。简单举个例子:

1b4c444f13f50d7f02962388eb48101e.png

6a3cf9ff98da296ca4ed424b7ec477d4.png

2)-size 选项:根据指定的文件大小查找文件;

-size 选项后面的动作是指定的文件大小,可以在动作前加上 + / - 符号来表示查找大于 / 小于指定大小的文件,不加则表示查找等于该指定大小的文件。查找文件的默认单位是块( 1 块 = 512 字节 = 0.5KB),可以在数字后面添加指定字符来改变单位,常用的单位有 c (字节)、k(k字节)、M(M字节)、G(G字节)。

find [目录] -size [+/-]unitsize

以下面这一个目录中的文件为例,演示一下 -size 选项的用法:

83a57df17b92bf3d76a703ca1f520c66.png

e9cc06b5fc5e73f9d52a09837b9e07a9.png

8251f27128d1b6feb38f8e0d2c4f0b4c.png

681c1302765793fdb050068d49d1b2bb.png

需要注意的是,默认单位为块,一个文件块是 512 字节,当一个文件小于 512 字节时,也是会被当成一个块的大小来对待的。

3)-user 选项:搜索指定所有者的文件;

4)-group 选项:搜索指定组的所有文件;

5)-amin 选项:查找指定时间内被访问的文件,单位是分钟;

find /etc -amin -5// 查找 /etc 目录下5分钟内被访问过的文件

find /etc -amin +5// 查找 /etc 目录下5分钟之前被访问过的文件

140ec96e20bac32106f6790a531b675c.png

在这个例子中,我首先使用 vim 打开了 add.c 文件,然后使用 find 命令的 -amin 选项搜索被访问的文件。

6)-cmin 选项:查找指定时间内文件属性被改变了的文件,单位是分钟;

用法与 -amin 选项一样,但是功能不同。

7)-mmin 选项:查找指定时间内文件内容被改变了的文件,单位是分钟;

用法与 -mmin 选项一样,但是功能不同。

8)-a 选项:and,用于连接两个条件,表示要两个条件同时满足;

a8e36b63af88efc74fe64410df3b1567.png

还是以上面的 HelloWorld 目录为例,这里使用 -a 选项查找该目录下文件大小在 200 字节到 500 字节之间的文件。

9)-o 选项:or,用于连接两个条件,表示两个条件满足一个即可;

10)-type 选项:根据文件类型查找,后面可以接 f、d、l,分别代表文件类型、目录类型和软链接文件。

find /etc -type f

40d4a0c2049fa29ef6a49d692d33ad70.png

二、which 命令

which 命令可以用于搜索一个命令所在的目录及其别名信息。语法如下:

which 命令名

a6ee48456e8cd1fb39ec53db78e1ca9f.png

三、whereis 命令

whereis 命令可以用来搜索一个命令所在的目录以及其 man 手册等相关文件的路径。

2fe33e7201246768eb28752d28c4b358.png

四、locate 命令

locate 命令与 find -name 命令功能一样,可以用来查找文件或目录 ,但是要比 find 命令查找起来速度快很多。这是因为 locate 命令并不搜索具体的目录,而是搜索一个数据库 /var/lib/mlocate/mlocate.db。这个数据库包含本地绝大多数文件的信息(不包括 /tmp 目录下的文件)。Linux 系统会自动创建这个数据库,并且每天都会自动更新一次。locate 命令的语法如下:

locate 文件名

1a407d00bddb54ab8c3cb357a787f388.png

需要注意的是,locate 命令所搜索的数据库不是即时更新的。因此,如果你新创建了一个文件,想要立即使用 locate 搜索这个文件,是搜索不到的;同样,如果你删除了一个文件,然后立即使用 locate 命令,仍然可以搜索到这个文件。因此,在使用 locate 命令之前,我们希望数据库是更新了的,可以使用 updatedb 命令手动更新数据库,然后再使用 locate 命令,就不会出现上述问题了。此外, /tmp 目录不在 mlocate.db 的查找范围内,因此如果你在 /tmp 目录下新建了一个文件,然后更新数据库,再使用 locate 命令查找,也是查找不到的。

使用 -i 选项可以忽略大小写。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中有多种用于查找文件和目录的指令,下面是对which、whereis、locate、find和grep指令的介绍以及示例: 1. which:用于查找可执行文件的路径。它会在环境变量$PATH指定的路径中搜索指定的命令,并返回第一个匹配到的完整路径。 示例:假设我们要查找命令ls的路径,可以使用以下命令: ``` which ls ``` 输出结果可能是:/bin/ls 2. whereis:用于查找二进制文件、源代码文件和帮助文档的路径。它会在特定的目录中搜索指定的文件,并返回相关信息。 示例:假设我们要查找命令ls的二进制文件、源代码文件和帮助文档的路径,可以使用以下命令: ``` whereis ls ``` 输出结果可能是:/bin/ls /usr/share/man/man1/ls.1.gz 3. locate:用于快速查找文件或目录。它会在系统预先建立的数据库中搜索匹配的文件或目录,并返回结果。 示例:假设我们要查找所有以.txt结尾的文件,可以使用以下命令: ``` locate *.txt ``` 输出结果可能是:/home/user/file1.txt /home/user/file2.txt /var/log/file3.txt 4. find:用于在指定目录下递归地搜索文件和目录。它可以根据不同的条件进行搜索,并返回匹配的结果。 示例:假设我们要在当前目录下查找所有以.txt结尾的文件,可以使用以下命令: ``` find . -name "*.txt" ``` 输出结果可能是:./file1.txt ./file2.txt ./dir1/file3.txt 5. grep:用于在文件中搜索指定的模式。它可以根据正则表达式匹配文本,并返回匹配的行。 示例:假设我们要在文件file.txt中查找包含"hello"的行,可以使用以下命令: ``` grep "hello" file.txt ``` 输出结果可能是:This is a hello world example.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值