这篇文章主要介绍linux中定位文件位置相关命令的用法。
目录
- 一、比较
- 二、find
- 三、whereis
- 四、which
- 五、locate
一、比较
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程序用的。