Linux 基础教程 25-命令和文件查找
which
不管是在Windows还是Linux系统中,我们都会偶尔执行一些系统命令,比如Windows常见的cmd、ping、ipconfig等,它们的位置都在%systemdrive%中。在Linux里面我们知道在终端机模式中,连续输入两次TAB就能知道当前有多少命令可以使用。我们以cat命令为例,在连接输入TAB后,会出现三个可用命令,如下图所示:

虽然我们可以直接使用这些命令,但你有没有想过这些命令的完整位置在什么地方?我们可以which命令来实现查找。
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。简单来说就是用来查看某个系统命令是否存在和执行的到底是哪个位置的命令。
基础语法
which [参数] [命令]
常用参数如下所示:
| 参数 | 含义 |
|---|---|
| -a | 将所有由PATH目录中可以找到的命令全部列出,而不只是显示第一个搜索到的命令 |
| -V | 显示版本信息 |
which是根据用户所设置的PATH变量内的目录去查找可执行文件的,所以在不同的PATH变量查找的变量也不完全一样。
示例
- 查找cat命令并显示其位置

在Linux中也有相当优异的查找命令。比如之前讲到的find,但这个命令查找文件比较慢。通常都是先使用whereis和locate来查找,如果还未能查到,则用 ** find 来查找。因为whereis和locate是利用数据库**来查找数据,而并没有实际查询硬盘,故节约时间。
在Linxu系统中,系统会将系统内的所有文件都记录在一个数据库文件里面,而在使用whereis和locate都会以此数据库中的文件为准。而find是搜索硬盘,所以速度也相对慢一些。在使用whereis和locate有时也会出现查找已经删除的文件!
whereis
whereis主要是用来查找特定的文件,如二进制文件、源文件等。
基础语法
whereis [参数] [文件或目录名]
常用参数如下所示:
| 参数 | 含义 |
|---|---|
| -b | 只查找二进制文件 |
| -m | 只查找说明文件manual路径下的文件 |
| -s | 只查找源文件 |
| -u | 只查找不常用的文件。如which -m -u 表示仅查找当前路径下没有文档的文件 |
在使用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 存放文件信息的文件
基础语法
locate [参数] [关键字]
常用参数如下所示:
| 参数 | 含义 |
|---|---|
| -A/--all | 查找所有能匹配到文件 |
| -c/--count | 返回匹配到数量 |
| -e/--existing | 只查找已经存在的文件 |
| -d/--database DBPATH | 从指定数据库文件中查找文件 |
| -i/--ignore-case | 忽略大小写 |
| -r/--regexp REGEXP | 以正则表达式进行查找 |
| -n | 查找结果最大显示的数目 |
示例
1、查找能匹配到的所有文件

2、返回能匹配的文件数量

3、使用正则表达进行查找

type
type命令其实不能算做为查找命令,它的功能主要是用来某个命令是Shell自带的还是由Shell外部的独立二进制文件提供的。而一个命令的类型通常可以分为以下几种:
- alias 别名
- keyword 关键字,Shell保留字
- function 函数,Shell函数
- builtin 内建命令,Shell内建命令
- file 文件,磁盘文件
- unfound 未知命令
当我们知道了命令是哪种类型,我们就可以针对性的获取帮助,如内建命令可以help命令来获取帮助,外部命令用man或info来获取帮助。
基础语法
type [参数] [命令]
常用参数如下所示:
| 参数 | 含义 |
|---|---|
| -a | 显示所有可能的类型 |
| -t | 显示命令的类型,如alias/keyword/function等 |
| -p | 只返回外部命令的信息,相当于which |
| -P | 只返回内建命令的信息 |
示例
1、显示所有可能的类型

2、显示命令的类型

3、返回内建和外部命令的信息

对比总结
在学习了这么多的文件和命令查找后,顺便来做个简要总结,如下所示:
| 命令 | 作用描述 |
|---|---|
| find | 最常见和最强大的查找命令,可以查找任何文件,缺点速度比较慢 |
| which | 在PATH变量搜索系统命令 |
| whereis | 查找特定的文件 |
| locate | 功能相当于find -name,直接从数据库查询,速度较快 |
| type | 用来显示命令是内建还外部命令和相应的命令路径 |
本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

Linux 基础教程 25-命令和文件查找的更多相关文章
- (大数据工程师学习路径)第一步 Linux 基础入门----环境变量与文件查找
环境变量与文件查找 本节介绍环境变量的作用与用法,及几种搜索文件的方法.学会这些技巧高效地使用 Linux. 一.环境变量 1.变量 要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变 ...
- Linux 基础教程 28-nc命令
nc nc命名netcat,直译为网络猫.在CentOS 7查看帮助的解释如下所示: ncat - Concatenate and redirect sockets 翻译过来就是可以连接和重定 ...
- Linux基础入门-环境变量与文件查找
一.环境变量: Shell中的变量也有不同的数据类型,不用专门指定类型名,可以参与运算,有作用域限制. declare tmp 创建一个变量 可以不用专门声明,可以即用即创建 tmp=shiyanlo ...
- Linux 基础教程 42-xargs命令
xargs是execute arguments的缩写,主要作用是从标准输入中读取内容,并将此内容传递给它要协助的命令,并作为要协助命令的参数来执行. 基本语法 xargs [选项] [命令] ...
- Linux 基础教程 44-history命令
什么是history 在Linux系统日积月累的使用中,我们会输入很多命令.而在我们想重复上一个命令时,通过使用方向键向上翻就可以查看我们已经输入和使用过的命令.那大家有没有想过这个命令保存在 ...
- Linux 基础教程 29-tcpdump命令-1
什么是tcpdump 在Linux中输入命令man tcpdump给出的定义如下所示: tcpdump - 转储网络上的数据流 是不是感觉很懵?我们用通俗.形象.学术的表达方式来全方位描述tc ...
- Linux 基础教程 45-read命令
基本用法 read命令主要用于从标准输入读取内容或从文件中读取内容,并把信息保存到变量中.其常用用法如下所示: read [选项] [文件] 选项 解释 -a array 将内容读取到数值中, ...
- Linux 基础教程 31-tcpdump命令-3
经过前面的学习,tcpdump的用法相信应该都掌握了,今天我们来学习对tcpdump输出内容的学习和了解.我们以第一个示例进行讲解如下所示: IP协议包分析 [root@localhost ~ ...
- Linux 基础教程 30-tcpdump命令-2
在上一节讲了一些tcpdump常用功能,本期我们继续学习tcpdump后续功能. 流量过滤 tcpdump不仅支持单个过滤表达式过滤,也还支持多个过滤表达式.但需要注意的是传入的过滤表 ...
随机推荐
- 解决navicat连接不上mysql服务器
设置mysql密码 如果mysql用户密码为空,需要设置后第三方mysql操作工具才可以连接 进入数据库:mysql -uroot -p use mysql; update user set pass ...
- 智能家居入门DIY——【七、添加一个LCD12864吧】
今天加了一个LCD12864,IC看说明上是ST7567,结果一顿U8g2,发现两个问题: 1.买的时候不知道是卖家写的我理解错了还是怎么了,反正是不出汉字的. 2.U8g2太大了…………占了uno的 ...
- UI“三重天”之selenium--常用API和问题处理(三)
Selenium常用API: 前面两篇示例代码中用到了一些selenium的API方法,例如定位元素的八种方法.访问url.等待.操作浏览器.获取title.点击.清理等等. 有关于selenium的 ...
- Java HashMap 遍历方式探讨
JDK8之前,可以使用keySet或者entrySet来遍历HashMap,JDK8中引入了map.foreach来进行遍历. keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从 ...
- 深度解析Java中的那把锁
锁的本质 我们先来讨论锁的出现是为了解决什么问题,锁要保证的事情其实很好理解,同一件事(一个代码块)在同一时刻只能由一个人(线程)操作. 这里所说的锁为排他锁,暂不考虑读写锁的情况 我们在这里打个比方 ...
- 十、api自动化环境问题及解决方案汇总(持续更新)
1.jenkins报错: Unable to read /root/.jenkins/config.xml at hudson.WebAppMain$3.run(WebAppMain.java:248 ...
- 基于sersync海量文件实时同步
项目需求:最近涉及到数百万张图片从本地存储迁移到云存储,为了使完成图片迁移,并保证图片无缺失,业务不中断,决定采用实时同步,同步完后再做流量切换.在实时同步方案中进行了几种尝试. 方案1:rsync+ ...
- Windows10 IME占用过高临时解决办法
解决方案: 在管理员模式下运行命令提示符,并输入如下命令 if exist "%SystemRoot%\System32\InputMethod\CHS\ChsIME.exe" ( ...
- "sc.exe create/delete" - Create or Delete Services
"sc.exe" can also be used to create and delete services. If you want to create a new servi ...
- spring mvc 映射器和适配器
映射器和适配器 1.非注解的映射器和适配器 a. 入门程序中的单个映射 BeanNameUrlHandlerMapping SimpleControllerHandlerAdapter b.另一种ma ...