Linux 下的查找命令有很多,常用的有whichwhereislocatefind。那么这4个命令之间各自有什么特点,又有什么区别,什么时候该用哪个才最合适呢?方便我们在开发和学习中能更加有效的使用。

1、which

该命令主要是用来查找系统PATH目录下的可执行文件。其实就是查找那些已经安装好的可以直接执行的命令。

例如:

$ which gcc

  • 功能作用:从环境变量PATH中,定位/返回与指定名字相匹配的可执行文件所在的路径。
  • 执行原理:在当前环境变量PATH中依次寻找能够匹配所找命令名字的可执行文件名,不加-a选项时返回第一个匹配的可执行文件的路径,否则依次返回满足条件的所有可执行文件的路径名。
  • 适用场合:一般用于查找命令/可执行文件所在的路径。有时候可能在多个路径下存在相同的命令,该命令可用于查找当前所执行的命令到底是哪一个位置处的命令。

2、whereis

该命令可以用来查找二进制文件、源代码文件、帮助命令(man)文件。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广。

例如:

$ whereis gcc

  • 功能作用:定位/返回与指定名字匹配的二进制文件、源代码文件和帮助手册文件所在的路径。
  • 执行原理:首先会去掉filename中的前缀空格和以.开头的任何字符,然后再在数据库(var/lib/slocate/slocate.db)中查找与上述处理后的filename相匹配的二进制文件、源文件和帮助手册文件。为了确保所搜寻的路径信息是最新的版本,使用之前可以使用updatedb命令手动更新数据库。
  • 适用场合:二进制文件、源文件和帮助手册文件路径的查找。

3、locate

该命令也是通过数据库查找文件,但是这个命令的适用范围就比whereis大多了。这个命令可以找到任意你指定要找的文件,并且可以只输入部分文件名(前面两个命令是要输入完整文件名的)。同时locte还可以通过-r选项使用正则表达式,功能十分强大。

例如:

$ locate examples.desktop

  • 功能作用:同whereis指令一样,也是从数据库建立的索引中查找,不同的是该命令查找所有部分匹配的文件。使用之前可以使用updatedb命令手动更新数据库。
  • 执行原理:默认情况下(当filename中不包含通配符*时),locate会给出所有与*filename*相匹配的文件的路径。
  • 适用场合:无法执行文件类型性质的模糊查找(你只记得某个文件的部分名称)。

4、find

find命令要比前边几条复杂的多,功能也强大的多。这条命令是通过直接搜索硬盘的方式查找的,所以可以保证查找的信息绝对可靠。并且支持各种查找条件。但是功能强大肯定是有代价的,那就是搜索速度慢。所以一般前边几种找不出来的情况下才会使用find。另外如果要实现某些特殊条件的查找,比如找出某个用户的size最大的文件,那就只能用find了。

参数列表:

  • 时间查找参数:
– atime n:将n*24小时内access过的文件列出来;
– ctime n:将n*24小时内状态发生改变的文件列出来;
– mtime n:将n*24小时内被修改过的文件列出来;
– newer file:把比file还要新的文件列出来;
  • 名称查找参数:
–gid n:寻找群组ID为n的文件;
–group name:寻找群组名称为name的文件;
–uid n:寻找拥有者ID为n的文件;
–user name:寻找拥有者名称为name的文件;
–name file:寻找文件名为file的文件(可以使用通配符);

例如:

sudo find /usr -name osgearth

  • 功能作用:从当前目录递归搜索文件。
  • 执行原理:遍历当前工作目录及其子目录,非常消耗硬盘资源,查找效率低。
  • 适用场合:能用which、whereis和locate的时候尽量不要用find。

5、总结

对比选项 which whereis locate find
搜索目标 可执行文件 二进制文件、源文件、帮助文件 所有类型 所有类型
查找路径 PATH所含目录 索引数据库所含目录 索引数据库所含目录 当前目录/指定目录
搜索原理 完全匹配 去除.之后的完全匹配 部分匹配即可 遍历寻找
查找速度 非常快 比较快 比较快 比较慢

补充:type命令

type命令主要用于区分一个命令到底是shell自带的还是外部独立的二进制文件提供的。如果是shell自带的则会提示此命令为shell buildin,否则会列出命令的位置。

例如:

  • cd为shell自带的命令,用type cd则显示cd为shell buildin命令。
  • ssh不是shell自带命令,用type时会显示ssh的路径。


顺便把前面的命令都 type 一下:

Linux下的查找命令合集(which/whereis/locate/find)相关推荐

  1. linux vim 怎么查找,linux下vim 查找命令

    linux下vim 查找命令: /text --查找text, 按n查找下一个, N查找上一个 ?text --查找text(反向查找), 按n查找下一个, N查找上一个 */# --查找光标当前的单 ...

  2. Linux下的查找命令

    man    find      locate     which    whereis    type man 学习Linux命令,就得会看帮助文档,不然选项太多,根本记不住.常用的帮助文档命令有m ...

  3. (转)linux下find查找命令用法

    1.命令格式: find pathname -options [-print -exec -ok ...] 2.命令功能: 用于在文件树种查找文件,并作出相应的处理 3.命令参数: pathname: ...

  4. Linux搜索查找命令合集

    目录 find locate grep 和 | find 作用: 将指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端. 基本语法: find [搜索范围] [参数] 常用参数: - ...

  5. Linux下文件查找命令find笔记

    在Linux命令下如果需要快速自己系统所需要处理的文件,可以通过find命令快速进行检索. 如果想在某个路径下查找相应的文件可以执行如下命令: find path -name filename # p ...

  6. 一网打进Linux下那些查找命令

    查找是我们每天都在做的事情,早上醒来找下手机,出门之前查下公交,坐下之后查下资料,分析数据查下模式. 查找文件,查找信息,查找错误是应用起来更为具体的一些工作,而Linux命令行为我们提供了很多快捷强 ...

  7. Linux下那些查找命令

    欢迎关注天下博客:http://blog.genesino.com/2018/03/linux-search/ 查找是我们每天都在做的事情,早上醒来找下手机,出门之前查下公交,坐下之后查下资料,分析数 ...

  8. linux下下载各种软件合集!!!

    下载jdk 先检查当前系统中是否存在默认的jdk. rpm -qa|grep gcj 删除查找的列出相关文件 rpm -e –nodeps + 文件名 如果没有找到,rpm -qa|grep gcj命 ...

  9. linux中vim下如何查找,linux下vim 查找命令

    Echarts 动态折线图 < ... B-tree/B+tree/B*tree [转] (原文出处:http://blog.csdn.net/hbhhww/article/details/82 ...

最新文章

  1. 使用NVIDIA GRID vPC支持视频会议和算力工具
  2. Oracle数据库空间管理
  3. java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)...
  4. java 中 的 字节流!
  5. 三位整数两位小数掩码_小数点造句_造句大全
  6. MS12_020漏洞
  7. 浅析JavaScript解析赋值、浅拷贝和深拷贝的区别
  8. 官方文档: Dubbo 框架设计、模块说明、依赖关系
  9. appium架构分析
  10. Spring整合JsonRpc
  11. c语言差分qpsk编码信道估计 pudn,基于DSP的电力线载波OFDM调制解调器设计.doc
  12. windows自带备份驱动
  13. IT故事:软件测试点亮了我人生的烛光
  14. c语言switch优点,关于C语言switch
  15. 序列试题---最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离 .
  16. 三个小李子讲述安卓动画用法
  17. java任务队列_java 任务队列
  18. RV1126 调试记录
  19. 硬盘扇区数据结构分析
  20. 计算机wps素材,WPS Office 2012在线素材 让办公无需“步步惊心”

热门文章

  1. 80端口是什么服务使用的?80端口和443端口是默认开启的吗?
  2. 计算机出现故障,维修应遵循的原则是什么?
  3. C语言实例:输出字符的几种方式和实际编程中的应用
  4. matplotlib如何设置grid密度,如何设置网格线密度
  5. 算法动画图解:两数之和(哈希表)
  6. 解答一下当今火爆的流量卡是什么东西
  7. 自学Java需要多长时间?
  8. Linux常用命令及软件更新
  9. Adobe Photoshop CC 14.0简体中文特别版32位和64位下载
  10. react withRouter和connect 同时使用的案例