之前,我们学习过grep来过滤文件内容,而这种查找找的是某一个文件内的内容;以及 less 或者 man 或者上一节提到的 vim 编辑器中的 / 与 ? 都是用来查找单个文件内的内容。而这一节,我们提到的内容为查找符合条件的文件;

  查找依据则大体离不开 ls -l 长整形里面的相关内容;

文件查找  

  我们先回顾下Linux下,通过 ls -l 查看文件的相关属性:文件类型“d”,表示目录文件,文件权限“rwxr-xr-x.”属主、属组、其他用户的权限,“2”表示软连接数,root属主,root属组,4096size大小(通过-h可以转换为有单位的大小值),Jan 30 18:28为change time(通过stat命令可以查看atime/mtime/ctime,通过touch加参数可以修改这三个时间),最后一个即文件名;

locate

  非实时,模糊查找。可以通过“yum install mlocate”安装locate查找工具;

  locate查找是先要建立一个数据库,让后再从数据库里面来查找对应的类容,我们可以通过 updatedb 命令来生成这个数据库;但是在最开始使用的时候,数据库生成会比较慢;

  locate的优势是查找文件比较快速;但是该命令使用较少;

*find

  接下来我们重点介绍find命令;

  相对于locate而言,find实现的是实时查找,精确查找,因为他会遍历查找时所指定的所有文件内容,缺点是相对于locate而言,速度较慢;

  用法:

    find 查找路径 查找标准 查找后执行的处理动作

    查找路径:如果不写,即默认为当前目录

    查找标准:默认为指定路径下的所有文件

    处理动作:默认为显示到屏幕上

  

查找标准:

  常见参数

    -name 'FILENAME' 对文件名做精确匹配

      例如:find /etc/ -name 'passwd'

      其中'FILENAME'还支持文件名通配符,* ? []

      例如:find /etc/ -name '*passwd'

    -iname 'FILENAME' 对文件做精确查找,但是不区分文件名的大小写

    -regex PATTERN  使用正则表达式来进行文件查找

    -user USERNAME  基于文件的属主来查找文件

      例如:find /tmp -user hadoop

    -group GROUPNAME  基于文件的属组来查找文件

      例如:find /tmp -group hadoop

    -uid UID  基于文件的UID来查找文件

    -gid GID  基于文件的GID来查找文件

    【这里需要注意的是,如果用户以及用户组一旦被删除掉,这个用户的属主和属组就没有了,就只能通过uid以及gid来进行查找】

    -nouser  查找没有属主的文件【一般需要定期删除掉没有属主的文件,或者,将这些文件归到root用户下来,保证系统的安全性】

    -nogroup  查找没有属组的文件

      例如:find /tmp -nogroup

      例如:find /tmp -nouser

    -type  根据文件类型进行查找

      f  表示普通文件

      d  表示目录文件

      c  表示字符文件

      b  表示块文件

      l  表示连接文件

      p  表示管道文件

      s  表示套接字文件

      例如:find /etc -type l

    -size  根据文件的大小来查找【这里要注意的是,大小并不是严格的大小,例如10M,可能找出来的文件是9M到11M之间大小的文件都会被过滤】

      数字k

      数字M

      数字G

      [+|-]数字k  #这个表示查找大于,或者小于多少的文件

      如果不加单位,默认查找的大小就是字节;

      例如:find /etc -size +100k

  条件组合

    以上条件都可以根据 与 或 非的逻辑关系进行管理,同时使用多个条件来进行查找;

    -a  与,同时满足多个条件时才能被赛选出来【默认多个条件之间就是“与”关系】

    -o  或,多个条件中只需要满足一个条件即可被赛选出来

    -not  非,不满足条件的文件才会被选出来

      例如:find /tmp -nouser -a -type d

           find /tmp -nouser -o -type d -ls

         find /tmp -not -type d

           find /tmp/test -not -user user1 -a -not -user user2

           find /tmp/test -not \(-user user1 -o -user user2 \)

           find /tmp -not -user user1 -o -not type d

           find /tmp -not \(-user user1 -a type d \)

  时间戳查找

    -mtime  修改时间(一般是只的文件内容变更过的时间)

    -atime  访问时间(被查看过的时间,没有修改任何内容)

    -ctime  属性修改时间(比如属主、属组或者权限等内容改变的时间)

      [+|-]数字  通过正负号来指定时间是几天内,还是几天外,正号表示几天外,而负号则表示几天内,如果没有正负号,则表示访问当天;

      例如:find /tmp -mtime +5

    上面的三个参数,都是以天来计算单位的,如果想要以分钟为单位来进行查找,则使用下面的三个option:

    -mmin  修改时间(分钟)

    -cmin  属性改变时间(分钟)

    -amin  访问时间(分钟)

      [+|-]数字  同样可以使用正负号来表示范围

      例如:find /tmp -amin -5  #五分钟内访问过的文件

           find /tmp -cmin +10  #十分钟前属性改变过的文件

    【这里注意下/tmp目录,在该目录下30天没有访问的文件,会自动被系统删除掉】

  根据权限来查找文件

    -perm MODE  根据文件的权限来查找文件,这是精确查找

      例如:find /tmp -perm 644

    -perm -MODE  查找包含条件的文件

      例如:find /tmp -perm -644  #即查找文件权限小于644的文件,均满足条件,例如文件权限如果是500权限,500被644包含,所以满足条件

    -perm /MODE  九位权限只要有一位满足即可
      例如:find /tmp /640  #在这九位权限中,只要有一位匹配到即可,例如640是rw-r-----,有一个文件权限为 --- r-- --- 其中属组的r权限匹配成功,此文件就满足条件

处理动作

  一般在文件查找出来以后,我们需要对文件进行处理,常见的处理参数如下:

    -print  显示查找文件内容

    -ls  类似于ls -l的形式显示每一个文件的详细信息

    -ok COMMAND {} \;  -ok指定处理命令,{}表示调用前面查找出来的内容,必须以 \; 结尾,则是格式要求

      例如:find /tmp -nouser -ok rm -rf {} \;

    -exec COMMAND {} \;  -exec后面的操作是不需要进行确认的,如果使用-ok,在使用命令的时候回需要进行确认;

      例如:find /tmp -perm -006 -exec chmod o-w {} \;  #查找只有其他用户拥有的读写权限,然后去掉这个文件的度权限,这个用法比较常用;

               find /tmp -type d -ok chmod +x {} \;  

          find /tmp -perm -020 -exec mv {} {}.new \;

          find /tmp -name "*.sh" -a perm /111 -exec chmod o-x {} \;  #查找出以.sh结尾的文件,且具有执行权限的文件,让后将他们的执行权限全部去掉;

    

    find命令再查找到文件后,除了可以使用-ok和-exec关联行为命令外,还可以使用 xargs结合管道符来时用;xargs build and execute command lines from standard input 从标准输入接收命令;

      例如:find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles \;

           find /etc -size +1M | xargs echo >> /tmp/etc.largefiles

        【使用xargs功能就不用再通过{}来调用选出来的内容了;】

练习

1、查找/var目录下属主为root并且属组为mail的所有文件;
  find /var -user root -a -group mail
2、查找/usr目录下不属于root、bin、student的文件;
  find /usr -not -user root -a -not -user bin -o -a -not -user student
  find /usr -not \( -user root -o -user bin -o -user student \)
3、查找/etc目录下最近一周内内容修改过且不属于root以及student用户的文件;
  find /etc -mtime -7 -a -not -user root -a -not -user student
  find /etc -mtime -7 -a -not \( -user root -o -user student \)
4、查找当前系统上没有属主或属组且最近1天内没有被访问过的文件,并将其属主属组均修改为root;
  find / -nouser -o -nogroup -a -atime 1 -exec chowr root:root {} \;
5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中
  find /etc -size +1M >> /tmp/etc.largfiles
6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;
  find /etc -not -perm /222 -ls

 

 

  

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

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

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

  2. linux文件查找find命令

    linux文件查找find命令 1.文件查找 基本介绍 在文件系统上查找符合条件的文件 linux上常见的文件查找工具:find命令 查找分类 实时查找 精确查找 基本语法 find  [option ...

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

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

  4. linux文件查找-find命令

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

  5. Linux中3个文件查找相关命令详解

    源于:https://mp.weixin.qq.com/s/VPs-IXY6RoxbltHIxtIbng which命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令 ...

  6. 文件查找find命令

    find命令总结: 常用选项: -name 查找/etc目录下以conf结尾的文件 find /etc -name '*conf' -iname 查找当前目录下文件名为aa的文件,不区分大小写 fin ...

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

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

  8. linux下find(文件查找)命令的用法总结

    关联文章:http://blog.chinaunix.net/uid-24648486-id-2998767.html

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

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

随机推荐

  1. What happens to our code? JavaScript 代码是怎样执行的

    1. 我们的代码第一步会被parser 语法分析程序分析. 如果没有报错之后 2. 生产SyntaxTree, 我们的代码会转换成machine code 3. 最终 我们的代码会被运行出来. 下面的 ...

  2. Percona XtraDB Cluster 的一些使用限制(PXC 5.7)

    Percona XtraDB Cluster有众多的优秀特性,使得mysql集群得以轻松实现.但是不要忽略了它的一些限制.如果你无法接受,或者你的应用程序或数据库(比如使用了memory引擎)对限制无 ...

  3. webpack 打包产生的文件名中,hash、chunkhash、contenthash 的区别

    table th:first-of-type { width: 90px; } hash 类型 区别 hash 每一次打包都会生成一个唯一的 hash chunkhash 根据每个 chunk 的内容 ...

  4. vue 和 react 组件间通信方法对比

    vue 和 react 组件间通信方法对比: 通信路径 vue的方法 react的方法 父组件 => 子组件 props(推荐).slot(推荐).this.$refs.this.$childr ...

  5. SPA项目中,404页面 和 登陆页面 对应的路由,应该怎样控制?

    SPA项目中,404页面 和 登陆页面 对应的路由,应该怎样控制? 可以这样做: 登陆之前,所有页面跳到 登陆页面:包括随便输入的路由地址. 登陆后,跳到相应页面:随便输入的.不存在的路由地址,才跳到 ...

  6. Jenkins进阶-Git多仓库代码下载编译 (13)

    多仓库代码部署这个问题其实在13年做配置管理的时候,就遇到过这样的问题,而最近公司可视化图项目也需要多个仓库代码需要同时下载进行编译,由于仓库之间的代码编译有依赖关系,所以必须同时下载下来按照顺序进行 ...

  7. pyhanlp用户自定义词典添加实例说明

    pyhanlp用户自定义词典添加实例说明 pyhanlp是python版封装的的HanLP,项目地址:https://github.com/hankcs/pyhanlp 经过测试,HanLP比nltk ...

  8. iOS开发 SourceTree将develop合并到master分支的详细步骤

  9. 一个基于netty的websocket聊天demo

    这里,仅仅是一个demo,模拟客户基于浏览器咨询卖家问题的场景,但是,这里的demo中,卖家不是人,是基于netty的程序(我就叫你uglyRobot吧),自动回复了客户问的问题. 项目特点如下: 1 ...

  10. Using the SDRAM on Altera’s DE1-SoC Board with Verilog Designs

    Using the SDRAM on Altera’sDE1-SoC Board with Verilog Designs 1.DE1-SOC Board上SDRAM资源 2.系统架构框图 3.关于S ...