目录
1. locate
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
locate
是另外一个根据文件名来搜索文件的命令。区别于 find 命令,locate 命令无需指定路径,直接搜索即可。
这个命令不是直接去系统的各个角落搜索文件,而是在一个叫 mlocate.db
的数据库下搜索。这个数据库位于 /var/lib/mlocate/mlocate.db
,它包含了系统里所有文件的索引,并且会在每天早上的时候由 cron 工具自动更新一次。
正因为如此,locate 的搜索速度远快于 find 命令,因为它直接在数据库里检索,速度自然更快。
locate 命令在找到文件之后,将直接显示该文件的绝对路径,比如:
但是 locate 命令有个弊端,它无法搜索当天所创建的文件,因为它的数据库一天只在早上更新一次。比如我现在创建一个新文件,locate 没办法搜索到:
为了解决这个问题,我们可以使用sudo updatedb
命令手动去更新它的数据库:
$ sudo updadb
然后,我们就可以搜索到新文件了。
locate命令的使用实例:
$ locate /etc/sh
搜索etc目录下所有以sh开头的文件。
$ locate ~/m
搜索用户主目录下,所有以m开头的文件。
$ locate -i ~/m
搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
2. whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis命令的使用实例:
$ whereis grep
whereis
命令会在系统默认安装目录(一般是有root权限时默认安装的软件)查找二进制文件、源码、文档中包含给定查询关键词的文件。(默认目录有 /bin
, /sbin
, /usr/bin
, /usr/lib
,/usr/local/man
等类似路径)。
一般包含以下三部分内容:
-
二进制文件的路径
-
二进制文件的源码路径
-
对应 man 文件的路径
比如我们现在搜索 ls 命令:
我们可以使用 -b
选项来只搜索可执行文件所在位置,使用 -B
选项指定搜索位置,使用 -f
选项列出文件的信息。
我们可以
- 使用
-s
限定只搜索源码路径, - 使用
-m
搜索 man page 路径, - 使用
-s
指定搜索源代码文件的路径, - 使用
-M
指定搜索帮助文件的路径。
3. which
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which
命令主要用来查找可执行文件的位置,它搜索的位置指定在 $PATH
及 $MANPATH
环境变量下的值,默认情况下,which
命令将显示可执行文件的第一个存储位置:
如果某个可执行文件存储在多个位置,可以使用 -a
选项列出所有的位置。
如果你想一次性查找多个文件,可以直接跟在 which 命令后面即可。
which命令的使用实例:
$ which grep
4. type
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
type命令的使用实例:
$ type cd
系统会提示,cd是shell的自带命令(build-in)。
$ type grep
系统会提示,grep是一个外部命令,并显示该命令的路径。
$ type -p grep
加上-p参数后,就相当于which命令。