which
不管是在Windows还是Linux系统中,我们都会偶尔执行一些系统命令,比如Windows常见的cmd、ping、ipconfig等,它们的位置都在%systemdrive%中。在Linux里面我们知道在终端机模式中,连续输入两次TAB就能知道当前有多少命令可以使用。我们以cat命令为例,在连接输入TAB后,会出现三个可用命令,如下图所示:
虽然我们可以直接使用这些命令,但你有没有想过这些命令的完整位置在什么地方?我们可以which命令来实现查找。
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。简单来说就是用来查看某个系统命令是否存在和执行的到底是哪个位置的命令。
基础语法
常用参数如下所示:
which是根据用户所设置的PATH变量内的目录去查找可执行文件的,所以在不同的PATH变量查找的变量也不完全一样。
示例
查找cat命令并显示其位置
在Linux中也有相当优异的查找命令。比如之前讲到的find,但这个命令查找文件比较慢。通常都是先使用whereis和locate来查找,如果还未能查到,则用find来查找。因为whereis和locate是利用数据库来查找数据,而并没有实际查询硬盘,故节约时间。
在Linxu系统中,系统会将系统内的所有文件都记录在一个数据库文件里面,而在使用whereis和locate都会以此数据库中的文件为准。而find是搜索硬盘,所以速度也相对慢一些。在使用whereis和locate有时也会出现查找已经删除的文件!
whereis
whereis主要是用来查找特定的文件,如二进制文件、源文件等。
基础语法
常用参数如下所示:
在使用whereis时,未添加任何参数,则默认返回所有信息。
示例
1、未加参数时,返回所有信息:
2、只搜索二进制文件
3、只搜索与passwd相关的说明文件
locate
locate其实是find -name的另一种写法,但要比后者要快很多,原因在于它不搜索具体的目录,而是搜索数据库(/var/lib/mlocate/mlocate.db),而这个数据库包含有本地所有文件信息。系统会自动创建该数据库并每天自动更新一次。我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。整个locate工作其实是由四部分组成,如下所示:
/usr/bin/updatedb 主要用来更新数据库,通过crontab自动完成的
/usr/bin/locate 查询文件位置
/etc/updatedb.conf updatedb的配置文件
/var/lib/mlocate/mlocate.db 存放文件信息的文件
基础语法
常用参数如下所示:
示例
1、查找能匹配到的所有文件
2、返回能匹配的文件数量
3、使用正则表达进行查找
type
type命令其实不能算做为查找命令,它的功能主要是用来某个命令是Shell自带的还是由Shell外部的独立二进制文件提供的。而一个命令的类型通常可以分为以下几种:
alias 别名
keyword 关键字,Shell保留字
function 函数,Shell函数
builtin 内建命令,Shell内建命令
file 文件,磁盘文件
unfound 未知命令
当我们知道了命令是哪种类型,我们就可以针对性的获取帮助,如内建命令可以help命令来获取帮助,外部命令用man或info来获取帮助。
基础语法
常用参数如下所示:
示例
1、显示所有可能的类型
2、显示命令的类型
3、返回内建和外部命令的信息
对比总结
在学习了这么多的文件和命令查找后,顺便来做个简要总结,如下所示:
领取专属 10元无门槛券
私享最新 技术干货