linux系统中我们经常会需要查找某些文件,当有时候我们不确定一个文件的位置,比如某服务配置文件具体路径,自己没有头绪去寻找的话会很难找,也会耽误时间。linux就提供了很多命令,find,locate,which,whereis等。下面就详细介绍这些命令并使用。

 find命令


find命令是linux中最常见的查找文件的命令,功能很强大,它是用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法:

find (选项) (参数)  [filename]

示例:

搜索当前目录(包含子目录下所有文件和文件夹)。

  1. [root@localhost /]# find .

搜索某个目录下的所有子目录和文件。

  1. [root@localhost /]# find /home 这里会把home下所有子目录文件都显示出来

搜索某个目录下的某个文件,这里加上参数-name 就是代表搜索文件名称。

  1. [root@localhost /]# find /home -name "123.txt"
  2. /home/test123/abc/.txt

对搜索目录的深度限制,-maxdepth参数是对搜索深度的设置

  1. [root@localhost /]# find . -maxdepth 1 1就是搜索一层
  2. .
  3. ./boot
  4. ./dev
  5. ./home
  6. ./proc
  7. ./run
  8. ./sys
  9. ./etc
  10. ./root
  11. ./tmp

对文件类型的搜索,参数type  

  1. [root@localhost /]# find . -maxdepth -type f f代表搜索文件
  2. ./.autorelabel
  3. ./appendonly.aof
  4. ./dump.rdb
  5. [root@localhost /]# find . -maxdepth -type d d代表搜索的是目录
  6. .
  7. ./boot
  8. ./dev
  9. ./home
  10. ./proc

上面搜索出来的文件目录都仅仅只显示名字,想看到详细信息

  1. [root@localhost /]# find . -maxdepth -type f -exec ls -lh {} \;
  2. -rw-r--r-- root root 6 ./.autorelabel
  3. -rw-r--r-- root root 30M 9 ./appendonly.aof
  4. -rw-r--r-- root root .5K 9 ./dump.rdb

按照文件或目录的权限搜索。需要 find命令中 perm 参数。使用方法可以参考这篇 https://blog.csdn.net/lidonghat/article/details/66478071

  1. [root@localhost /]# find . -maxdepth -type d -perm - -exec ls -dhl {} \; 按权限搜索当前目录中的目录
  2. drwxr-xr-x root root .3K 5 : ./dev
  3. drwxr-xr-x. root root 5 : ./home
  4. drwxr-xr-x root root 5 : ./run
  5. drwxr-xr-x. root root .0K 5 : ./etc
  6. drwxrwxrwt. root root .0K 5 : ./tmp
  7. drwxr-xr-x. root root .0K 5 : ./var
  8. drwxr-xr-x. root root .0K 6 ./usr
  9. drwxr-xr-x. root root 6 ./media
  10. drwxrwxrwx. root root 12 : ./mnt
  11. drwxr-xr-x. root root .0K 10 ./opt
  12. drwxr-xr-x. root root 6 ./srv
  1. [root@localhost /]# find . -maxdepth -type f -perm -exec ls -hl {} \; 按权限搜索当前目录中的文件
  2. -rw-r--r-- root root 6 ./.autorelabel
  3. -rw-r--r-- root root 30M 9 ./appendonly.aof
  4. -rw-r--r-- root root .5K 9 ./dump.rdb

找到当前目录下权限不是644的文件,-perm参数前面加了一个感叹号,取反

  1. [root@localhost /]# find . -maxdepth -type f ! -perm -exec ls -hl {} \;
  2. -rwxr-xr-x root root 5 : ./zzz

模糊搜索文件后缀包含.bash的文件

  1. [root@localhost /]# find /home -name "*.bash*"
  2. /home/xyy/.bash_logout
  3. /home/xyy/.bash_profile
  4. /home/xyy/.bashrc
  5. /home/xyy/.bash_history
  6. /home/mysql/.bash_logout

模糊搜索文件后缀不包含.bash的文件

  1. [root@localhost /]# find /home ! -name "*.bash*"

搜索当前目录属于root用户的文件

  1. [root@localhost /]# find . -maxdepth -type f -user root -exec ls -hl {} \;
  2. -rw-r--r-- root root 6 ./.autorelabel
  3. -rw-r--r-- root root 30M 9 ./appendonly.aof
  4. -rw-r--r-- root root .5K 9 ./dump.rdb
  5. -rwxr-xr-x root root 5 : ./zzz

 搜索文件大小大于300m的文件

  1. [root@localhost ~]# find / -type f -size +300M
  2. /proc/kcore
  3. find: ‘/proc/6258/task/6258/fdinfo/6’: 没有那个文件或目录
  4. find: ‘/proc/6258/fdinfo/6’: 没有那个文件或目录
  5. /usr/local/mysql/lib/libmysqld.a
  6. /usr/local/mysql/bin/mysqld

命令执行结果中有一些提示信息,这些信息不需要显示,可以去除。

  1. [root@localhost ~]# find / -type f -size +300M 2>/dev/null
  2. /proc/kcore
  3. /usr/local/mysql/lib/libmysqld.a
  4. /usr/local/mysql/bin/mysqld
  5. /usr/local/mysql/bin/mysql_embedded
  6. /usr/local/mysql/bin/mysqltest_embedded
  7. /usr/local/mysql/bin/mysql_client_test_embedded

知道每个文件具体大小,后面加上使用du命令统计下。

  1. [root@localhost ~]# find / -type f -size +300M 2>/dev/null | xargs du -sh
  2. 0 /proc/kcore
  3. 928M /usr/local/mysql/lib/libmysqld.a
  4. 350M /usr/local/mysql/bin/mysqld
  5. 330M /usr/local/mysql/bin/mysql_embedded
  6. 329M /usr/local/mysql/bin/mysqltest_embedded
  7. 331M /usr/local/mysql/bin/mysql_client_test_embedded
  8. 396M /usr/local/mysql/data/oa_workflow/OPERATION_LOGS.ibd
  9. 713M /usr/local/mysql/data/db_kingnet_oa/t_message.ibd

对结果的文件大小排序。

  1. [root@localhost ~]# find / -type f -size +300M 2>/dev/null | xargs du -sh | sort -nr
  2. 928M /usr/local/mysql/lib/libmysqld.a
  3. 928M /opt/mysql-8.0.0-dmr/libmysqld/libmysqld.a
  4. 713M /usr/local/mysql/data/db_kingnet_oa/t_message.ibd
  5. 665M /opt/mysql-8.0.0-dmr/sql/libsql.a
  6. 643M /opt/mysql-8.0.0-dmr/libmysqld/libsql_embedded.a
  7. 488M /usr/local/mysql/data/oa_2018/operation_logs.ibd
  8. 396M /usr/local/mysql/data/oa_workflow/OPERATION_LOGS.ibd
  9. 364M /usr/local/mysql/data/oa_workflow_test/OPERATION_LOGS.ibd
  10. 350M /usr/local/mysql/bin/mysqld
  11. 350M /opt/mysql-8.0.0-dmr/sql/mysqld

计算当前目录中文件md5的值并保存在文件中

  1. [root@localhost oa]# find . -type f | xargs md5sum > md5.txt
  2. [root@localhost oa]# cat md5.txt
  3. cfa55387ce15a2fb9060dd448d88538f ./time.sh
  4. f107df99a0e3d3f3a1bb6abaa549e5d8 ./a.txt
  5. 707cce2673010a0d0191c4a2d2440580 ./.a.txt.swp
  6. 37c218cf1dcb7cdb3a483eb7b8244246 ./passwd
  7. d41d8cd98f00b204e9800998ecf8427e ./b.txt
  8. 98828b6f94757a6bdfdeb0ff6decaa7d ./md5.txt

结合-exec和xargs 选项来搜索出来find出来的结果。(xargs与管道的区别是:管道是将前面命令的标准输出作为后面的标准输入,而xargs是实现“将标准输入作为命令的参数”)

exec后面跟着要执行的命令。

  1. [root@localhost oa]# ll
  2. 总用量
  3. -rw-r--r-- root root 5 : a.txt
  4. -rw-r--r-- root root 5 : b.txt
  5. -rw-r--r-- root root 5 : md5.txt
  6. -rw-r--r-- root root 5 : passwd
  7. -rw-r--r-- root root 4 : time.sh
  8. [root@localhost oa]# find . -type f -exec chmod {} \; 将搜索出来的文件权限改成777, 使用exec参数后面要固定跟上 {} \;
  9. [root@localhost oa]# ll
  10. 总用量
  11. -rwxrwxrwx root root 5 : a.txt
  12. -rwxrwxrwx root root 5 : b.txt
  13. -rwxrwxrwx root root 5 : md5.txt
  14. -rwxrwxrwx root root 5 : passwd
  15. -rwxrwxrwx root root 4 : time.sh

还有个参数和exec功能一样,只不过每个具体执行的过程会提示是否同意。

  1. [root@localhost oa]# find . -type f -ok chmod {} \;
  2. < chmod ... ./time.sh > ? y
  3. < chmod ... ./a.txt > ? y
  4. < chmod ... ./.a.txt.swp > ? y
  5. < chmod ... ./passwd > ? y
  6. < chmod ... ./b.txt > ? y
  7. < chmod ... ./md5.txt > ? y

用xargs显示出每个文件的信息。

  1. [root@localhost oa]# find . -type f | xargs stat
  2. 文件:"./time.sh"
  3. 大小: 块: IO 块: 普通文件
  4. 设备:fd00h/64768d Inode 硬链接:
  5. 权限:(/-rwxrwxrwx) Uid:( / root) Gid:( / root)
  6. 最近访问:-- ::52.548866071 +
  7. 最近更改:-- ::34.869883350 +
  8. 最近改动:-- ::43.855914501 +
  9. 创建时间:-
  10. 文件:"./a.txt"
  11. 大小: 块: IO 块: 普通文件
  12. 设备:fd00h/64768d Inode 硬链接:
  13. 权限:(/-rwxrwxrwx) Uid:( / root) Gid:( / root)
  14. 最近访问:-- ::33.041110933 +
  15. 最近更改:-- ::29.743048457 +
  16. 最近改动:-- ::43.858914559 +0800
    ........

找出 / 目录下以 .ini结尾的文件,并进行文件分类

  1. [root@localhost pcntl]# find / -name *.ini -type f -print | xargs file
  2. /etc/php.d/curl.ini: ASCII text
  3. /etc/php.d/posix.ini: ASCII text
  4. /etc/php.d/phar.ini: ASCII text
  5. /etc/php.d/zip.ini: ASCII text
  6. /etc/php.d/sysvsem.ini: ASCII text
  7. /etc/php.d/sysvshm.ini: ASCII text
  8. /etc/php.d/json.ini: ASCII text
  9. /etc/php.d/sysvmsg.ini: ASCII text
  10. /etc/php.d/fileinfo.ini: ASCII text
  11. /etc/php.ini: ASCII English text
  12. /opt/baletu/jdk1..0_51/lib/missioncontrol/configuration/config.ini: ASCII text
  13. /opt/baletu/jdk1..0_51/bin/jmc.ini: ASCII text
  14. /alidata/www/baletoo/Issue/conf/application.ini: ASCII text, with CRLF line terminators
  15. /alidata/www/baletoo/m/YafMobile/conf/application.ini: ASCII text, with CRLF line terminators
  16. /alidata/www/baletoo/YafPc/conf/application.ini: ASCII text, with CRLF line terminators

find功能还有很多,这里暂时就介绍这么多。

whereis命令


whereis命令用来搜索出二进制程序、源代码文件和man手册页等相关文件的路径。它的搜索内容比较局限,只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

示例:

  1. [root@localhost oa]# whereis mysql
  2. mysql: /usr/lib64/mysql /usr/local/mysql /usr/share/mysql /usr/local/mysql/bin/mysql

搜索二进制文件

  1. [root@localhost oa]# whereis -b ls
  2. ls: /usr/bin/ls

 which命令


 which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。which是根据使用者所配置的$PATH 变量内的目录去搜寻可运行档的!所以不同的$PATH 配置内容所找到的内容不一样。

示例:

  1. [root@localhost oa]# which php
  2. /usr/local/php7/bin/php

locate命令


locate命令用来查找文件或目录,它和find功能差不多,只不过比find命令块很多,因为find是在系统中每个目录搜索,而locate是搜索linux中的一个数据库。

示例:

  1. [root@localhost tmp]# locate nginx.conf
  2. /opt/nginx-1.12.0/conf/nginx.conf
  3. /usr/local/nginx/conf/.nginx.conf.swp
  4. /usr/local/nginx/conf/nginx.conf
  5. /usr/local/nginx/conf/nginx.conf.def
  1. [root@localhost tmp]# touch nginx.conf
  2. [root@localhost tmp]# locate nginx.conf
  3. /opt/nginx-1.12.0/conf/nginx.conf
  4. /usr/local/nginx/conf/.nginx.conf.swp
  5. /usr/local/nginx/conf/nginx.conf
  6. /usr/local/nginx/conf/nginx.conf.default
  7. /var/lib/pcp/pmdas/nginx/nginx.conf

locate这个命令不是搜索整个文件系统,而是搜索一个数据库,所以搜索速度很快。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令手动更新数据库。

  1. -v:显示执行的详细过程
  1. [root@localhost ~]# touch song.php
  2. [root@localhost ~]# locate song.php
  3. /root/song.php

在tmp目录下不行

【linux】linux查找功能的更多相关文章

  1. Linux文件查找.md

    Linux 文件查找 在Linux系统的查找相关的命令: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 w ...

  2. Linux下查找文件:which、whereis、locate、find 命令的区别

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索.which       查看可执行文件的位置,通过环境变量查whereis    查看文件的位置,通过数据库查,每 ...

  3. Linux文件查找

    Linux下查找文件的命令有两个; locate: find : locate这个命令对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了查 找文件速度很快,但是locate ...

  4. linux下查找某个文件位置的方法

    一.通过文件名查找法: 举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录 下,甚至在系统的某个地方也不知道,则这是可以使用如下命令: find / -name httpd.conf ...

  5. Linux文件查找命令find用法整理(locate/find)

    Linux文件查找查找主要包括:locate和find 1.locate 用法简单,根据数据库查找,非实时,用法: locate FILENAME 手动更新数据库(时间可能较长) updatedb 2 ...

  6. linux vi查找命令

    linux vi查找命令   div id="article_content" class="article_content">  使用vi编辑器编辑长文 ...

  7. linux下查找某个文件

    参考http://blog.csdn.net/gray13/article/details/6365654 一.通过文件名查找法: 举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录 ...

  8. 基于LINUX的多功能聊天室

    原文:基于LINUX的多功能聊天室 基于LINUX的多功能聊天室 其实这个项目在我电脑已经躺了多时,最初写完项目规划后,我就认认真真地去实现了它,后来拿着这个项目区参加了面试,同样面试官也拿这个项目来 ...

  9. Linux 文件查找

    在Linux系统的查找相关的命令: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 whereis wher ...

  10. Linux文件查找命令find,xargs详述【转】

    转自:http://blog.csdn.net/cxylaf/article/details/4069595 转自http://www.linuxsir.org/main/?q=node/137 Li ...

随机推荐

  1. Git Gerrit Code Review

    Gerrit Code Review | Gerrit Code Reviewhttps://www.gerritcodereview.com/

  2. Oracle 表空间不足引起的问题及解决方法

    -- 1 向数据库导入数据时报了ORA-01653: unable to extend table错误,网上查了下原因是由于表空间不足引起的: 查询表空间使用情况语句 select a.tablesp ...

  3. CMake--常用指令

    1 . ADD_DEFINITIONS 向 C/C++ 编译器添加 -D 定义,比如 在CMakeList.txt文件中添加: ADD_DEFINITIONS(-DENABLE_DEBUG -DABC ...

  4. DLNA流媒体设置

  5. django restframework PrimaryKeyRelatedField筛选的困惑

    一.在开发某运动app时,遇见以下情况 1.部分表内容如下: class Sports(models.Model): ''' 运动表 ''' school = models.ForeignKey(Sc ...

  6. SQL Server2012数据库开启远程连接

    在我们使用SQL Server数据库的时候很重要的一点就是开启数据库的远程连接,这是因为很多时候数据库部署在远程的服务器上会比较方便,而部署在客户端的话,由于客户端不固定,所以需要经常去部署,这样容易 ...

  7. Mysql Router 的集群

    1. c:\mysql-router, c:\mysql-5.7.23, 这两个目录的bin都要加入path 2. c:\mysql-shell,在bin下,有一个 mysqlsh.exe, 双击,打 ...

  8. IBM rational rose画时序图软件破解安装

    上边这个链接是开头的安装步骤,照着链接中的步骤安装完之后,接下来看下边. 1.然后安装完成打开软件“IBM Rational License Keyadministrator”.出现下图:选中第二项“ ...

  9. 移动APP用例设计中的关键点(转载)

    http://www.51testing.com/html/52/n-4421752.html 在测试工作中我们需要不断的总结和储备自己的知识和经验,譬如具备特定属性.环境以及场景,如:PC,手机,智 ...

  10. fiddler学习笔记2 字段说明;移动设备、解密证书

    # :           抓取顺序从1开始递增 result:    http 请求状态 protocol:   请求使用的协议如:http https ftp Host:         请求地址 ...