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不仅支持单个过滤表达式过滤,也还支持多个过滤表达式.但需要注意的是传入的过滤表 ...
随机推荐
- wiremock 模拟服务接口提供前端使用
前后端分离同步开发时,如果前端需要等后端把接口都开发完了再去动工的话,项目周期会拉长. 以前开发时,一般前期是先把接口文档写的差不多了,要么是让前端自己构造模拟数据,要么是后端在开个控制器专门提供模拟 ...
- word文档批量合并工具
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; En ...
- [html][easyui]DataGrid 绑定
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Unreal Enginer4特性介绍
转自:http://blog.csdn.net/cartzhang/article/details/39401991 一.特性说明 特性 Ue4是一款专业开发高质量游戏的平台开发工具.Ue4的渲染加快 ...
- pythonNET day05
孤儿进程 父进程先于子进程退出,此时子进程就会成为孤儿进程. 孤儿进程会被系统指定的进程收养,即系统进程会成为该孤儿进程新的父进程.孤儿进程退出时该父进程会处理退出状态 僵尸进程 子进程先于父进程退出 ...
- Python中常见的数据类型总结
Python提供多种数据类型来存放数据项集合,主要包括序列(列表list和元组tuple),映射(如字典dict),集合(set),下面对这几种一一介绍: 一 序列 1.列表list 列表是一种有序的 ...
- 关于Ceph现状与未来的一些思考
http://blog.csdn.net/mightysheldor/article/details/51093476 Ceph从2004年提交了第一行代码,至今为止已经10年了.这个起源于Sage博 ...
- python 主要模块和方法
******************** PY核心模块方法 ******************** os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename ...
- uva-10596-欧拉回路
并不要求所有点都联通,只要出现的所有边能形成欧拉回路就行了 做成有向图的欧拉回路wa成了狗 #include <iostream> #include<memory.h> #in ...
- upstream prematurely closed connection while reading response header from upstream
upstream prematurely closed connection while reading response header from upstream nginx配置uwsgi的时候 ...