linux下的查找命令有很多,常用的有which、whereis、locate、find。那么这4个命令之间各自有什么特点,又有什么区别?什么时候该用哪个才最合适呢?详细不少人没法给出一个精确的答案,包括我自己也是。所以,今天我们就来进行一个全面的总结和对比。

1. which

这条命令主要是用来查找系统PATH目录下的可执行文件。说白了就是查找那些我们已经安装好的可以直接执行的命令。比如:

实例:

leon@Ubuntu:~$ which ls
/bin/ls
leon@Ubuntu:~$ which cat
/bin/cat
leon@Ubuntu:~$ which gcc
/usr/bin/gcc

小结:

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

2. whereis

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

实例:

leon@Ubuntu:~$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
leon@Ubuntu:~$ whereis cat
cat: /bin/cat /usr/share/man/man1/cat.1.gz
leon@Ubuntu:~$ whereis gcc
gcc: /usr/bin/gcc /usr/lib/gcc /usr/bin/X11/gcc /usr/share/man/man1/gcc.1.gz

小结:

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

3. locate

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

实例:

leon@Ubuntu:~$ locate SysChangelog
/home/leon/SysChangelog

小结:

  • 功能作用:同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的文件(可以使用通配符);

实例:

leon@Ubuntu:/opt/FriendlyARM/mini2440/rootfs$ find -name changelog
./changelog
leon@Ubuntu:/opt/FriendlyARM/mini2440/rootfs$ find -name fstab
./etc/fstab

小结:

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

5. 总结:

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

linux下查找命令which/whereis/locate/find的对比和总结相关推荐

  1. Linux下查找命令

    转载自  Linux下查找命令 一.Linux查找文件的相关命令 常 用 命 令 简要中文说明 程序所在目录 more 分页显示一个文件或任何输出结果 /bin less 分页显示一个文件并且可以回头 ...

  2. linux 文件查找命令集:find,locate,wheres,which,type

    文章目录 前言 find命令 命令格式: 常用选项: 举例使用 locate命令 命令格式 使用实例 whereis命令 使用过程: which命令 type命令 前言 在linux系统中一切皆文件, ...

  3. linux下查找命令汇总(转)

    2019独角兽企业重金招聘Python工程师标准>>> ###find### find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件. find的使用格式如下: $ fi ...

  4. linux下,查找命令的使用

    查找目录:find/(查找范围)-name'查找关键字'-typed 查找文件:find/(查找范围)-name查找关键字-print 如果需要更进一步的了解,可以参看Linux的命令详解. 这里摘抄 ...

  5. Linux文件查找命令具体解释-which whereis find locate

    原创BLog.转载请注明出处 http://blog.csdn.net/hello_hwc? viewmode=contents which命令 首先查看man which的说明 which - sh ...

  6. linux命令查找关键字前五行,linux下grep命令实现查找多个关键字(与关系和或关系)...

    grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用 ...

  7. linux文件查找命令find,locate

    简介 vi : visual interface, 可视化接口.vim(VI IMproved) vim编辑器:文本编辑器.文本:纯文本,ASCII text; unicode; 文本编辑器种类: 行 ...

  8. linux rpm 查找,Linux下 rpm 命令查询方法

    [root@wang /]# rpm -qa // 查看安装所有包 [root@wang /]# rpm -qa |grep vim // 查询所安装的包 +包名 [root@wang /]# rpm ...

  9. linux下查找文件及内容 grep

    每一种操作系统都是由成千上万个不同种类的文件所组成的.其中有系统本身自带的文件,用户自己的文件,还有共享文件等等.我们有时候经常忘记某份文件放在硬盘中的哪个地方. 在微软的Windows操作系统中要查 ...

最新文章

  1. ubuntu16.04: mininet下使用ryu当做控制器
  2. 等待Ajax结果 再提交表单(ajax同步)
  3. C语言的10大基础算法
  4. What is AJAX?(转)(二)
  5. 包含天,时,分,秒的倒计时
  6. Aave 上线 AMM Market,允许 Uniswap 和 Balancer 的流动性提供商使用 LP 代币作为抵押品
  7. 深入学习卷积神经网络中卷积层和池化层的意义(转)
  8. 大数据技术对互联网的影响
  9. React 使用图片验证码组件(登录验证)
  10. Collectors.collectingAndThen()
  11. paip.c#.net 右键菜单带图标
  12. 报错Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.liuyanzhao.b
  13. 常用字典代码推荐标准
  14. postgresql的下载与安装
  15. sgu-207 Robbers
  16. 金融伦理学(Financial Ethcs)笔记
  17. 35岁程序员被公司辞退,生活压力太大痛哭,中年危机如何自救?
  18. 如何读取服务器FTD的日志文件
  19. 学习HTML的知识点总结
  20. 入门级用Python + tkinter的打飞机/飞机大战小游戏

热门文章

  1. php switch 函数,php switch case用法与实例教程
  2. 王小云计算机,王小云学者主页-科技工作者之家
  3. 2019蚂蚁金服面试总结(Java方向)
  4. 重新学习的HTTP协议
  5. 纯CSS3实现Material Design
  6. 实现OC与JS的交互
  7. php 数值相加_php递归遍历多维数组,合并值并相加
  8. zigbee协议_智能家居的ZigBee到底是什么?和Wi-Fi有何区别?
  9. linux shell 内建命令,什么是Bash Shell的内建(build in)命令
  10. 你有一笔新订单 语音_坐电梯动口不动手,浦东企业新技术实现乘坐电梯“零接触”!...