• Linux之find文件(目录)查找


      1 文件查找:
      2     在文件系统上查找符合条件的文件;
      3 
      4     文件查找:locate, find
      5         非实时查找(数据库查找):locate
      6         实时查找:find
      7 
      8     locate:
      9         依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新数据库(updatedb);
     10 
     11         索引构建过程需要遍历整个根文件系统,极消耗资源;
     12 
     13         工作特点:
     14             查找速度快;
     15             模糊查找;
     16             非实时查找;
     17 
     18         locate KEYWORD
     19 
     20     find:
     21         实时查找工具,通过遍历指定路径下的文件系统完成文件查找;
     22 
     23         工作特点:
     24             查找速度略慢;
     25             精确查找;
     26             实时查找;
     27 
     28         语法:
     29             find [OPTION]... [查找路径] [查找条件] [处理动作]
     30                 查找路径:指定具体目标路径;默认为当前目录;
     31                 查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件;
     32                 处理动作:对符合条件的文件做什么操作;默认输出至屏幕;
     33 
     34                 查找条件:
     35                     根据文件名查找:
     36                         -name "文件名称":支持使用glob
     37                             *, ?, [], [^]
     38                         -iname "文件名称":不区分字母大小写
     39 
     40                         -regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
     41 
     42                     根据属主、属组查找:
     43                         -user USERNAME:查找属主为指定用户的文件;
     44                         group GRPNAME: 查找属组为指定组的文件;
     45 
     46                         -uid UserID:查找属主为指定的UID号的文件;
     47                         -gid GroupID:查找属组为指定的GID号的文件;
     48 
     49                         -nouser:查找没有属主的文件;
     50                         -nogroup:查找没有属组的文件;
     51 
     52                     根据文件类型查找:
     53                         -type TYPE:
     54                             f: 普通文件
     55                             d: 目录文件
     56                             l: 符号链接文件
     57                             s:套接字文件
     58                             b: 块设备文件
     59                             c: 字符设备文件
     60                             p: 管道文件
     61 
     62                     组合条件:
     63                         与:-a
     64                         或:-o
     65                         非:-not, !
     66 
     67                         !A -a !B = !(A -o B)
     68                         !A -o !B = !(A -a B)
     69 
     70                         找出/tmp目录下,属主不是root,且文件名不是fstab的文件;
     71                             find /tmp ( -not -user root -a -not -name 'fstab' ) -ls
     72                             find /tmp -not ( -user root -o -name 'fstab' ) -ls
     73 
     74                     根据文件大小来查找:
     75                         -size [+|-]#UNIT
     76                             常用单位:k, M, G
     77 
     78                             #UNIT: (#-1, #] 3k ---- (2,3]
     79                             -#UNIT:[0,#-1] 3k ----  [0,2]
     80                             +#UNIT:(#,oo)  3k ====  (3,+oo)
     81 
     82                     根据时间戳:
     83                         以“天”为单位;
     84                             -atime [+|-]#,  
     85                                 #: [#,#+1)  3   [3,4)
     86                                 +#: [#+1,oo]    [4,oo)    
     87                                 -#: [0,#)        [0.3)
     88                             -mtime
     89                             -ctime
     90 
     91                         以“分钟”为单位:
     92                             -amin
     93                             -mmin
     94                             -cmin
     95 
     96                     根据权限查找:
     97                         -perm [+|-]MODE
     98                             MODE: 精确权限匹配
     99                             +MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可;
    100                             -MODE:每一类对象都必须同时拥有为其指定的权限标准;
    101 
    102                 处理动作:
    103                     -print:默认的处理动作,显示至屏幕;
    104                     -ls:类似于对查找到的文件执行“ls -l”命令;
    105                     -delete:删除查找到的文件;
    106                     -fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中;
    107                     -ok COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令;
    108                         对于每个文件执行命令之前,都会交互式要求用户确认;
    109                     -exec COMMAND {}; 对查找到的每个文件执行由COMMAND指定的命令; 
    110                         {}: 用于引用查找到的文件名称自身;
    111 
    112                     注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;
    113                     有些命令不能接受过多参数,此时命令执行可能会失败;另一种方式可规避此问题:
    114                         find | xargs COMMAND 
    115 
    116         练习:
    117             1、查找/var目录下属主为root,且属组为mail的所有文件或目录;
    118                 # find /var -user root -group mail
    119 
    120             2、查找/usr目录下不属于root、bin或hadoop的所有文件或目录;
    121                 # find /usr -not -user root -a -not -user bin -a -not -user hadoop
    122                 # find /usr -not ( -user root -o -user bin -o -user hadoop )
    123 
    124             3、查找/etc目录下最周一周内其内容修改过,同时属主不为root,也不是hadoop的文件或目录;
    125                 # find /etc -mtime -7 -a -not -user root -a -not -user hadoop
    126                 # find /etc/ -mtime -7 -a -not ( -user root -o -user hadoop )
    127 
    128             4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件或目录;
    129                 # find / -nouser -a -nogroup -a -atime -7
    130 
    131             5、查找/etc目录下大于1M且类型为普通文件的所有文件;
    132                 # find /etc -size +1M -type f
    133 
    134 
    135             6、查找/etc目录下所有用户都没有写权限的文件;
    136             # find /etc -not -perm /222
    137 
    138             7、查找/etc目录下至少有一类用户没有执行权限的文件;
    139             # find /etc -not -perm -111
    140 
    141             8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件;
    142             # find /etc/init.d -perm -113

    文件查找:在文件系统上查找符合条件的文件;
    文件查找:locate, find非实时查找(数据库查找):locate实时查找:find
    locate:依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新数据库(updatedb);
    索引构建过程需要遍历整个根文件系统,极消耗资源;
    工作特点:查找速度快;模糊查找;非实时查找;
    locate KEYWORD
    find:实时查找工具,通过遍历指定路径下的文件系统完成文件查找;
    工作特点:查找速度略慢;精确查找;实时查找;
    语法:find [OPTION]... [查找路径] [查找条件] [处理动作]查找路径:指定具体目标路径;默认为当前目录;查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件;处理动作:对符合条件的文件做什么操作;默认输出至屏幕;
    查找条件:根据文件名查找:-name "文件名称":支持使用glob*, ?, [], [^]-iname "文件名称":不区分字母大小写
    -regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
    根据属主、属组查找:-user USERNAME:查找属主为指定用户的文件;group GRPNAME: 查找属组为指定组的文件;
    -uid UserID:查找属主为指定的UID号的文件;-gid GroupID:查找属组为指定的GID号的文件;
    -nouser:查找没有属主的文件;-nogroup:查找没有属组的文件;
    根据文件类型查找:-type TYPE:f: 普通文件d: 目录文件l: 符号链接文件s:套接字文件b: 块设备文件c: 字符设备文件p: 管道文件
    组合条件:与:-a或:-o非:-not, !
    !A -a !B = !(A -o B)!A -o !B = !(A -a B)
    找出/tmp目录下,属主不是root,且文件名不是fstab的文件;find /tmp ( -not -user root -a -not -name 'fstab' ) -lsfind /tmp -not ( -user root -o -name 'fstab' ) -ls
    根据文件大小来查找:-size [+|-]#UNIT常用单位:k, M, G
    #UNIT: (#-1, #] 3k ---- (2,3]-#UNIT:[0,#-1] 3k ----  [0,2]+#UNIT:(#,oo)  3k ====  (3,+oo)
    根据时间戳:以“天”为单位;-atime [+|-]#,  #: [#,#+1)  3   [3,4)+#: [#+1,oo][4,oo)-#: [0,#)[0.3)-mtime-ctime
    以“分钟”为单位:-amin-mmin-cmin
    根据权限查找:-perm [+|-]MODEMODE: 精确权限匹配+MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可;-MODE:每一类对象都必须同时拥有为其指定的权限标准;
    处理动作:-print:默认的处理动作,显示至屏幕;-ls:类似于对查找到的文件执行“ls -l”命令;-delete:删除查找到的文件;-fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中;-ok COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令;对于每个文件执行命令之前,都会交互式要求用户确认;-exec COMMAND {}; 对查找到的每个文件执行由COMMAND指定的命令; {}: 用于引用查找到的文件名称自身;
    注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;有些命令不能接受过多参数,此时命令执行可能会失败;另一种方式可规避此问题:find | xargs COMMAND 
    练习: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

    为什么要坚持,想一想当初!
  • 相关阅读:
    python 协程
    python 打印乘法表
    python 线程池
    python 队列
    开发react 应用最好用的脚手架 create-react-app
    React面试题
    修改了背景透明度
    低门槛彻底理解JavaScript中的深拷贝和浅拷贝
    Web Worker 使用教程
    Vue2 实现时空穿梭框功能模块
  • 原文地址:https://www.cnblogs.com/JerryZao/p/9438375.html
Copyright © 2020-2023  润新知