zoukankan      html  css  js  c++  java
  • Linux 文件查找

    Linux文件查找
      文件查找:在文件系统上需要根据文件的各种属性去查找符合条件的文件,而文件查找工具有两个:locate和find
     此前使用的grep、egrep、fgrep属于文本过滤、文本搜索工具

      文检查找分为两类:
      实时查找:偏历所有文件进行条件匹配(find)
      非实时查找:根据索引查找(数据库查找)locate

    locate
      工作特性:查找速度快、模糊查找、非实时查找
      locate属于非实时查找,查询系统上预建的文件索引数据库(/var/lib/mlocate/mlocate.db)
      依赖于事先构建的索引
      索引的创建是在系统空闲时由系统自动进行(周期性任务)
      管理员手动更新数据库使用updatedb命令
      索引构建过程需要遍历整个根文件系统,极消耗资源
      搜索的是文件的全路径,不仅仅是文件名
      可能只搜索用户具备读取和执行权限的目录

      用法:
      locate [OPTION]... PATTERN...
      -b 只匹配路径中的基名
      -c 统计出共有多少个符合条件的文件
      -r 使用BRE(基本正则表达式)
      -i 不区分大小写的搜索

      注意:locate的用法非常简单,即:locate KEYWORD,在locate后面跟上所要查找的关键字即可,需依赖数据库(缺点不能查找指定目录)

    演示:
    # 搜索名称或路径中带有“passwd”的文件
    [root@centos7 ~]# locate passwd
    /etc/passwd
    /etc/passwd-
    /etc/pam.d/passwd
    /etc/security/opasswd
    /usr/bin/gpasswd
    /usr/bin/grub2-mkpasswd-pbkdf2
    /usr/bin/htpasswd
    /usr/bin/kdepasswd
    /usr/bin/lppasswd
    /usr/bin/passwd
    /usr/bin/smbpasswd
    /usr/bin/vncpasswd
    /usr/lib/firewalld/services/kpasswd.xml
    /usr/lib64/kde4/kded_kpasswdserver.so
    /usr/lib64/samba/libsmbpasswdparser-samba4.so
    /usr/lib64/samba/pdb/smbpasswd.so
    /usr/lib64/security/pam_unix_passwd.so
    /usr/sbin/chpasswd
    /usr/sbin/lpasswd
    /usr/sbin/saslpasswd2

    # 加-b选项,只匹配路径中的基名包含passwd
    [root@centos7 ~]# locate -b passwd
    /etc/passwd
    /etc/passwd-
    /etc/pam.d/passwd
    /etc/security/opasswd
    /usr/bin/gpasswd
    /usr/bin/grub2-mkpasswd-pbkdf2
    /usr/bin/htpasswd
    /usr/bin/kdepasswd
    /usr/bin/lppasswd
    /usr/bin/passwd
    /usr/bin/smbpasswd
    /usr/bin/vncpasswd
    /usr/lib/firewalld/services/kpasswd.xml
    /usr/lib64/kde4/kded_kpasswdserver.so
    /usr/lib64/samba/libsmbpasswdparser-samba4.so

    # 统计出共有多少个符合条件的文件;
    [root@centos7 ~]# locate -c passwd
    140
    [root@centos7 ~]# locate -c -b passwd
    132

    [root@centos7 ~]# locate -r '.foo$'
    [root@centos7 ~]# locate -cr '.foo$'
    0

    find
      工作方式:实时查找工具,通过遍历指定起始路径下系统层级结构完成文件查找

      工作特点:
      查找速度略慢
      精确查找
      实时查找
      可能只搜索用户具备读取和执行权限的目录

      用法:
      find [OPTION]... [查找路径] [查找条件] [处理动作]
      查找路径:指定具体目标路径,可指定多个路径;默认为当前目录
      查找条件:指定的查找标准,可以根据文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
      处理动作:对符合条件的文件做操作,例如删除等操作;默认操作为输出至标准输出(屏幕)

     查找条件
      表达式:选项和测试
      测试:测试结果通常为布尔型(真:true、假:false)

      根据文件名和inode查找:
      -name "Partern"
      -iname "Partern" 不区分字母大小写
        Partern支持使用glob风格的通配符(*, ?, [], [^]文件名称一定加引号)
      -inum # 查找inode号为#的
      -samefile FileName 与FileName文件相同inode号的文件
      -links # 查找链接数为#的
      -regex "PATTERN" 以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称

    演示:
    -name "partern"和-iname "partern",支持使用glob风格第通配符
    [root@centos7 ~]# mkdir /etc/test
    [root@centos7 ~]# touch /etc/test/Passwd
    [root@centos7 ~]# touch /etc/test/MPASSWD
    [root@centos7 ~]# touch /etc/test/MPASSWD.txt

    [root@centos7 ~]# find /etc -name passwd
    /etc/passwd
    /etc/pam.d/passwd

    [root@centos7 ~]# find /etc -iname passwd
    /etc/passwd
    /etc/pam.d/passwd
    /etc/test/Passwd

    # 支持使用glob风格的通配
    [root@centos7 ~]# find /etc/ -iname "passwd*"
    /etc/passwd
    /etc/passwd-
    /etc/pam.d/passwd
    /etc/test/Passwd

    [root@centos7 ~]# find /etc/ -iname "*passwd"
    /etc/passwd
    /etc/pam.d/passwd
    /etc/security/opasswd
    /etc/test/Passwd
    /etc/test/MPASSWD

    [root@centos7 ~]# find /etc/ -iname "passwd?"
    /etc/passwd-
    [root@centos7 ~]# find /etc/ -iname "?passwd"
    /etc/security/opasswd
    /etc/test/MPASSWD

    [root@centos7 ~]# touch /etc/test/passwdx
    [root@centos7 ~]# find /etc/ -iname "passwd?"
    /etc/passwd-
    /etc/test/passwdx
    [root@centos7 ~]# find /etc/ -iname "passwd[[:alnum:]]"
    /etc/test/passwdx

      根据属主、属组查找:
      -user UserName 查找属主为指定用户的所有文件
      -group GroupName 查找属组为指定组的所有文件
      -uid UID 查找属主为指定的UID号的所有文件
      -gid GID 查找属组为指定的GID号的所有文件
      -nouser 查找没有属主的文件(文件的属主用户被删除)
      -nogroup 查找没有属组的文件

    演示:
    根据属主,属组查找
    [root@centos7 ~]# ll /home
    总用量 0
    drwx------ 5 arclinux arclinux 121 2月 10 23:32 arclinux
    drwx------ 6 centos centos 134 2月 11 01:28 centos
    drwx------ 3 mage mage 74 2月 14 19:35 mage
    drwx------. 3 mageedu mageedu 74 11月 6 18:31 mageedu
    # 根据属主查找
    [root@centos7 ~]# find /home -user centos
    /home/centos
    /home/centos/.mozilla
    /home/centos/.mozilla/extensions
    /home/centos/.mozilla/plugins
    /home/centos/.bash_logout
    /home/centos/.bash_profile
    /home/centos/.bashrc
    /home/centos/.cache
    /home/centos/.cache/abrt
    /home/centos/.cache/abrt/lastnotification
    /home/centos/.cache/dconf
    /home/centos/.cache/dconf/user
    /home/centos/.config
    /home/centos/.config/abrt
    /home/centos/.bash_history
    /home/centos/.local
    /home/centos/.local/share
    /home/centos/.local/share/keyrings
    /home/centos/.local/share/keyrings/login.keyring
    /home/centos/.local/share/keyrings/user.keystore
    # 根据属组查找
    [root@centos7 ~]# find /home -group arclinux
    /home/arclinux
    /home/arclinux/.mozilla
    /home/arclinux/.mozilla/extensions
    /home/arclinux/.mozilla/plugins
    /home/arclinux/.bash_logout
    /home/arclinux/.bash_profile
    /home/arclinux/.bashrc
    /home/arclinux/.cache
    /home/arclinux/.cache/abrt
    /home/arclinux/.cache/abrt/lastnotification
    /home/arclinux/.config
    /home/arclinux/.config/abrt
    /home/arclinux/.bash_history

    根据UID和GID查找
    [root@centos7 ~]# id centos
    uid=1001(centos) gid=1001(centos) 组=1001(centos)
    [root@centos7 ~]# id arclinux
    uid=1002(arclinux) gid=1002(arclinux) 组=1002(arclinux),1003(mygrp)
    [root@centos7 ~]# find /home -uid 1001
    /home/centos
    /home/centos/.mozilla
    /home/centos/.mozilla/extensions
    /home/centos/.mozilla/plugins
    /home/centos/.bash_logout
    /home/centos/.bash_profile
    /home/centos/.bashrc
    /home/centos/.cache
    /home/centos/.cache/abrt
    /home/centos/.cache/abrt/lastnotification
    /home/centos/.cache/dconf
    /home/centos/.cache/dconf/user
    /home/centos/.config
    /home/centos/.config/abrt
    /home/centos/.bash_history
    /home/centos/.local
    /home/centos/.local/share
    /home/centos/.local/share/keyrings
    /home/centos/.local/share/keyrings/login.keyring
    /home/centos/.local/share/keyrings/user.keystore
    [root@centos7 ~]# find /home -gid 1002
    /home/arclinux
    /home/arclinux/.mozilla
    /home/arclinux/.mozilla/extensions
    /home/arclinux/.mozilla/plugins
    /home/arclinux/.bash_logout
    /home/arclinux/.bash_profile
    /home/arclinux/.bashrc
    /home/arclinux/.cache
    /home/arclinux/.cache/abrt
    /home/arclinux/.cache/abrt/lastnotification
    /home/arclinux/.config
    /home/arclinux/.config/abrt
    /home/arclinux/.bash_history

    查找没有属主和属组的文件
    [root@centos7 ~]# ll /home
    总用量 0
    drwx------ 5 arclinux arclinux 121 2月 10 23:32 arclinux
    drwx------ 6 centos centos 134 2月 11 01:28 centos
    drwx------ 3 mage mage 74 2月 14 19:35 mage
    drwx------. 3 mageedu mageedu 74 11月 6 18:31 mageedu
    # 删除一个用户,保留其家目录
    [root@centos7 ~]# userdel mage
    [root@centos7 ~]# ll /home
    总用量 0
    drwx------ 5 arclinux arclinux 121 2月 10 23:32 arclinux
    drwx------ 6 centos centos 134 2月 11 01:28 centos
    drwx------ 3 1003 1004 74 2月 14 19:35 mage # 删除用户后的目录,没有属主和属组
    drwx------. 3 mageedu mageedu 74 11月 6 18:31 mageedu
    # 查找没有属主的文件
    [root@centos7 ~]# find /home -nouser
    /home/mage
    /home/mage/.mozilla
    /home/mage/.mozilla/extensions
    /home/mage/.mozilla/plugins
    /home/mage/.bash_logout
    /home/mage/.bash_profile
    /home/mage/.bashrc

      根据文件类型查找
      -type TYPE
      f 普通文件
      d 目录文件
      l 符号链接文件
      s 套接字文件
      b 块设备文件
      c 字符设备文件
      p 管道文件
      s 套接字文件

    演示:
    # 查找/dev下所有的块设备
    [root@centos7 ~]# find /dev -type b
    /dev/sr0
    /dev/sda5
    /dev/sda4
    /dev/sda3
    /dev/sda2
    /dev/sda1
    /dev/sda
    [root@centos7 ~]# find /dev -type b -ls
    9712 0 brw-rw---- 1 root cdrom 11, 0 2月 20 09:07 /dev/sr0
    9705 0 brw-rw---- 1 root disk 8, 5 2月 20 09:07 /dev/sda5
    9704 0 brw-rw---- 1 root disk 8, 4 2月 20 09:07 /dev/sda4
    9703 0 brw-rw---- 1 root disk 8, 3 2月 20 09:07 /dev/sda3
    9702 0 brw-rw---- 1 root disk 8, 2 2月 20 09:07 /dev/sda2
    9701 0 brw-rw---- 1 root disk 8, 1 2月 20 09:07 /dev/sda1
    9671 0 brw-rw---- 1 root disk 8, 0 2月 20 09:07 /dev/sda

      组合条件
      与 -a默认组合逻辑
      或 -o
      非 -not、!

      德·摩根定律:
      (非P) 或 (非Q) = 非(P且Q)
      (非P) 且 (非Q) = 非(P或Q)
      示例:
      !A -a !B = !(A -o B)
      !A -o !B = !(A -a B)

    演示:
    # 与逻辑
    [root@centos7 ~]# find /home -nouser -type f
    /home/mage/.bash_logout
    /home/mage/.bash_profile
    /home/mage/.bashrc
    [root@centos7 ~]# find /home -nouser -type f -ls
    67110217 4 -rw-r--r-- 1 1003 1004 18 11月 20 2015 /home/mage/.bash_logout
    67110218 4 -rw-r--r-- 1 1003 1004 193 11月 20 2015 /home/mage/.bash_profile
    67110219 4 -rw-r--r-- 1 1003 1004 231 11月 20 2015 /home/mage/.bashrc

    [root@centos7 ~]# find /home -nouser -a -type f -ls
    67110217 4 -rw-r--r-- 1 1003 1004 18 11月 20 2015 /home/mage/.bash_logout
    67110218 4 -rw-r--r-- 1 1003 1004 193 11月 20 2015 /home/mage/.bash_profile
    67110219 4 -rw-r--r-- 1 1003 1004 231 11月 20 2015 /home/mage/.bashrc

    # 或逻辑
    [root@centos7 ~]# find /home -nouser -o -type f -ls
    67332181 4 -rw-r--r-- 1 mageedu mageedu 18 11月 20 2015 /home/mageedu/.bash_logout
    67332182 4 -rw-r--r-- 1 mageedu mageedu 193 11月 20 2015 /home/mageedu/.bash_profile
    67332183 4 -rw-r--r-- 1 mageedu mageedu 231 11月 20 2015 /home/mageedu/.bashrc
    67112341 4 -rw-r--r-- 1 centos centos 18 11月 20 2015 /home/centos/.bash_logout
    67112342 4 -rw-r--r-- 1 centos centos 193 11月 20 2015 /home/centos/.bash_profile
    67112343 4 -rw-r--r-- 1 centos centos 231 11月 20 2015 /home/centos/.bashrc
    134353167 4 -rw------- 1 centos centos 11 2月 13 11:29 /home/centos/.cache/abrt/lastnotification
    134361164 4 -rw------- 1 centos centos 2 2月 11 01:32 /home/centos/.cache/dconf/user
    67112299 4 -rw------- 1 centos centos 1257 2月 11 16:00 /home/centos/.bash_history
    67114412 4 -rw------- 1 centos centos 105 2月 11 01:28 /home/centos/.local/share/keyrings/login.keyring
    67114411 0 -rw------- 1 centos centos 0 2月 11 01:28 /home/centos/.local/share/keyrings/user.keystore
    67110210 4 -rw-r--r-- 1 arclinux arclinux 18 11月 20 2015 /home/arclinux/.bash_logout
    67110211 4 -rw-r--r-- 1 arclinux arclinux 193 11月 20 2015 /home/arclinux/.bash_profile
    67110212 4 -rw-r--r-- 1 arclinux arclinux 231 11月 20 2015 /home/arclinux/.bashrc
    201391275 4 -rw------- 1 arclinux arclinux 11 2月 11 14:35 /home/arclinux/.cache/abrt/lastnotification
    67110214 4 -rw------- 1 arclinux arclinux 217 2月 11 14:35 /home/arclinux/.bash_history

    #非操作
    [root@centos7 ~]# find /home -not -nouser
    /home
    /home/mageedu
    /home/mageedu/.mozilla
    /home/mageedu/.mozilla/extensions
    /home/mageedu/.mozilla/plugins
    /home/mageedu/.bash_logout
    /home/mageedu/.bash_profile
    /home/mageedu/.bashrc
    /home/centos
    /home/centos/.mozilla
    /home/centos/.bash_history
    /home/centos/.local
    /home/centos/.local/share
    /home/centos/.local/share/keyrings
    /home/centos/.local/share/keyrings/login.keyring
    /home/centos/.local/share/keyrings/user.keystore
    /home/arclinux
    /home/arclinux/.mozilla
    /home/arclinux/.mozilla/extensions
    /home/arclinux/.mozilla/plugins
    /home/arclinux/.bash_logout
    /home/arclinux/.bash_profile

    找出/tmp目录下,属主不是root,且文件名不以f开头的文件
    # 组合条件查找时,括号要转义
    find /tmp ( -not -user root -a -not -name 'f*' ) -ls
    # 或者
    find /tmp -not ( -user root -o -name 'f*' ) -ls

      根据文件大小来查找
      格式:-size [+|-] #UNIT(单位)
      常用单位:K、M、G
      区间:包含和不包含的关系(中括号包含等于,小括号不包含等于)
      #Unit  (#-1,#] 如:6k表示(5k,6k]
      -#Unit  [0,#-1] 如:-6k 表示[0,5k]
      +#Unit  (#,∞)  如:+6k 表示(6k,∞)

      根据时间戳查找
     以"天"为单位,只能是过去的时间轴
     -atime [+|-]#,
      #   [#,#+1)  如:7 表示[7,8)从当前时刻起,过去第7天访问的文件(大于等于7小于第8天)
      +#  [#+1,∞] 如:+7 表示[8,∞]至少有7天没有被访问过了
      -#  [0,#)   如:-7 表示[0,7]7天内访问过的文件
      -mtime
      -ctime

      以"分钟"为单位:
      -amin
      -mmin
      -cmin

    演示:
    # 查找/etc目录下至少已经一周没有被访问过的文件,+7 为大于7天
    [root@centos7 ~]# find /etc -atime +7 -ls
    201367050 4 -rw-r--r-- 1 root root 3562 11月 6 16:36 /etc/keepalived/keepalived.conf.bak
    201367053 4 -rw-r--r-- 1 root root 1555 11月 6 20:29 /etc/keepalived/keepalived.conf
    134307865 4 -rw-r--r-- 1 root root 577 8月 6 2015 /etc/odbcinst.ini
    1049 4 -rw-r--r-- 1 root root 1517 4月 20 2016 /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
    201366403 12 -rw-r--r-- 1 root root 10341 11月 13 10:44 /etc/zabbix/zabbix_agentd.conf.bak
    201366425 12 -rw-r--r-- 1 root root 10575 11月 16 09:17 /etc/zabbix/zabbix_agentd.conf
    201366446 16 -rw-r----- 1 root zabbix 15925 4月 20 2016 /etc/zabbix/zabbix_proxy.conf
    134397465 20 -rw------- 1 root root 18861 11月 21 2015 /etc/snmp/snmpd.conf
    134397466 4 -rw------- 1 root root 220 11月 21 2015 /etc/snmp/snmptrapd.conf
    201643294 12 -rw-r--r-- 1 root root 10017 12月 12 15:02 /etc/php-fpm.d/www.conf
    134489903 4 -rw-r--r-- 1 root root 2881 11月 21 2015 /etc/corosync/corosync.conf.example
    134489904 4 -rw-r--r-- 1 root root 767 11月 21 2015 /etc/corosync/corosync.conf.example.udpu
    134489905 4 -rw-r--r-- 1 root root 3278 11月 21 2015 /etc/corosync/corosync.xml.example
    134489916 4 -rw-r--r-- 1 root root 3031 12月 7 16:41 /etc/corosync/corosync.conf

    # 查找/etc目录下一天以内修改的文件
    [root@centos7 ~]# find /etc -mtime -1 -ls
    134299777 12 drwxr-xr-x 134 root root 8192 2月 20 10:45 /etc
    134299808 4 -rw-r--r-- 1 root root 80 2月 20 09:08 /etc/resolv.conf
    134353171 4 -rw-r--r-- 1 root root 1021 2月 20 10:36 /etc/group
    134353172 4 ---------- 1 root root 824 2月 20 10:36 /etc/gshadow
    134361159 4 -rw-r--r-- 1 root root 2467 2月 20 10:36 /etc/passwd
    134353168 4 ---------- 1 root root 1431 2月 20 10:36 /etc/shadow
    67109024 4 drwxr-xr-x 6 root root 4096 2月 20 2017 /etc/sysconfig
    35649 4 drwxr-xr-x 2 root root 4096 2月 20 2017 /etc/sysconfig/network-scripts
    11249 4 -rw-r--r-- 1 root root 14 2月 20 09:08 /etc/tuned/active_profile

    [root@centos7 ~]# stat /etc/passwd
    文件:"/etc/passwd"
    大小:2467 块:8 IO 块:4096 普通文件
    设备:802h/2050d Inode:134361159 硬链接:1
    权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2017-02-20 10:36:29.693358124 +0800
    最近更改:2017-02-20 10:36:24.047176802 +0800
    最近改动:2017-02-20 10:36:24.048176834 +0800
    创建时间:-

     根据权限查找
      格式:-perm [/|-] MODE
      MODE 精确权限匹配
      /MODE 任何一类(u,g,o)对象的权限中的任何一位(r,w,x)符合条件既满足,9位权限之间为或关系
      -MODE 每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件既满足,9位权限之间为与关系
      查找权限位为"0"时:表示查找匹配时该类型权限不作为匹配条件

    示例:
    find -perm 755会匹配权限模式恰好是755的文件
    find -perm /222只要当任意人有写权限时,就会匹配
    find -perm -222只有当每个人都有写权限时,才会匹配
    find -perm -002只有当其它人(other)有写权限时,才会匹配

    演示:
    [root@centos7 ~]# mkdir /tmp/test
    [root@centos7 ~]# cd /tmp/test

    [root@centos7 test]# touch a b c d e f g
    [root@centos7 test]# ll
    总用量 0
    -rw-r--r-- 1 root root 0 2月 20 13:41 a
    -rw-r--r-- 1 root root 0 2月 20 13:41 b
    -rw-r--r-- 1 root root 0 2月 20 13:41 c
    -rw-r--r-- 1 root root 0 2月 20 13:41 d
    -rw-r--r-- 1 root root 0 2月 20 13:41 e
    -rw-r--r-- 1 root root 0 2月 20 13:41 f
    -rw-r--r-- 1 root root 0 2月 20 13:41 g
    [root@centos7 test]# chmod 640 a
    [root@centos7 test]# chmod 666 b
    [root@centos7 test]# chmod 440 c
    [root@centos7 test]# chmod 775 d
    [root@centos7 test]# chmod 777 e

    [root@centos7 test]# ll
    总用量 0
    -rw-r----- 1 root root 0 2月 20 13:41 a
    -rw-rw-rw- 1 root root 0 2月 20 13:41 b
    -r--r----- 1 root root 0 2月 20 13:41 c
    -rwxrwxr-x 1 root root 0 2月 20 13:41 d
    -rwxrwxrwx 1 root root 0 2月 20 13:41 e
    -rw-r--r-- 1 root root 0 2月 20 13:41 f
    -rw-r--r-- 1 root root 0 2月 20 13:41 g

    # 精确匹配
    [root@centos7 test]# find /tmp/test/ -perm 644 -ls
    134361180 0 -rw-r--r-- 1 root root 0 2月 20 13:41 /tmp/test/f
    134361181 0 -rw-r--r-- 1 root root 0 2月 20 13:41 /tmp/test/g

    # 任何一类用户的任何一位权限符合条件即可
    [root@centos7 test]# find /tmp/test/ -perm /666 -ls
    134361154 0 drwxr-xr-x 2 root root 62 2月 20 13:41 /tmp/test/
    134361160 0 -rw-r----- 1 root root 0 2月 20 13:41 /tmp/test/a
    134361161 0 -rw-rw-rw- 1 root root 0 2月 20 13:41 /tmp/test/b
    134361166 0 -r--r----- 1 root root 0 2月 20 13:41 /tmp/test/c
    134361178 0 -rwxrwxr-x 1 root root 0 2月 20 13:41 /tmp/test/d
    134361179 0 -rwxrwxrwx 1 root root 0 2月 20 13:41 /tmp/test/e
    134361180 0 -rw-r--r-- 1 root root 0 2月 20 13:41 /tmp/test/f
    134361181 0 -rw-r--r-- 1 root root 0 2月 20 13:41 /tmp/test/g

    # 查找至少有一类用户有写权限
    [root@centos7 test]# find /tmp/test/ -perm /222 -ls
    134361154 0 drwxr-xr-x 2 root root 62 2月 20 13:41 /tmp/test/
    134361160 0 -rw-r----- 1 root root 0 2月 20 13:41 /tmp/test/a
    134361161 0 -rw-rw-rw- 1 root root 0 2月 20 13:41 /tmp/test/b
    134361178 0 -rwxrwxr-x 1 root root 0 2月 20 13:41 /tmp/test/d
    134361179 0 -rwxrwxrwx 1 root root 0 2月 20 13:41 /tmp/test/e
    134361180 0 -rw-r--r-- 1 root root 0 2月 20 13:41 /tmp/test/f
    134361181 0 -rw-r--r-- 1 root root 0 2月 20 13:41 /tmp/test/g

    # 查找其他用户有写权限的文件
    [root@centos7 test]# find /tmp/test/ -perm /002 -ls
    134361161 0 -rw-rw-rw- 1 root root 0 2月 20 13:41 /tmp/test/b
    134361179 0 -rwxrwxrwx 1 root root 0 2月 20 13:41 /tmp/test/e

    #==================================================================================
    # 查找3类用户同时拥有写权限的文件
    [root@centos7 test]# find /tmp/test/ -perm -222 -ls
    134361161 0 -rw-rw-rw- 1 root root 0 2月 20 13:41 /tmp/test/b
    134361179 0 -rwxrwxrwx 1 root root 0 2月 20 13:41 /tmp/test/e

    # 表示至少有一类用户没有写权限
    [root@centos7 test]# find /tmp/test/ -not -perm -222 -ls
    134361154 0 drwxr-xr-x 2 root root 62 2月 20 13:41 /tmp/test/
    134361160 0 -rw-r----- 1 root root 0 2月 20 13:41 /tmp/test/a
    134361166 0 -r--r----- 1 root root 0 2月 20 13:41 /tmp/test/c
    134361178 0 -rwxrwxr-x 1 root root 0 2月 20 13:41 /tmp/test/d
    134361180 0 -rw-r--r-- 1 root root 0 2月 20 13:41 /tmp/test/f
    134361181 0 -rw-r--r-- 1 root root 0 2月 20 13:41 /tmp/test/g

    [root@centos7 test]# find /tmp/test/ -perm -002 -ls
    134361161 0 -rw-rw-rw- 1 root root 0 2月 20 13:41 /tmp/test/b
    134361179 0 -rwxrwxrwx 1 root root 0 2月 20 13:41 /tmp/test/e

    # 表示属组和其他只要有写权限即可
    [root@centos7 test]# find /tmp/test/ -perm /022 -ls
    134361161 0 -rw-rw-rw- 1 root root 0 2月 20 13:41 /tmp/test/b
    134361178 0 -rwxrwxr-x 1 root root 0 2月 20 13:41 /tmp/test/d
    134361179 0 -rwxrwxrwx 1 root root 0 2月 20 13:41 /tmp/test/e

    # 表示属组和其他都必须有写权限才满足
    [root@centos7 test]# find /tmp/test/ -perm -022 -ls
    134361161 0 -rw-rw-rw- 1 root root 0 2月 20 13:41 /tmp/test/b
    134361179 0 -rwxrwxrwx 1 root root 0 2月 20 13:41 /tmp/test/e

      处理动作
      -print  输出至标准输出,默认的动作
      -ls    类似于对查找到的文件执行"ls -l"命令,输出文件的详细信息
      -delete 删除查找到的文件(不建议使用)
      -fls /PATH/TO/SOMEFILE 查找到的所有文件的长格式信息保存至指定文件中(相当于重定向)
      -ok COMMAND {} ;  对查找到的每个文件执行由COMMAND指定的命令(对于每个文件执行命令之前,都会交互式要求用户确认,-exec不用确认,直接操作)
      -exec COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令

      注意:
      find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
      有些命令不能接受过多参数(参数个数过多),此时命令执行可能会失败,下面方式可规避此问题:find | xargs COMMAND
      xargs对查找到的内容每次传递一个参数执行一次

    演示:
    [root@centos7 test]# chown arclinux.arclinux c d
    [root@centos7 test]# ll
    总用量 0
    -rw-r----- 1 root root 0 2月 20 13:41 a
    -rw-rw-rw- 1 root root 0 2月 20 13:41 b
    -r--r----- 1 arclinux arclinux 0 2月 20 13:41 c
    -rwxrwxr-x 1 arclinux arclinux 0 2月 20 13:41 d
    -rwxrwxrwx 1 root root 0 2月 20 13:41 e
    -rw-r--r-- 1 root root 0 2月 20 13:41 f
    -rw-r--r-- 1 root root 0 2月 20 13:41 g

    [root@centos7 test]# userdel -r arclinux
    [root@centos7 test]# ll
    总用量 0
    -rw-r----- 1 root root 0 2月 20 13:41 a
    -rw-rw-rw- 1 root root 0 2月 20 13:41 b
    -r--r----- 1 1002 1002 0 2月 20 13:41 c
    -rwxrwxr-x 1 1002 1002 0 2月 20 13:41 d
    -rwxrwxrwx 1 root root 0 2月 20 13:41 e
    -rw-r--r-- 1 root root 0 2月 20 13:41 f
    -rw-r--r-- 1 root root 0 2月 20 13:41 g
    [root@centos7 test]# find ./ -nouser
    ./c
    ./d
    [root@centos7 test]# find ./ -nouser -a -nogroup -ls
    134361166 0 -r--r----- 1 1002 1002 0 2月 20 13:41 ./c
    134361178 0 -rwxrwxr-x 1 1002 1002 0 2月 20 13:41 ./d


    [root@centos7 test]# find ./ -nouser -a -nogroup -ok chown root.root {} ; # 注意空格
    < chown ... ./c > ? y
    < chown ... ./d > ? y
    [root@centos7 test]# ll
    总用量 0
    -rw-r----- 1 root root 0 2月 20 13:41 a
    -rw-rw-rw- 1 root root 0 2月 20 13:41 b
    -r--r----- 1 root root 0 2月 20 13:41 c
    -rwxrwxr-x 1 root root 0 2月 20 13:41 d
    -rwxrwxrwx 1 root root 0 2月 20 13:41 e
    -rw-r--r-- 1 root root 0 2月 20 13:41 f
    -rw-r--r-- 1 root root 0 2月 20 13:41 g

    -exec COMMAND {} ;
    [root@centos7 test]# find ./ -perm /002
    ./b
    ./e

    # {}: 用于引用查找到的文件名称自身
    [root@centos7 test]# find ./ -perm /002 -exec mv {} {}.danger ;
    [root@centos7 test]# ll
    总用量 0
    -rw-r----- 1 root root 0 2月 20 13:41 a
    -rw-rw-rw- 1 root root 0 2月 20 13:41 b.danger
    -r--r----- 1 root root 0 2月 20 13:41 c
    -rwxrwxr-x 1 root root 0 2月 20 13:41 d
    -rwxrwxrwx 1 root root 0 2月 20 13:41 e.danger
    -rw-r--r-- 1 root root 0 2月 20 13:41 f
    -rw-r--r-- 1 root root 0 2月 20 13:41 g

    练习:
    # 备份配置文件,添加.org这个扩展名,一定要注意格式,后面加斜杠和分号
    find -name “*.conf” -exec cp {} {}.org ;
    # 提示删除存在时间超过3天以上的属主为joe的临时文件
    find /tmp -ctime +3 -user joe -ok rm {} ;
    # 在你的主目录中寻找可被其它用户写入的文件,然后去掉写权限
    find ~ -perm /002 -exec chmod o-w {} ;
    # 找到/data 目录下所有文件名以.sh后缀,且权限为644的普通文件,然后把权限改为755
    find /data –type f -perm 644 -name “*.sh” -exec chmod 755 {} ;

    1、查找/var目录下属主为root,且属组为mail的所有文件或目录;
    # find /var -user root -group mail
    2、查找/usr目录下不属于root、bin或hadoop的所有文件或目录;
    # find /usr -not -user root -a -not -user bin -a -not -user hadoop
    # find /usr -not ( -user root -o -user bin -o -user hadoop )
    3、查找/etc目录下最近一周内其内容修改过,同时属主不为root,也不是hadoop的文件或目录;
    # find /etc -mtime -7 -a -not -user root -a -not -user hadoop
    # find /etc/ -mtime -7 -a -not ( -user root -o -user hadoop )    括号中首尾有空格
    4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件或目录;
    # find / -nouser -a -nogroup -a -atime -7
    5、查找/etc目录下大于1M且类型为普通文件的所有文件;
    # find /etc -size +1M -type f
    6、查找/etc目录下所有用户都没有写权限的文件;
    # find /etc -not -perm /222
    7、查找/etc目录下至少有一类用户没有执行权限的文件;
    # find /etc -not -perm -111
    8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件;
    # find /etc/init.d -perm -113

     

  • 相关阅读:
    文本字符集转换
    添加HP消息队列
    fedora19/opensuse13.1 配置svn client
    前端html---介绍前端,标签,列表
    数据分析1
    项目流程
    git 使用
    mongo基础
    linux上面pycharm汉化
    pythonNet 09协程
  • 原文地址:https://www.cnblogs.com/Link-Luck/p/9855638.html
Copyright © 2011-2022 走看看