linux命令:定位文件位置(find、whereis、which、locate)

这篇文章主要介绍linux中定位文件位置相关命令的用法。

一、比较

1、find
  硬盘搜索,查询速度较慢,但是输出准确
2、locate
  数据库查询,由于该数据库不是实时更新,故存在新建文件查询不到、已删文件的脏读问题查询速度快
3、which
  主要用于可执行文件的查询
4、whereis
  定位可执行文件源文件帮助文件位置。查询数据库,速度较快存在输出数据不准确的问题。

二、find

1、语法

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

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

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

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

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

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

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

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

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

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

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

(6)-cmin 选项
  查找指定时间内文件属性被改变了的文件,单位是分钟;
  用法与 -amin 选项一样,但是功能不同。

(7)-mmin 选项
  查找指定时间内文件内容被改变了的文件,单位是分钟;
  用法与 -mmin 选项一样,但是功能不同。

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

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

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

find /etc -type f

三、whereis

1、语法

whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]

whereis指令会在特定目录中查找符合条件的文件。这些文件的属性应属于原始代码二进制文件,或是帮助文件

2、参数说明

参数 说明
-b 只查找二进制文件。
-B<目录> 只在设置的目录下查找二进制文件。
-f 不显示文件名前的路径名称。
-m 只查找说明文件。
-M<目录> 只在设置的目录下查找说明文件。
-s 只查找原始代码文件。
-S<目录> 只在设置的目录下查找原始代码文件。
-u 查找不包含指定类型的文件。

四、which

1、语法

which [文件...]

which是通过PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件
  在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

2、参数说明

参数 说明
-n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息

五、locate

1、安装

yum search locate

2、语法

locate [-d ][--help][--version][范本样式...]

使用 -i 选项可以忽略大小写。
  locate 命令与 find -name 命令功能一样,可以用来查找文件或目录 ,但是要比 find 命令查找起来速度快很多。这是因为 locate 命令并不搜索具体的目录,而是搜索一个数据库 /var/lib/mlocate/mlocate.db。这个数据库包含本地绝大多数文件的信息(不包括 /tmp 目录下的文件)。Linux 系统会自动创建这个数据库,并且每天都会自动更新一次
  locate 命令所搜索的数据库不是即时更新的。因此,如果你新创建了一个文件,想要立即使用 locate 搜索这个文件,是搜索不到的;同样,如果你删除了一个文件,然后立即使用 locate 命令,仍然可以搜索到这个文件。因此,在使用 locate 命令之前,我们希望数据库是更新了的,可以使用 updatedb 命令手动更新数据库(首次安装locate后,最好也先执行updatedb命令),然后再使用 locate 命令,就不会出现上述问题了。此外, /tmp 目录不在 mlocate.db 的查找范围内,因此如果你在 /tmp 目录下新建了一个文件,然后更新数据库,再使用 locate 命令查找,也是查找不到的。

3、注意
  locate命令是通过文件名称查找文件所在位置的。
  whereis命令是查找bin程序用的。

猜你喜欢

转载自blog.csdn.net/qq_16268979/article/details/128280151