find命令

      find:实时查找工具,根据我们指定的内容或者条件在系统上进行实时查找,比locate在实际场景中用的多得多的多

     具体用法:find   查找路径      查找条件             找到之后执行的动作

例如: find . -name “baoding.log”    -print    (按名字查找到baoding.log文件后输出到屏幕上,也可以通配符查找) 

  

                 查找条件
         -name 可以使用通配符 比如 * ? [] [^]
        find . -name “????.log”
       -iname 文件名称忽略大小写
        find . -iname “baoding.log”
   
       -inum n 根据inode来查找 (基本不用)
       find . -inum 1179826
     -samefile name  查找相同inode号的文件,其实等于查找硬链接(基本不用)

     -links n 根据链接数
        find . -links 2
     -regex 使用正则表达式的方法匹配文件名
        find /etc/ -regex “.*\.sh$”

        根据属主和属组来查找
     -user  -group -uid -gid 
     -nouser 查找没有属主的文件或者目录
     -nogroup 查找没有属组的文件或者目录
     测试方法:新建一个ash用户,然后把一个文件的属主和属组改成ash
              然后再删除ash用户
   
    根据文件类型:
        -type f 普通文件
              d 目录
              l 链接文件
              s 套接字文件
              b 块设备
              c 字符设备
              p 管道

    根据文件大小来查找
         -size + 大于多少的文件
             k M G
         -size – 小于多少的文件
             k M G
         -size   等于多少的文件
             k M G

    根据时间来查找
        -mtime +7 7天以前的  从第8天开始
        -mtime 7  当前时间往前推第7天
        -mtime -7  当前时间往前推第7天以内

     根据权限来查找(基本不用的)
        -perm 755 精确匹配有755权限的文件
        -perm -222 必须包含全部的222权限才可以
        -perm +222(CentOS 6)
              /222(CentOS 7)
              只要有一个比如说属主 属组或者其他人有一个拥有写权限即可

        组合条件:
与:-a
或:-o
非:-not, !

    不是p 或者 不是Q == 不是(P和Q)
    不是P 并且 不是Q == 不是 (P或者Q)

    同时两个条件 find . -user nanjing -type f

     find -not -user joe -o -not -user jane
     find . -user nanjing -o -group  1012
     find . -user nanjing -type f

  使用最频繁的是 
           -name 通配符
           -type f普通文件
                 d目录

    

 处理动作  -print  打印到屏幕上
           -ls    打印到屏幕上 类似于ls -l
           -delete 删除操作 只删除文件,不能删除非空目录
           -fls file 查找到的文件信息保存到指定的文本中
           -ok 在执行后面的动作之前会提示你是否需要执行(交互式的)
           -exec CMD  {} \;  执行后面的命令  {} 表示前面find出的结果  \; 固定用法

find 出来之后 -exec ls (一百万个文件) 删不了的
 
 xargs 将前面的find的查找结果分批次给后面的命令作为执行的参数,比如
   find / -name “*” | xargs ls 

 避免前面的find查找文件过多造成后面的命令不能执行这种情况

参数过多 
示例:执行删除操作
         find /tmp/hebei/  -name “*.log”  | xargs rm -rf
       删除前先执行查看操作:
          find /tmp/hebei/  -name “*.log”  | xargs ls -l
      

    
    find /tmp/ \( -not -user root -a -not -name “f*” \) 
       多个条件要使用\(\)  不能使用“” 

    find /etc/ -path ‘/etc/sane.d’ -a -prune -o -name “*.conf” -print
                                &&   真   ||

    查找/etc/下面所有的目录
    当查找到/etc/sane.d的时候  前面的条件为真(’/etc/sane.d’ -a -prune)  
                               或后面的条件就不会执行(-name “*.conf”)
    当查找到其他目录的时候   前面的条件为假 (’/etc/sane.d’ -a -prune)
                             或后面的会执行 (-name “*.conf”)
 
   a && b || c
    a 和b 都为真的时候 则 a && b 为真,然后后面c就不会执行    
    a 或者b 有一个为假,则 a && b 为假,然后后面的c就会执行

    查找目录是 /etc/
          要求排除 /etc/sane.d
          查找*.conf 文件

      
       find  -name  “*.conf”  -exec  cp {}  {}.orig  \;
       备份配置文件,添加.orig这个扩展名
      find /tmp -ctime +3 -user joe -ok rm {} \;
      提示删除存在时间超过3天以上的joe的临时文件
      find ~ -perm -002  -exec chmod o-w {} \;
     在你的主目录中寻找可被其它用户写入的文件
     ind /data –type  f -perm 644  -name “*.sh” –exec chmod 755 {} \;
     find  /home –type d -ls

    生产使用方式:
   1  删除  find /logs/  -name “*.log” -mtime +7 | xargs rm   监控告警 (磁盘告警)
          find /logs/  -name “*.log” -size +20G | xargs rm  应用日志
   2 备份  find /apps/data/ -name “*” -exec cp {}  /backup/  \;
   3 查找 find /apps/ -name “*.log” | xargs grep -i “error”  日志里面找错误
  

原创文章,作者:fsy,如若转载,请注明出处:http://www.178linux.com/73111

(0)
fsyfsy
上一篇 2017-04-10 19:51
下一篇 2017-04-10 20:57

相关推荐

  • CentOS系统启动流程

    概述:系统启动流程是Linux一个重要的内容,深入了解启动流程会对我们学习Linux起到一个顺水推舟的作用。因为CentOS 7改动较大,所以下面的内容只是针对CentOS 5和6来说的。下面进入正题。 启动流程:  第一步:POST加电自检    此过程的就是为了检测一下外界的硬件设备是否能够正常运行,如CPU,内存设备,硬盘…

    Linux干货 2016-09-13
  • Chrony

    RHEL7.4 192.168.100.1 作为时间服务器,其它主机到这台来同步时间。 时间服务器安装及配置:#yum install chrony –RHEL7默认已安装chrony,而没有安装ntpd. #systemctl status chronyd –查看chronyd服务状态#systemctl enable chrony…

    2018-01-06
  • linux中软链接和硬链接简单说明

    linux链接文件 在 Linux 上文件系统被分成两个部分:数据 (user data) 与元数据 (metadata)。数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如:文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含…

    Linux干货 2016-12-05
  • 马哥教育网络班19期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。     网桥用来连接两个不同的网络间的设备;集线器的作用是把接受的信号放大,从另一个端口再穿法出去,说白了就是延长网络的传输距离;   二层交换机工作在数据链路层,根据源和目的MAC地址进行数据转发;三层交换机就是具有部分路由器功能的交换机,三层交换…

    Linux干货 2016-07-07
  • iptables基本知识

    1)Linux下的防火墙概念 a、一般谈到Linux下的防火墙,我们都会首先想到iptables,其实更确切的叫法应该是Netfilter/iptables,iptables和Netfilter其实是存在差别的。 b、尽管它们经常被用来相互替换使用,Netfilter是用来实现Linux内核中防火墙的Linux内核空间程序代码段,它要么被直接编译进内核,要么…

    Linux干货 2016-07-16
  • linux文件目录详解

    linux目录结构   (且看且不看) 历史上 /usr和 /etc文件夹下既保存静态文件,也保存可变文件,后来有了/var层次结构,/usr下面的可变文件被转移到/var下面。因而/usr现在可以只读的方式挂载(如果它在单独的文件系统上)。 /etc下的可变文件早已转移到/var,因为技术上允许/ 根是系统内核启动后挂载的第一个分区,挂载到根上的…

    Linux干货 2017-05-31

评论列表(1条)

  • renjin
    renjin 2017-04-12 13:01

    总结了find命令的详细用法,内容写的很不错,需要注意一下排版