which     在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
whereis   只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。在数据库中查询
whatis    显示关键字在哪些帮助手册中存在
locate    配合数据库查看文件位置。
find      实际搜寻硬盘查询文件名称。

whatis:使用mkwhatis命令可将当前系统上所有的帮助手册及与之对应的关键字创建为一个数据库

1、which

语法:which   [-a]   cmdname1 cmdname2 ......

作用:locate a command,从环境变量PATH中,定位/返回与指定名字相匹配的 命令/可执行文件 所在的路径

原理:执行which命令时,which会在当前环境变量PATH中依次寻找能够匹配所找命令名字的可执行文件名,不加-a选项,返回第一个匹配的可执行文件的路径,否则依次返回满足条件的所有可执行文件的路径名。

适用场合:一般用于查找 命令/可执行文件 所在的路径。有时候可能在多个路径下存在相同的命令,该命令可用于查找当前所执行的命令到底是哪一个位置处的命令。

例如: [root@redhat ~]# which passwd

/usr/bin/passwd

2、whereis

语法: whereis [-bmsu] 文件或者目录名称

参数说明:

  • -b : 只找二进制文件
  • -m: 只找在说明文件manual路径下的文件
  • -s : 只找source源文件
  • -u : 没有说明文档的文件

作用:locate the binary, source, and manual page files for a command,定位/返回与指定名字匹配的二进制文件、源文件和帮助手册文件所在的路径。

原理:whereis命令首先会去掉filename中的前缀空格和以.开头的任何字符,然后再在数据库(var/lib/slocate/slocate.db)中查找与上述处理后的filename相匹配的二进制文件、源文件和帮助手册文件,使用之前可以使用updatedb命令手动更新数据库。

适用场合:二进制文件、源文件和帮助手册文件路径的查找。

例如:

[root@redhat ~]# whereis passwd 
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz 
将和passwd文件相关的文件都查找出来

[root@redhat ~]# whereis -b passwd 
passwd: /usr/bin/passwd /etc/passwd 
只将二进制文件 查找出来

和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。

但是该数据库文件并不是实时更新,默认情况下每天更新一次,因此,我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。 (使用updatedb命令进行更新)

3、 locate

语法: locate 文件或者目录名称

作用:find files by name from one or more databases prepared by updatedb. 同whereis指令一样,也是从数据库建立的索引中查找,不同的是该命令查找所有部分匹配的文件,使用之前可以使用updatedb命令手动更新数据库。

原理:默认情况下(当filename中不包含通配符*),locate会给出所有与*filename*相匹配的文件的路径。

适用场合:没有文件类型性质的模糊查找(你只记得某个文件的部分名称)。

个人感觉locate和whereis差不多,locate比较适合与数据库一起配合着用,locate命令可以在搜寻数据库时快速找到档案

[root@redhat ~]# locate passwd 
/lib/security/pam_unix_passwd.so 
/lib/security/pam_passwdqc.so 
/usr/include/rpcsvc/yppasswd.x 
/usr/include/rpcsvc/yppasswd.h 
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph 
/usr/lib/kde3/kded_kpasswdserver.la 
/usr/lib/kde3/kded_kpasswdserver.so 
/usr/bin/vncpasswd 
/usr/bin/userpasswd 
/usr/bin/yppasswd

4、 find

find有一点复杂,参考博客:https://blog.csdn.net/yucan1001/article/details/8451351

语法: find 路径 参数

参数说明:

  1. 时间查找参数:

    1. -atime n :将n*24小时内存取过的的文件列出来
    2. -ctime n :将n*24小时内改变、新增的文件或者目录列出来
    3. -mtime n :将n*24小时内修改过的文件或者目录列出来
    4. -newer file :把比file还要新的文件列出来
  2. 名称查找参数: 
    1. -gid n       :寻找群组ID为n的文件
    2. -group name  :寻找群组名称为name的文件
    3. -uid n       :寻找拥有者ID为n的文件
    4. -user name   :寻找用户者名称为name的文件
    5. -name file   :寻找文件名为file的文件(可以使用通配符)

作用:search for files in a directory hierarchy. 从当前目录递归的搜索文件。

原理:遍历当前工作目录及其子目录,find命令是在硬盘上遍历查找,非常耗硬盘资源,查找效率相比whereis和locate较低。

适用场合:能用which、whereis和locate的时候尽量不要用find.

例 如:

[root@redhat ~]# find / -name zgz

/home/zgz

/home/zgz/zgz

/home/weblogic/bea/user_projects/domains/zgz

......

总结:

find,遍历硬盘查找,通常使用 find / -name Filename。耗内存。locate和whereis是根据数据库查找,无法实时查找文件。有可能找到刚才删除的文件和无法找到新增的文件。which根据path找可执行文件。whereis 可以用来找相关安装路径和二进制文件,可执行文件。

当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查 找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。

linux 命令 which whereis whatis locate find相关推荐

  1. Linux命令之whereis

    whereis 功能说明: 查找文件 语法: whereis [-bfmsu] [-B...] [-M...] [-S...] [文件...] 补充说明: whereis指令会在特定目录中查找符合条件 ...

  2. 几种文件查找命令,whereis ,find ,locate.

    whereis对于文件的查找,是将系统内的所有文件放在一个数据库文件里.whereis 和 locate 都是以该数据库为准的(由于每个数据库会有一个更新时间,一般在更新时间之后才可以找到).而fin ...

  3. linux命令之whereis和which

    一.命令简介   Linux whereis命令用于查找文件.该指令会在特定目录中查找符合条件的文件.这些文件应属于原始代码.二进制文件,或是帮助文件.该指令只能用于查找二进制文件.源代码文件和man ...

  4. linux 命令:whereis详解

    名称 whereis - 定位一个"命令"的二进制文件.源文件.手册文件. 用法 whereis [options] [-BMS directory... -f] name... ...

  5. Linux命令之查找文件locate

    概述 locate命令主要是用来查找文件的,但它的速度比find命令快很多.因为它不是按路径进行搜索的,而是去搜索一个数据库,即/var/lib/mlocate/mlocate.db.这个数据库中含有 ...

  6. Linux 命令(92)—— locate 命令

    1.命令简介 locate 命令用于查看文件. 如果没有指定 --regex,匹配模式可以包含通配符(globbing characters).如果模式不包含通配符,则模式等价于 *PATTERN*. ...

  7. 每天回顾linux命令(whereis)

    whereis命令 whereis命令用来定位命令的二进制程序.源代码文件和man手册页等相关文件的路径. whereis命令只能用于程序名的搜索,而且只搜索二进制文件(-b,和which命令一样的效 ...

  8. linux命令之find和locate

    1.find / -name  log.xml   按照名字查找log.xml文件 2.locate log.xml     查找log.xml文件(效率高) 3.grep 'hive'  word. ...

  9. 简明Linux命令行笔记:locate

    在mlocate数据库中搜索条目 locate [option] pattern 参数 pattern 是locate需要搜索的文件名或者正则表达式 选项 -i              忽略大小写 ...

最新文章

  1. 绝地求生自定义服务器租一天多少钱,绝地求生自定义服务器怎么样?绝地求生自定义服务器使用攻略...
  2. VTK:相交线用法实战
  3. python客户价值分析_[Python数据挖掘]第7章、航空公司客户价值分析
  4. ui原型设计工具_UI设计师的工具包,用于专业模型,原型和产品插图
  5. Windows下开发Perl程序之环境搭建
  6. Kotlin 条件控制(六)
  7. baidu google 下拉框 的简单实现
  8. 车辆属性识别、车型识别
  9. 完美商业计划书全攻略
  10. ORACLE SPA and RAT
  11. 西奥电梯服务器故障维修,电梯维保须知:西子奥的斯电梯故障分析及解决
  12. 僵尸进程和孤儿进程-(转自Anker's Blog)
  13. 网卡驱动修改服务器,网卡驱动配置
  14. 最优化-(黄金分割法)0.618法
  15. 【剑指offer】解题思路汇总
  16. ping: unknown host www.baidu.com的解决
  17. 《Microduino实战》——1.4 开源硬件
  18. C++ string substr()
  19. 实现VS平台账号注册机
  20. EXCEL分页预览 网格线

热门文章

  1. 怎样洗头使头发变黑变多
  2. 12个git实战建议和技巧
  3. 狂赌智能手机 中国互联网巨头深陷零利润困局
  4. 中国架构师,名符其实有多少?
  5. 分页插件pageHelpler的使用(ssm框架中)服务器端分页
  6. FreeSql (三十一)分区分表
  7. oracle函数 MIN([distinct|all]x)
  8. SparkSQL调优
  9. IDEA:No SLF4J providers were found.
  10. jsp通过include指令引入html乱码的解决方法