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
下一篇 2017-04-10

相关推荐

  • 第三周(3):课堂练习与作业

    课堂练习: 1、找出ifconfig命令结果中本机的所有IPv4地址 [root@centos6 ~]# ifconfig | tr -cs '[0-9].' '\n'|sort -ut. -k3n 127.0.0.1 10.1.…

    Linux干货 2016-08-08
  • 第8天:脚本基础,btrf,raid,

    http://note.youdao.com/yws/public/redirect/share?id=61b38adef24ced4dc646a5ef8e68df18&type=false

    Linux干货 2016-08-16
  • 常用文本处理命令练习

    1、列出当前系统上所有已经登录的的用户的用户名,注意同一用户登录多次,则只显示一次 [root@keyou ~]#  w -hs | cut -d' ' -f 1 | sort -u  gentoo …

    系统运维 2016-11-13
  • 第七周 N21 总有刁民想害朕

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;        mke2fs -t ext4 /dev/sdb5 -b 2048 -m 2 -L "MYDATA&quot…

    Linux干货 2016-08-08
  • 启动流程与内核管理

    centos6和centos5启动流程与内核管理,启动过程中遇到的系统不能启动,各个阶段该怎么解决

    Linux干货 2018-01-02
  • SHELL网络爬虫实例剖析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1552472        前天简单分享了用 shell 写网络爬虫的一些见解,今天特地把代码发出来与51博…

    Linux干货 2016-08-15

评论列表(1条)

  • renjin
    renjin 2017-04-12 13:01

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