文件查找详解

1、简介
node

    在文件系统上经常须要根据文件的各类属性去查找符合条件的文件,文件查找工具备两个,locate和find。
数据库

2、分类
centos

    文件查找分为:
bash

        实时查找:遍历全部文件进行条件匹配(find);
ide

        非实时查找:又叫数据库查找,根据索引查找(locate);
工具

3、locateui

    1.查询系统上预建的文件索引数据库:/var/lib/mlocate/mlocate.db;
centos7

    2.依赖于事先构建的索引:
spa

        索引的构建是在系统空闲时由系统自动进行(周期性任务);管理员手动更新数据库使用updatedb命令;
3d

    3.索引构建过程须要遍历整个根文件系统,极消耗资源;

    4.工做特色:

        查找速度快、非精确查找、模糊查找、搜索的是文件全路径,不单单是文件名、可能只搜索用户具有读取和执行权限的目录;

    5.格式:locate KEYWORD

                搜索名称或路径带有“issue”的文件

                wKiom1mRraCAg_ltAACJMcPMkN0970.png-wh_50


    OPTION:

        -i:忽略大小写的搜索;

                wKioL1mRrmmyVpQtAACcJirrPgE719.png-wh_50


        -n X:只列举前X个匹配项目;

                wKiom1mRrpHCoRfWAAArWY0lUl8536.png-wh_50


            eg1:使用Regex来搜索以“.sh”结尾的文件

                wKiom1mRr-PBcXjtAABbelyP4vg450.png-wh_50

4、find

    1.find属于实时查找工具,经过遍历指定路径下的文件系统完成文件查找;

    2.工做特色:

        精确查找、查找速度略慢、可能只搜索用户具有读取和执行权限的目录;

    3.语法:find [OPTION]... [查找路径] [查找条件] [处理动做]

        查找路径:制定具体目标路径,默认为当前目录;

        查找条件:指定的查找标准,能够文件名、大小、类型、权限等标准进行;默认为找出指定路径下的全部文件;

        处理动做:对符合条件的文件作操做,默认输出至屏幕;

    4.查找条件

        根据文件名和inode查找

            -name "文件名称":支持使用glob *, ?, [], [^]


                搜索名为root的全部文件;

                wKioL1mRtFniaK-KAABhAmaJ044291.png-wh_50


                wKioL1mRtKPT8KVeAABp1wptVPY050.png-wh_50


            -iname "文件名称":不区分字母大小写

                wKiom1mRtRChTpMaAABrrQjRxQ0632.png-wh_50


            -inum n:按inode号查找

                wKiom1mRtcGhW7DdAAAcMyXUfZI638.png-wh_50


            -samefile name:相同inode号的文件

                wKioL1mRtmfxo9zPAACBfH9rqgM474.png-wh_50


            -links n:连接数为n的文件

                wKiom1mRtwizZTXrAACFFz2peqo613.png-wh_50


            -regex "PATTERN":以PATTERN匹配整个文件路径字 符串,而不单单是文件名称

                wKiom1mRt5qx1iOPAAD7RYPKx_Y171.png-wh_50


    根据属主、属组查找:

        -user USERNAME:查找属主为指定用户(UID)的文件

                wKiom1mRu8eyFQzrAAB3FWok25A870.png-wh_50


        -group GRPNAME: 查找属组为指定组(GID)的文件

                wKiom1mRvB-xlzF7AACBGEVMT3I228.png-wh_50


        -uid UserID:查找属主为指定的UID号的文件

                wKiom1mRvJTRYSAvAAB5OKvqyYE828.png-wh_50


        -gid GroupID:查找属组为指定的GID号的文件

                wKiom1mRvMDxx0nSAACDsVx1uyQ473.png-wh_50

        -nouser:查找没有属主的文件     

        -nogroup:查找没有属组的文件


    根据文件类型查找:

        -type TYPE:

            f: 普通文件

                wKiom1mRv4GwxdfPAABIugZN__I063.png-wh_50

            d: 目录文件

            l: 符号连接文件

                wKiom1mRv8qDKG3sAAByTdF06c4747.png-wh_50

            s:套接字文件

            b: 块设备文件

            c: 字符设备文件

            p: 管道文件


    根据组合条件查找:       

        与:-a

        或:-o

        非:-not,!,条件取反

    德·摩根定律:

        非(P 且 Q) = (非 P) 或 (非 Q)

        非(P 或 Q) = (非 P) 且 (非 Q)

        -not(A -a B)=-not A -o -not B:不是A或者不是B;

        -not(A -o B)=-not A -a -not B:不是A也不是B;

                

            eg1:查找属主是tom且不是普通文件的文件;        

                wKiom1mRwmbi9vqjAABuOHt_n1c540.png-wh_50


            eg2:查找属主是tom和bash的全部文件;

                wKiom1mRw4_xcziSAAC3jTwV-nY615.png-wh_50


            eg3:查找属主是tom且属组不是tom的文件

                wKioL1mRxjChkUMfAABpPpFtYXs614.png-wh_50


            eg4:查找属主是tom或者属主是bash的文件

                wKiom1mRxx6AnAfFAACz1zUb_48968.png-wh_50


            eg5:查找属主不是tom也不是bash的文件

                wKioL1mRx_Kh1xq9AAB_cJdaeEI189.png-wh_50


            eg6:查找数值是bash或者属主UID号为4010的文件

                wKioL1mRyGrg0GEYAAC2lSSEJ_U160.png-wh_50


             eg7:找出/tmp目录下,属主不是root,且文件名不是fstab的文件

                wKioL1mRyiPTYwfJAABfwSs6oZo450.png-wh_50


            eg8:排除目录:find /etc -path ‘/etc/sane.d’ -a -prune -o-name *.conf

                wKioL1mRytbBsvS8AADQykmgRDo901.png-wh_50


    根据文件大小来查找:

        -size [+|-]#UNIT

            经常使用单位:k, M, G

        #UNIT: (#-1, #],如:10k

        -#UNIT:[0,#-1], 如:-10k

        +#UNIT:(#,∞),   如:+10k

                wKioL1mRzvWjd7eRAACQG6X-1oU120.png-wh_50


    根据时间戳查找

        以“天”为单位;

            -atime [+|-]#, 

            #: [#,#+1)

            +#: [#+1,∞]

            -#:[0,#)

            -mtime;

            -ctime;

        以“分钟”为单位:

            -amin;

            -mmin;

            -cmin;


    根据权限查找:

        -perm [/|-]MODE


            MODE: 精确权限匹配;

                wKiom1mR3PGjB57SAABjg2ER3FQ897.png-wh_50


            /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配便可,或关系,+ 从centos7开始淘汰;    

                表示任何一类用户的权限中包含写权限就OK;

                wKioL1mR3X-A38gGAABMEZxApy0512.png-wh_50


            -MODE:每一类对象都必须同时拥有指定权限,与关系;

                wKiom1mR3sigdm0EAAB8ozQNJ8I408.png-wh_50


            0:表示不关注;

            find -perm 755 会匹配权限模式刚好是755的文件;

            find -perm /222,只要当任意人有写权限时,就会匹配;

            find -perm -222,只有当每一个人都有写权限时,才会匹配;

            find -perm -002,只有当其它人(other)有写权限时,才会匹配;


    处理动做:

        -print:默认的处理动做,显示至屏幕; 

        -ls:相似于对查找到的文件执行“ls-l”命令;

        -delete:删除查找到的文件; 

        -fls file:查找到的全部文件的长格式信息保存至指定文件中;

                wKioL1mSVA-xU-1QAACGews3vVk443.png-wh_50


        -ok COMMAND {} \; 对查找到的每一个文件执行由COMMAND指定的命令;

                对于每一个文件执行命令以前,都会交互式要求用户确认

                wKioL1mSVzKDn38qAAB49ENqqPc145.png-wh_50


        -exec COMMAND {} \; 对查找到的每一个文件执行由 COMMAND指定的命令;

                wKiom1mSV3Ox6vP0AACGNGw6JEo279.png-wh_50

                

        {}: 用于引用查找到的文件名称自身;

        find传递查找到的文件至后面指定的命令时,查找到全部符合 条件的文件一次性传递给后面的命令; 

        有些命令不能接受过多参数,此时命令执行可能会失败,下 面方式可规避此问题 find |xargs COMMAND;           

         示例:
              find -name  “*.conf”  -exec cp {}  {}.org  \;
              ##备份配置文件,添加.orig这个扩展名
                
              find /tmp -ctime +3 -user joe -ok rm {} \;
              ##提示删除存在时间超过3天以上的joe的临时文件 
                
              find ~ -perm -002 -exec chmod o-w {} \;
              ##在你的主目录中寻找可被其它用户写入的文件 
                
              find /data –type  f -perm 644 -name *.sh – exec chmod 755 {} \; 
              ##查找.sh结尾权限为644的普通文件,把644文件权限改成755
                
              find /home –type d -ls
              ##查找/home目录下的目录文件并以长格式显示;
相关文章
相关标签/搜索