Linux中常用的查找文件的命令

时间:2022-12-11 16:15:10

我们经常在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&comma;vmstat&comma; iostat&comma;)详解

    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. &lpar;转&rpar;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. &lt&semi;实训&vert;第十一天&gt&semi;学习一下linux中的进程,文件查找,文件压缩与IO重定向

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

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

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

随机推荐

  1. Java Bean、POJO、 Entity、 VO 、PO、DAO

    Java Bean.POJO. Entity. VO , 其实都是java 对象,只不过用于不同场合罢了.    Java Bean: 就是一个普通的Java 对象, 只不过是加了一些约束条件.  声 ...

  2. Linux make&colon; g&plus;&plus;&colon; Command not found

    Linux使用make命令时遇到"make: g++: Command not found",这个主要是没有安装gcc-c++.x86_64,如下所示   [root@localh ...

  3. js post提交

    /* js跳转页面 url跳转地址,params参数列表 */ function Posturl(url,params){ //创建form表单 var temp_form=document.crea ...

  4. Python获取本机的mac&comma;ip&comma;name

    Python获取mac 获取计算机名字和ip(内网ip) 指定网卡ip

  5. ExtJs API 下载以及部署

    ExtJs API 下载方法 1.进入sencha官网:https://www.sencha.com/ 2.点击“Docs”进入文档帮助页面:http://docs.sencha.com/ 3.点击左 ...

  6. Android material design support library -- CollapsingToolbarLayout简介

    本文是codetrick上material design support library教程的第三篇,主要讲的是CollapsingToolbarLayout的概念和应用方法. 原文链接:Materi ...

  7. 关于split与StringTokenizer的理解

    关于split与StringTokenizer的理解 一.split    依据匹配给定的正則表達式来拆分此字符串.此方法返回的数组包括此字符串的子字符串,每一个子字符串都由还有一个匹配给定表达式的子 ...

  8. php file取重复

    function FetchRepeatMemberInArray($array) { // 获取去掉重复数据的数组 $unique_arr = array_unique ( $array ); // ...

  9. java inputstream to string stack overflow

    https://*.com/questions/309424/read-convert-an-inputstream-to-a-string 过千赞的答案

  10. CSS编码规则

    /* 和HTML一样使用两个空格来代替制表符 */ div { /* 为了代码的易读性,在每个声明块的左花括号前添加一个空格 */' padding: 15px; /* 每个声明语句的:后应该插入一个 ...