locate命令
locate命令配合后台数据库搜索,搜索速度快。
命令格式:locate 文件名
在后台数据库中按文件名搜索,搜索速度更快。
locate所搜索的后台数据库:/var/lib/mlocate
数据库名称可能随linux版本不同而不同。数据库更新频率为一天一次,不是实时更新。
更新数据库: updatedb
使用前可以强制更新数据库!
locate配置文件:/etc/updatedb.conf
// /etc/updatedb.conf 内容
// 开启搜索限制
PRUNE_BIND_MOUNTS = "yes"
// 搜索时,不搜索的文件系统
PRUNEFS=
// 搜索时,不搜索的文件类型
PRUNEPATHS=
// 搜索时,不搜索的路径
PRUNEPATHS=
locate缺点:只能按照文件名搜索
//新建文件
$touch newfile
$locate newfile // 找不到新建的文件
// 使用更新数据库命令
$updatedb
$locate newfile
$/home/hello/newfile
// 为什么有的文件无法搜索到?
// 原因:可能与locate配置文件的配置有关,如某些路径或文件类型不搜索
$touch /tmp/newfile
$locate newfile // 找不到/tmp/newfile文件
搜索命令的命令whereis和which
whereis命令
搜索命令所在的路径及帮助文档所在位置
选项:
-b : 只查找可执行文件
-m : 只查找帮助文件
-u:没有说明文档的文件
-s:只找 source 源文件
$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
$ whereis -b ls
ls: /bin/ls
注:和 find 相比,whereis 查找的速度非常快,这是因为 linux 系统会将系统内的所有文件都记录在一个数据库文件中,当使用 whereis和下面介绍的locate 时,会从数据库中查找数据,而不像 find 命令那样,通过遍历银盘来查找,效率自然会很高。但是该数据库文件并不是实时更新,默认情况下一星期更新一次,因此,我们用 whereis 和 locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立的文件却无法查找到,原因就是因为数据库文件没有被更新。
which命令
用法:which 可执行文件名称
which是通过PATH环境变量到该路径内查找可执行文件,所以基本的功能时寻找可执行文件。
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
# 显示可执行文件的别名和位置,注意有的命令没有别名则只显示命令位置。
$ which ls
/bin/ls
注:which和whereis无法找到shell内置命令的位置!
如 cd命令是shell内置命令,ls是外部安装命令(/bin/ls)。
//whateis 命令显示命令的作用
type
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
type命令的使用实例:
$ type cd // 系统会提示,cd是shell的自带命令(build-in)
$ type grep // 系统会提示,grep是一个外部命令,并显示该命令的路径。
$ type -p grep // 加上-p参数后,就相当于which命令。
find命令简介
$find 路径 参数
路径:
默认find搜索路径目录及其子目录
参数说明:
时间查找参数:
-atime n : 将n*24 小时内存取过的文件列出来
-ctime n : 将 n*24 小时内改变、新增的文件或者目录列出来
-mtime n :将 n*24 小时内修改过的文件或者目录列出来
-newer file :把比 file 还要新的文件列出来
名称查找参数:
-gid n :寻找群组 ID 为 n 的文件
-group name :寻找群组名称为 name 的文件
-uid n :寻找拥有者 ID 为 n 的文件
-username name :寻找拥护者名称为 name 的文件
-name file :寻找文件名为 file 的文件,可使用通配符
$ find / -name mytest
/home/mytest
/home/mytest/mytest
注:当使用 whereis 和 locate 无法查找的我们需要的文件时,可以使用 find,到那时 find 在硬盘上遍历查找,因此非常消耗硬盘资源,而且效率非常第,因此建议优先使用 whereis 和 locate。
可参考find命令详解深入学习
文件搜索命令之间的区别
linux下查找某个文件,但是不知道放在哪里,可以使用下面的命令来搜索。
locate 是在数据库里查找,配合数据库查看文件位置,数据库大至每天更新一次
whereis 查看文件的位置(包括可执行文件和普通文件);可以找到的可执行文件和 man page
find 就是根据条件查找文件,实际搜寻硬盘查询文件名称
which 可以找到可执行文件和其别名