linux文件查找find命令

1、文件查找

基本介绍

  在文件系统上查找符合条件的文件

  linux上常见的文件查找工具:find命令

  查找分类  

    实时查找

    精确查找

基本语法

  find  [options..] [查找的路径] [查找条件] [处理动作]

    查找的路径:指定查找目标文件具体路径。默认为当前目录

    查找条件:指定的查找标准,可以是文件名、大小、类型、权限、属组或者属主等标准进行查找。默认为找出指定路径下的所有文件

    处理动作:对查找符合的文件做什么操作。默认输出至屏幕

    查找条件有哪些

      根据文件名查找:

        -name  “文件名称”:文件名称支持使用glob,也就是可以是用*、?、[]、[^]。使用-name进行文件查找时,是严格区分文件大小写的

          使用案例

            [root@oldboy ~]# find /etc -name "fs*"

            /etc/fstab

        -iname  “文件名称”:文件名称支持glob,使用-iname进行查找时,不区分文件的大小写

        -regex  PATTERN:以PATTERN去匹配整个路径字符串,而不仅仅是文件名称

      根据文件的属组、属主查找

        -user  USERNAME:查找属主为USERNAME的文件

        -group  GROUPNAME:查找属组为GROUPNAME的文件

        -uid  UID:查找属主为指定UID号的文件

        -gid  GID:查找属组为指定GID号的文件

        -nouser:查找没有属主的文件(即用户已经被删除,在文件属性中的属主列属性中只剩下一个UID)

        -nogroup:查找没有属组的文件(即属组已经被删除,在文件属性中属组列属性只剩下一个GID)

          注意:当我们把一个用户删除时,属于这个用户的文件的属组或者属主都变成相应的UID号了

      根据文件类型查找

        -type  TYPE

          TYPE包含下列几种

            f:普通文件

            d:目录文件

            l:符号链接文件

            s:套接字文件

            p:管道文件

            b:块设备文件

            c:字符设备文件

     组合条件查找

      -a:与(可以省略)

      -o:或

      -not或者 ! :非

      注意

        组合条件查找时有时需要把组合条件执行了再执行处理动作,因此,这个是组合条件就需要加括号(括号需要转义)避免出错。因为组合条件可能和后边的处理动作产生歧义,造成意想不到的效果

      产生这样结果的原因:通过处理动作执行后的结果会被输入到屏幕上,而组合条件没有加括号的话,只有组合条件中的最后一个条件与处理动作进行组和输出了

  案例演示

  1. [root@oldboy ~]# find /home -nouser -o -nogroup -ls
  2.  
  3. -rw-r--r-- oldboy Jul /home/oldboy/.bash_profile
  4.  
  5. -rw-r--r-- oldboy Jul /home/oldboy/.bashrc
  6.  
  7. -rw-rw-r-- oldboy Mar /home/oldboy/.txt
  8.  
  9. drw-r----- oldboy Mar /home/oldboy/test
  10.  
  11. -rw------- oldboy Dec : /home/oldboy/.viminfo
  12.  
  13. -rw------- oldboy Mar /home/oldboy/.bash_history
  14.  
  15. -rw------- oldboy Mar /home/oldboy/.history
  16.  
  17. -rw-r--r-- oldboy Jul /home/oldboy/.bash_logout
  18.  
  19. drwxrwxr-x oldboy Dec : /home/oldboy/script
  20.  
  21. -rw-rw-r-- oldboy Dec : /home/oldboy/script/functions
  22.  
  23. [root@oldboy ~]# find /home -nouser -ls
  24.  
  25. drwx------ Jan : /home/gentoo
  26.  
  27. -rw-r--r-- Jul /home/gentoo/.bash_profile
  28.  
  29. -rw-r--r-- Jul /home/gentoo/.bashrc
  30.  
  31. -rw-r--r-- Jul /home/gentoo/.bash_logout
  32.  
  33. drwx------ Mar : /home/com
  34.  
  35. -rw-r--r-- Jul /home/com/.bash_profile
  36.  
  37. drwxr-xr-x Mar /home/com/.mozilla
  38.  
  39. drwxr-xr-x Aug /home/com/.mozilla/extensions
  40.  
  41. drwxr-xr-x Aug /home/com/.mozilla/plugins
  42.  
  43. -rw-r--r-- Jul /home/com/.bashrc
  44.  
  45. -rw-r--r-- Jul /home/com/.bash_logout
  46.  
  47. [root@oldboy ~]# find /home -nogroup -ls
  48.  
  49. drwx------ Jan : /home/gentoo
  50.  
  51. -rw-r--r-- Jul /home/gentoo/.bash_profile
  52.  
  53. -rw-r--r-- Jul /home/gentoo/.bashrc
  54.  
  55. -rw-r--r-- Jul /home/gentoo/.bash_logout
  56.  
  57. -rw-r--r-- oldboy Jul /home/oldboy/.bash_profile
  58.  
  59. -rw-r--r-- oldboy Jul /home/oldboy/.bashrc
  60.  
  61. -rw-rw-r-- oldboy Mar /home/oldboy/.txt
  62.  
  63. drw-r----- oldboy Mar /home/oldboy/test
  64.  
  65. -rw------- oldboy Dec : /home/oldboy/.viminfo
  66.  
  67. -rw------- oldboy Mar /home/oldboy/.bash_history
  68.  
  69. -rw------- oldboy Mar /home/oldboy/.history
  70.  
  71. -rw-r--r-- oldboy Jul /home/oldboy/.bash_logout
  72.  
  73. drwxrwxr-x oldboy Dec : /home/oldboy/script
  74.  
  75. -rw-rw-r-- oldboy Dec : /home/oldboy/script/functions
  76.  
  77. drwx------ Mar : /home/com
  78.  
  79. -rw-r--r-- Jul /home/com/.bash_profile
  80.  
  81. drwxr-xr-x Mar /home/com/.mozilla
  82.  
  83. drwxr-xr-x Aug /home/com/.mozilla/extensions
  84.  
  85. drwxr-xr-x Aug /home/com/.mozilla/plugins
  86.  
  87. -rw-r--r-- Jul /home/com/.bashrc
  88.  
  89. -rw-r--r-- Jul /home/com/.bash_logout
  90.  
  91. [root@oldboy ~]# find /home -nouser -o -nogroup
  92.  
  93. /home/gentoo
  94.  
  95. /home/gentoo/.bash_profile
  96.  
  97. /home/gentoo/.bashrc
  98.  
  99. /home/gentoo/.bash_logout
  100.  
  101. /home/oldboy/.bash_profile
  102.  
  103. /home/oldboy/.bashrc
  104.  
  105. /home/oldboy/.txt
  106.  
  107. /home/oldboy/test
  108.  
  109. /home/oldboy/.viminfo
  110.  
  111. /home/oldboy/.bash_history
  112.  
  113. /home/oldboy/.history
  114.  
  115. /home/oldboy/.bash_logout
  116.  
  117. /home/oldboy/script
  118.  
  119. /home/oldboy/script/functions
  120.  
  121. /home/com
  122.  
  123. /home/com/.bash_profile
  124.  
  125. /home/com/.mozilla
  126.  
  127. /home/com/.mozilla/extensions
  128.  
  129. /home/com/.mozilla/plugins
  130.  
  131. /home/com/.bashrc
  132.  
  133. /home/com/.bash_logout
  134.  
  135. [root@oldboy ~]# find /home \( -nouser -o -nogroup \) -ls
  136.  
  137. drwx------ Jan : /home/gentoo
  138.  
  139. -rw-r--r-- Jul /home/gentoo/.bash_profile
  140.  
  141. -rw-r--r-- Jul /home/gentoo/.bashrc
  142.  
  143. -rw-r--r-- Jul /home/gentoo/.bash_logout
  144.  
  145. -rw-r--r-- oldboy Jul /home/oldboy/.bash_profile
  146.  
  147. -rw-r--r-- oldboy Jul /home/oldboy/.bashrc
  148.  
  149. -rw-rw-r-- oldboy Mar /home/oldboy/.txt
  150.  
  151. drw-r----- oldboy Mar /home/oldboy/test
  152.  
  153. -rw------- oldboy Dec : /home/oldboy/.viminfo
  154.  
  155. -rw------- oldboy Mar /home/oldboy/.bash_history
  156.  
  157. -rw------- oldboy Mar /home/oldboy/.history
  158.  
  159. -rw-r--r-- oldboy Jul /home/oldboy/.bash_logout
  160.  
  161. drwxrwxr-x oldboy Dec : /home/oldboy/script
  162.  
  163. -rw-rw-r-- oldboy Dec : /home/oldboy/script/functions
  164.  
  165. drwx------ Mar : /home/com
  166.  
  167. -rw-r--r-- Jul /home/com/.bash_profile
  168.  
  169. drwxr-xr-x Mar /home/com/.mozilla
  170.  
  171. drwxr-xr-x Aug /home/com/.mozilla/extensions
  172.  
  173. drwxr-xr-x Aug /home/com/.mozilla/plugins
  174.  
  175. -rw-r--r-- Jul /home/com/.bashrc
  176.  
  177. -rw-r--r-- Jul /home/com/.bash_logout

  案例演示

    找出/tmp目录下,属主不是root,并且文件的名字不是www的文件

      find  /tmp  ! \( -user “root” -o -name “www”  \)  -ls

    根据文件大小来查找

      -size  [+|-]num:指定文件的大小来进行查找。num表示文件的大小,后边可以跟一个单位,单位包括k、m、g

        使用注意:

          ①当我们给定数字和单位,那么去找寻文件时表示查询的文件的大小范围在大于这个给定数字减一到这个给定数字之间的任何值

          ②如果使减号后面跟数字加单位,表示找寻的文件大小是从0开始到给定数字减一的所有文件

          ③如果使用加号后面跟数字加单位,表示去找寻的文件是从当前给定数字到无穷大之间的所有文件的大小

        使用案例

          查找/tmp目录下,大小是3k的文件

            find  /tmp  -size  3k  -type  f

            注意:这里打印出的文件可能并非大小只是3k的文件,包括大于2k,小于等于3k的文件

    根据文件时间戳查找

      以天为单位

        -atime  [+|-] num:查询访问时间

        -mtime  [+|-] num:查询修改时间

        -ctime   [+|-] num:查询文件属性改变时间

      一分钟为单位

        -amin  [+|-] num:查询访问时间

        -mmin  [+|-] num:查询修改时间

        -cmin   [+|-] num:查询文件属性改变时间

      注意上面具体的时间参数在下面给出了

      注意:

        +num:表示指定天数大于等于num+1天之前

        num:如果只是数字,没有加减号,那么表示大于等于我们给定的前num这个天数,小于给定num天数加1

        -num:从当前开始(即大于等于0)到前三天,但是不包括前第三天即小于num天数

                      图示这些关系

 

   

    根据文件权限来查找

      -perm  [-|/] MODE

        MODE:没有加号或者减号,表示精确权限匹配权限

        MODE前给定了加号(/)或者减号( - )表示

          /MODE:任何一类对象(u、g、o)的权限中只要有一个匹配即可。CentOS7.x中+号的MODE形式已经被废弃了。改用的是斜线/

            案例演示

              找寻/tmp目录下的所有文件的文件属性在其他组的权限上具有执行权限的文件

                find  /tmp  -perm  /001  -ls

              找寻/tmp目录下的所有文件的文件属性在属组的权限上具有写或者读权限的文件

                  find  /tmp  -perm  /060  -ls

          -MODE:每一类对象(u、g、o)必须同时拥有为其制定的权限标准

            案例演示

              找寻/tmp目录下所有文件的文件属性在其他组的权限上具有可写、可执行或者可读、可写、可执行的文件

                find  /tmp  -perm  -003  -ls

   处理动作

      -print:默认的处理动作,显示到屏幕上

      -ls:类似于对查询到的文件执行ls  -l命令

      -delete:删除查询到的文件,谨慎使用

      -fls   FILE:查询到的所有文件的长格式信息保存值指定的PATH文件中

      -ok  COMMAND  {} \; :对查询到的每个文件执行由COMMAND指定的命令。但是这个命令在对每个文件进行命令之前都会交互是的与用户进行确认。注意:大括号与反斜线之间必须要有空格,否则报错。相对安全

      -exec  COMMAND {} \; :对查询到的每个文件执行由COMMAND指定的命令。但是这个不会跟用户进行交互式确认。注意:大括号与反斜线之间必须要有空格,否则报错。比较不安全

        注意:花括号{ }的表示的是引用find查询到的文件,而\;表示固定格式

      使用案例

        查询/tmp目录下三分钟之前修改过的文件,并且将文件名改为以.new结尾

  1. [root@oldboy ~]# find /tmp -type f -cmin -
  2.  
  3. /tmp/fstab
  4.  
  5. /tmp/issue
  6.  
  7. [root@oldboy ~]# find /tmp -type f -cmin - -exec mv {} {}.new \;
  8.  
  9. [root@oldboy ~]# find /tmp -type f -cmin -
  10.  
  11. /tmp/fstab.new
  12.  
  13. /tmp/issue.new

        注意:find传递查询到的文件传递给后面指定的命令时,是一次性查询到所有符合条件的文件,并且一次性传递给后面的命令。这个时候要注意,有些命令不能接受过多的参数,因此可能造成溢出,此时命令可能就会执行失败。那么怎么规避这个问题呢?使用xargs命令

      find  |  xargs  COMMAND

      这条命令表示:通过find命令查询到所有文件通过管道交给xargs,然后后面命令执行时,一次给命令一个参数,直至xargs给完所有内容

locate查找文件工具

  非实时查找或者叫数据库查找,他不是去遍历文件系统上的所有文件,而是一开始将所有的文件做成一个索引存放在数据库中,locate就是用来查询数据库而完成查找的

locate文件的查找依赖于事先构建的索引,索引的构建是在系统较为空闲时自动进行(这个是一个周期性任务)。

  locate的查询速度很快。因为他是通过数据库索引进行查找的,但是他的查找不够精确,因为,文件索引在数据库中的构建需要系统自动进行,而且是在系统比较空闲时进行的,因此,当我们创建一个文件后,通过locate去查找,可能不会找到。但是我们可以手动更新数据库

  手动更新文件索引数据库使用的命令updatedb。注意:文件索引的构建是非常消耗资源的,因为他要遍历整个根文件系统。当系统比较繁忙时禁止使用这个命令,因为可能其他服务无法工作

  工作特点

    查找速度查找

    模糊查找:路径下出现某个关键词都会把相应的路径打印出来

    非实时查找,非精确查找

locate基本语法

  ocate  keyword

使用介绍

  locate就是根据keyword关键词进行查找,她会找出包含keyword所有路径

2、find的练习

查询/var/目录下属主为root且属组为mail的文件或者目录

  find  /var/  -user  “root”  -a  -group  “mail”

查询/usr下属主不为root、bin、或者hadoop的所有文件或者目录

  find  /usr  -not  \( -user  root  -o  -user  “bin”  -o   -user  “hadoop” \)

  find  /usr  -not  -user  root  -a  -not  -user  bin  -a  -not  -user  haddop

查询当前系统上没有属主或者属组且最近一周内曾被访问过的文件或者目录

  find  /  -nouser  -a  -nogroup  -a  -atime  -7

  注意:问题的或者有不同的含义

查询/etc/目录下最近一周内其内容被修改过,同时属主不为root,也不是hadoop的文件或者目录

  find  /etc  -not  -mtime  -7  -a  -not  \(  -user  root  -o  -user  hadoop \)

  find  /etc  -not  \( -mtime  -7  -o  -user  root  -o   -user  hadoop  \)

查询/etc/目录下大于1M且类型为普通文件的所有文件

  find  /etc  -size  +1m  -type  f

查询/etc/所有用户都没有写权限的文件

  find  /etc/  -not  -perm   /222

查询/etc/下至少有一类用户没有执行权限的文件

  find  /etc/  -not  -perm  -111

查询/etc/init.d/下,所有用户都有执行权限且其他用户有些权限的文件

  find  /etc/init.d/  -perm  -113

linux文件查找find命令的更多相关文章

  1. linux文件查找-find命令

    find命令:用于在文件树中查找文件,并作出相应的处理 1.find命令的格式: find pathname -options [-print -exec -ok ...] {}\ 2.find命令的 ...

  2. linux 文件查找 find命令详解

    一,从索引库查找文件:locate 索引库:操作系统会周期性的遍历根文件系统,然后生成索引库 手动更新索引库:updatedb 语法:locate [OPTION]... PATTERN... 只匹配 ...

  3. 13.Linux文件查找-find命令

    find 命令的基本语法如下: 命令 路径 选项 表达式 动作 find [path...] [options] [expression] [action] 查找 地区 妹纸 18-25岁 约? (1 ...

  4. Linux下的文件查找类命令(转载)

    如何快速有效的定位文件系统内所需要查找的文件呢?Linux为我们提供了一些文件查找类的命令,我们需要掌握以下几个命令: http://blog.csdn.net/sailor201211/articl ...

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

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

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

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

  7. Linux文件查找.md

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

  8. 第1章 Linux文件类基础命令

    1. 关于路径和通配符 Linux中分绝对路径和相对路径,绝对路径一定是从/开始写的,相对路径不从根开始写,还可能使用路径符号. 路径展开符号: . :(一个点)表示当前目录 .. :(两个点)表示上 ...

  9. linux 文件查找,which,whereis,locate,find

    linux 文件查找,which,whereis,locate,find 一:which 主要用于查找可执行命令的所在位置: 如图,查找命令 ls的目录: 二:whereis 主要用于查找命令的帮助文 ...

随机推荐

  1. Android中的Context(一)

    Android中的Context(一) 在Android开发中,Context可以说是我们接触地非常多的一个概念了,也译作"上下文",但是这个上下文到底是什么却并不好理解. 通俗的 ...

  2. Tomcat并发优化和缓存优化

    Tomcat并发优化 1.调整连接器connector的并发处理能力 在Tomcat 配置文件 server.xml 中的 <Connector ... /> 配置中 1.参数说明 max ...

  3. hdu2132

    题目:We once did a lot of recursional problem . I think some of them is easy for you and some if hard ...

  4. JS的全局变量与局部变量及变量的提升

    遇到全局变量与局部变量的时候总是出一些或多或少的问题,于是专门花时间去认真研究了一下全局变量与局部变量. 这是在网上看到的一个关于全局变量与局部变量的代码,看了下作者的解析,自己也进行了研究. < ...

  5. 【推荐】HTML5 Word Cloud——中文词云

    在线工具: http://timdream.org/wordcloud/# 源码: https://github.com/timdream/wordcloud

  6. git冲突解决的几种办法

    文章目录 git stash 栈 放弃本地修改 撤销分支 强行冲掉之前的分支 删除分支 git stash 栈 git stash git pull git stash pop 当pull出现冲突时 ...

  7. git命令提交新项目

    新建的项目没有与git关联过git initgit add .git commit -m "注释"git remote add origin 新SSH:URLgit push -f ...

  8. ctype.h

    isalpha:int isalpha(char ch);检查ch是否是字母.是字母返回非0,否则返回0. iscntrl: int iscntrl(int ch); 检查ch是否控制字符(其ASCI ...

  9. react 表单受控和非受控

    参见:https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/ 非受控: onSubmit = ()=>{ const val ...

  10. js中的一些简单问题

    1.JavaScript的组成: ECMAScript标准--基本的语法和对象 DOM:Document Object Model 文档对象模型 BOM:Broswer Object Model 浏览 ...