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,但这个命令查找文件比较慢。通常都是先使用whereislocate来查找,如果还未能查到,则用 ** 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-命令和文件查找的更多相关文章

  1. (大数据工程师学习路径)第一步 Linux 基础入门----环境变量与文件查找

    环境变量与文件查找 本节介绍环境变量的作用与用法,及几种搜索文件的方法.学会这些技巧高效地使用 Linux. 一.环境变量 1.变量 要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变 ...

  2. Linux 基础教程 28-nc命令

    nc     nc命名netcat,直译为网络猫.在CentOS 7查看帮助的解释如下所示: ncat - Concatenate and redirect sockets 翻译过来就是可以连接和重定 ...

  3. Linux基础入门-环境变量与文件查找

    一.环境变量: Shell中的变量也有不同的数据类型,不用专门指定类型名,可以参与运算,有作用域限制. declare tmp 创建一个变量 可以不用专门声明,可以即用即创建 tmp=shiyanlo ...

  4. Linux 基础教程 42-xargs命令

        xargs是execute arguments的缩写,主要作用是从标准输入中读取内容,并将此内容传递给它要协助的命令,并作为要协助命令的参数来执行. 基本语法 xargs [选项] [命令] ...

  5. Linux 基础教程 44-history命令

    什么是history     在Linux系统日积月累的使用中,我们会输入很多命令.而在我们想重复上一个命令时,通过使用方向键向上翻就可以查看我们已经输入和使用过的命令.那大家有没有想过这个命令保存在 ...

  6. Linux 基础教程 29-tcpdump命令-1

    什么是tcpdump     在Linux中输入命令man tcpdump给出的定义如下所示: tcpdump - 转储网络上的数据流 是不是感觉很懵?我们用通俗.形象.学术的表达方式来全方位描述tc ...

  7. Linux 基础教程 45-read命令

    基本用法     read命令主要用于从标准输入读取内容或从文件中读取内容,并把信息保存到变量中.其常用用法如下所示: read [选项] [文件] 选项 解释 -a array 将内容读取到数值中, ...

  8. Linux 基础教程 31-tcpdump命令-3

        经过前面的学习,tcpdump的用法相信应该都掌握了,今天我们来学习对tcpdump输出内容的学习和了解.我们以第一个示例进行讲解如下所示: IP协议包分析 [root@localhost ~ ...

  9. Linux 基础教程 30-tcpdump命令-2

        在上一节讲了一些tcpdump常用功能,本期我们继续学习tcpdump后续功能. 流量过滤     tcpdump不仅支持单个过滤表达式过滤,也还支持多个过滤表达式.但需要注意的是传入的过滤表 ...

随机推荐

  1. Jenkins 基础入门

    原文地址:Jenkins 基础入门 博客地址:http://www.extlight.com 一.前言 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作, ...

  2. [原创]JEECMS 自定义标签调用广告版位下的所有广告(利用广告管理管理首页幻灯片)

    JEECMS自带的只有[@cms_advertising]标签,并且官方没有给文档,用法: [@cms_advertising id='3']             <img src=&quo ...

  3. Python——内置函数(待完善)

    内置函数(68个),分为六大类 思维导图: 1. 迭代器/生成器相关(3个) (1)range for i in range(10): #0-9 print(i) for i in range(1,1 ...

  4. 负载均衡-haproxy安装配置

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...

  5. 卸载 visual studio 2012时先把系统还原打开

    否则,会停留在创建还原点那儿很长时间 .

  6. 简化Redis数据访问代码RedisTemplate

    ---恢复内容开始--- Redis数据结构简介: Redis可以存储键与5中数据结构类型之间的映射,这5中数据结构类型分别是;String(字符串),List(列表),Set(集合),Hash(散列 ...

  7. CSS布局模型学习

    转自:http://www.cnblogs.com/erliang/p/4092192.html CSS布局模型学习   参考链接慕课网:HTML+CSS基础课程 知识基础 1. 样式 内联 嵌入 外 ...

  8. 第八章 Mixer 适配器的应用

    概述: Mixer “知晓”每一次服务间的调用过程,这些调用过程会为Mixer提供丰富的相关信息,Mixer通过接入的适配器对这些信息进行处理,能够在调用的预检(执行前)和报告(执行后)阶段执行多种任 ...

  9. Keras Sequential顺序模型

    keras是基于tensorflow封装的的高级API,Keras的优点是可以快速的开发实验,它能够以TensorFlow, CNTK, 或者 Theano 作为后端运行. 模型构建 最简单的模型是  ...

  10. 第10课 初探 Qt 中的消息处理

    1. Qt消息模型 (1)Qt封装了具体操作系统的消息机制 (2)Qt遵循经典的GUI消息驱动事件模型 2. 信号与槽 (1)Qt中定义了与系统消息相关的概念 ①信号(Signal):由操作系统产生的 ...