我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索。这些是从网上找到的资料(参考资料1),因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用。

  • which       查看可执行文件的位置
  • whereis    查看文件的位置
  • locate       配合数据库查看文件位置
  • find          实际搜寻硬盘查询文件名称 (find也可以根据文件大小-size 时间-atime 正则表达式-regex)

1、which

语法:  
[root @redhat ~]# which 可执行文件名称  
例如:  
[root @redhat ~]# which passwd  
/usr/bin/passwd  
which是通过 PATH环境变量 到该路径内查找可执行文件,所以基本的功能是寻找可执行文件

2、whereis

语法:  
[root @redhat ~]# whereis [-bmsu] 文件或者目录名称  
参数说 明:  
-b : 只找二进制文件  
-m: 只找在说明文件manual路径下的文件  
-s : 只找source源文件  
-u : 没有说明文档的文件  
例如:  
[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系统会将系统内的所有文件都记录在一个 数据库文件 ( 参考资料1以及大多数文章中都是这样描述的,whereis会在一个数据库文件中查找,在参考资料2中找到这个数据库文件目录 /var/lib/slocate/slocate.db,我在服务器中并没有找到这个目录,原因应该是我没有装locate命令,那么whereis到底是怎么查找的呢? 找了很久没有,从参考资料3中有一种个人比较相信的答案,从 /{bin,sbin,etc}  /usr{lib,bin,old,new,local,games,include,etc,src,man,sbin,X386,TeX,g++-include} 
/usr/local/{X386,TeX,X11,include,lib,man,etc,bin,games,emacs} 中查找,也没有去看whereis的源码,如果有确定的可以交流一下 )中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。  
但是 该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

3、 locate  
语法:  
[root@redhat ~]# locate 文件或者目录名称  
例 如:  
[root@redhat ~]# locate passwd  
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp  
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp  
/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/lib/ruby/1.8/webrick/httpauth/htpasswd.rb  
/usr/bin/vncpasswd  
/usr/bin/userpasswd  
/usr/bin/yppasswd  
…………

4、 find  
语法:  
[root@redhat ~]# find 路径 参数  
参 数说明:  
时间查找参数:  
-atime n :将n*24小时内存取过的的文件列出来  
-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的文件(可以使用通配符)  
例 如:  
[root@redhat ~]# find / -name zgz  
/home/zgz  
/home/zgz/zgz  
/home/weblogic/bea/user_projects/domains/zgz  
/home/oracle/product/10g/cfgtoollogs/dbca/zgz  
/home/oracle/product/10g/cfgtoollogs/emca/zgz  
/home/oracle/oradata/zgz

[root@redhat ~]# find / -name '*zgz*'  
/home/zgz  
/home/zgz/zgz1  
/home/zgz/zgzdirzgz  
/home/zgz/zgz  
/home/zgz/zgzdir  
/home/weblogic/bea/user_projects/domains/zgz  
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006  
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002  
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004  
/home/weblogic/bea/user_projects/domains/zgz/zgz.log  
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008  
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005

当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。  
locate 是在数据库里查找,数据库大至每天更新一次。  
whereis 可以找到可执行命令和man page  
find 就是根据条件查找文件。

which 可以找到可执行文件和别名(alias)

参考资料:

1. http://312788172.iteye.com/blog/730280

2. http://bbs.csdn.net/topics/320154707

3. http://zhidao.baidu.com/question/122024300.html

这五个命令也可以参考下面的内容:

linux中查找命令find、locate、whereis、which、type区别

1. find
www.2cto.com 
Java代码 
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。与查询数据库(/var/lib/locatedb)文件不同,find查找磁盘空间

  find的使用格式如下:

  $ find <指定目录> <指定条件> <指定动作>

  - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。

  - <指定条件>: 所要搜索的文件的特征。

  - <指定动作>: 对搜索结果进行特定的处理。 
www.2cto.com 
  如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

  find的使用实例:

  $ find . -name 'my*'

  搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。

  $ find . -name 'my*' -ls

  搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。

  $ find . -type f -mmin -10

  搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。

  2. locate
  
Java代码 
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

  locate命令的使用实例:

  $ locate /etc/sh

  搜索etc目录下所有以sh开头的文件。

  $ locate ~/m

  搜索用户主目录下,所有以m开头的文件。

  $ locate -i ~/m

  搜索用户主目录下,所有以m开头的文件,并且忽略大小写。

  3. whereis
  
Java代码 
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。同locate一样,查询数据库(/var/lib/locatedb)文件

  whereis命令的使用实例:

  $ whereis grep

  4. which
  
Java代码 
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

  which命令的使用实例:

  $ which grep

  5. type
  
Java代码 
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。 
www.2cto.com 
  type命令的使用实例:

  $ type cd

  系统会提示,cd是shell的自带命令(build-in)。

  $ type grep

  系统会提示,grep是一个外部命令,并显示该命令的路径。

  $ type -p grep

  加上-p参数后,就相当于which命令。

Linux中常用的查找文件的命令的更多相关文章

  1. Linux中常用的监控性能的命令(sar、mpstat,vmstat, iostat,)详解

    Linux中常用的监控性能的命令有: sar:能查看CPU的平均信息,还能查看指定CPU的信息.与mpstat相比,sar能查看CPU历史信息 mpstat:能查看所有CPU的平均信息,还能查看指定C ...

  2. Linux中一个快速查找文件和目录的命令

    功能介绍: locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,值得注意的是:版本不同,会有所不 ...

  3. Linux中常用的查看系统信息的命令

    导读 Linux是一个神奇而又高效的操作系统,学完Linux对Linux系统有一个熟悉的了解后,你需要了解下这些实用的查看系统信息的命令. 查看系统版本命令 uname 谈到系统版本就一定会想到una ...

  4. (转)linux中常用的头文件

    头文件主目录include 头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下,具体的作用和所包 ...

  5. Linux中常用的关机和重新启动命令

    hutdown.halt.reboot以及init,它们都可以达到关机和重新启动的目的,但是每个命令的内部工作过程是不同的,下面将逐一进行介绍. 一.shutdown shutdown命令用于安全关闭 ...

  6. Linux中常用来查看进程的命令PS

    查看所有运行中的进程:ps aux | less 显示所有进程: ps -A / ps -e 显示进程的树状图:pstree

  7. linux中常用压缩与解压命令

    一. tar文件的解压 tar -xvf db.tar 二. zip文件的压缩与解压 压缩 zip -r dest_name.zip directory_to_compress 解压 unzip de ...

  8. <实训|第十一天>学习一下linux中的进程,文件查找,文件压缩与IO重定向

    [root@localhost~]#序言 在今后的工作中,运维工程师每天的例行事务就是使用free -m,top,uptime,df -h...每天都要检查一下服务器,看看是否出现异常.那么今天我们就 ...

  9. Linux基本命令(9)定位、查找文件的命令

    定位.查找文件的命令 命令 功能 命令 功能 which 从path中找出文件的位置 find 找出所有符合要求的文件 whereis 找出特定程序的路径 locate 从索引中找出文件位置 9.1 ...

随机推荐

  1. 消除浏览器对input输入框的自动填充

    Mozilla官方文档建议的是 直接使用 autocomplete = ‘off’ 即可禁止输入框从浏览器cache获取数据,博主以前使用这个也就足够兼容浏览器了. 现在发现,却在chrome.fir ...

  2. Guid.NewGuid() 和 new Guid()的区别

    Guid.NewGuid().ToString() + "||" + (new Guid()).ToString() b8efacbb-7d43-4da5-9f48-9a75d8c ...

  3. vue.js 源代码学习笔记 ----- instance event

    /* @flow */ import { updateListeners } from '../vdom/helpers/index' import { toArray, tip, hyphenate ...

  4. (转)Hive自定义UDAF详解

    UDAF有两种,第一种是比较简单的形式,利用抽象类UDAF和UDAFEvaluator,暂不做讨论.主要说一下第二种形式,利用接口GenericUDAFResolver2(或者抽象类AbstractG ...

  5. gradle Could not create service of type CrossBuildFileHashCache using BuildSessionScopeServices.crea

    gradle Could not create service of type CrossBuildFileHashCache using BuildSessionScopeServices.crea ...

  6. CUDA Samples: Calculate Histogram(atomicAdd)

    以下CUDA sample是分别用C++和CUDA实现的计算一维直方图,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第九章,各个文件内容如下 ...

  7. 基于EasyDSS流媒体服务器实现的直播流管理与鉴权的后台方案

    本文转自EasyDSS团队Marvin的博客:http://blog.csdn.net/marvin1311/article/details/73548929 最新版本的EasyDSS流媒体解决方案, ...

  8. iOS下简单实现滑动导航条

    功能介绍 最近在做一款ios的app,其中有一个页面需要分成三个版块,版块之间可以通过左右滑动来进行切换,也可以通过点击上方的按钮来切换,好像在android中可以用过ViewPager + Frag ...

  9. Apache下配置Openstack Horizon (转)

    非常详尽的Horizon配置介绍,转自 dev.cloudwatt.com Deploy Horizon from source with Apache and SSL Some companies ...

  10. php 中的 Output Control 函数

    先看一个简单的例子 <?php ob_start(); echo 111; ob_clean(); echo 222; ob_start()开启ob缓存,然后111放进了ob缓存, 再调用ob_ ...