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不仅支持单个过滤表达式过滤,也还支持多个过滤表达式.但需要注意的是传入的过滤表 ...
随机推荐
- malloc/free与new/delete的不同及注意点
#include<iostream> using namespace std; class Obj{ public : Obj(){cout<<"Initializa ...
- 【python】python实例集<二>
##扫描某个ip的端口号 # #-*- coding: utf-8 -*- # import socket # def main(): # sk = socket.socket(socket.AF_I ...
- laravel 数据库操作
1 配置信息 1.1配置目录: config/database.php 1.2配置多个数据库 //默认的数据库 'mysql' => [ 'driver' => 'mysql', 'hos ...
- java用double和float进行小数计算精度不准确
java用double和float进行小数计算精度不准确 大多数情况下,使用double和float计算的结果是准确的,但是在一些精度要求很高的系统中或者已知的小数计算得到的结果会不准确,这种问题是非 ...
- MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer
mysql> select end) as '<60', end) as '60~69', end) as '70~79', end) as '80~89', end) as '>= ...
- 根据现有表操作基于active record的model
指南上都是直接生成mode,然后db migrate来生成数据库,在现实场景中,很可能是反过来的 例如 测试表app_versions rails里面,建立model class AppVersion ...
- usbip install
# README for usbip-utils## Copyright (C) 2011 matt mooney <mfm@muteddisk.com># 2 ...
- Python链表与反链表
# -*- coding:utf8 -*- #/usr/bin/env python class Node(object): def __init__(self, data, pnext = None ...
- [转][Java]自定义标签简介
作用:自定义标签主要用于移除 jsp 页面中的 java 代码. 实现:需要完成以下两个步骤: 编写一个实现 Tag 接口的 Java 类,把页面 java 代码移到这个 java 类中.(标签处理类 ...
- IDEA中修改各个部位的字体大小
1.菜单栏 Setting -> Appearance&Behavior -> Appearance ->Override default fonts by (not rec ...