您的位置:首页 > 运维架构 > Linux

linux 操作系统find命令操作总结

2018-02-08 13:49 246 查看
      find 在linux系统中功能非常强大,根据各种给出的条件在系统搜索所需内容。

      语法为: find 路径 -命令参数 [输出形式]  
                   这里需要注意:路径紧跟在命令之后
    以下介绍具体用法:         1, 查找按文件名:-name
                   find  /etc  -name  passwd   :   在etc目录下查找名为:passwd的目录,软链接,普通文件。。。。。
                                                                 默认find将查找到的文件显示出来。和-printf作用相同
                   find  /etc  -name "[0-9]*"  :在etc目录下查找文件名一数字开头的文件
                   find /etc ! -name passwd: 在etc目录下查找名不为passwd的文件。
          2,查找时指定查找的目录层级:-maxdepth
                  find  /etc  -maxdepth 3  -name "[0-9]*"  :在etc目录及以下3层目录中查找文件名以数字开头的文件。
          3,按修改时间进行查找:-mtime -mmin -atime -amin -ctime -cmin
                  find / -mtime +500 :查找系统中修改时间为500天以前的文件
                  find / -mtime +500 :查找系统中修改时间为500天当天修改的文件

                  find / -mtime -500 : 查找系统中修改时间为500天以内修改的文件
                  find / -mmin -5 : 查找系统中修改时间为5分钟以内修改的文件
                  -atime -amin -ctime -cmin 与-mtime -mmin同理
         4, 按文件权限来查找:-perm
                -perm 后面跟的模式分为3种:mode 、-mode、+mode
            mode:完全匹配,如mode为755转换为二进制位111 101 101,要求查找出来的文件权限的
                  二进制位必须一一对齐即为755.
            find /etc -perm 755 :在系统中查找文件权限为755的文件。
          


                   -mode:表示mode转换成二进制中1的文件权限必须匹配,如:644 二进制位110 100 100
                                要求查找的文件权限二进制必须为11x,1xx,1xx,其中x位既可以为0,也可以为1.
                               也就是查找的文件权限必须包含-mode的权限二进制的中1的位置。如:110 110 110
                               、111 110 110、111 111 111、均匹配,101 100 100 就不匹配因为前三位属主权限
                              w的权限不匹配。
               

 
                  +mode:要求mode给出的权限二进制中含有1的位,任意一个匹配即可。-mode要求给出的
                                权限二进制中含有1的位都必须匹配,如:644转换为二进制位110 110 100 
                                即、100 100 100、010 100 100、110 010 100、110 100 100 均匹配。
               截图待定
       5,按属主-user username,属组查找-group groupname,无属主-nouser,无属组-nogroup
                find /var -type f -user jjj     :查找/var中属主为jjj的文件
            


                find /home -type -group uuu01 :查找/home中属组为uuu01的文件
           


               find /home -type -user jjj -group uuu01 :查找/home中属主为:jjj 属组为:uuu01的文件
           


              find / -type f -nouser:查找系统无属主的文件
          


             由图可见属主名称为包含在/etc/passwd中用UID来显示
              find / -type f -nogroup :查找无属组的文件
              find / -type f -nouser -o -nogrop :查找无属主文件或无属组的文件。
       6,按文件大小查找 :-size
                 -size 后面接三种模式的文件大小:
                               n:等于n的文件
                             +n :大于n的文件
                              -n :小于n的文件
                             另外:n如果指定单位(K M G)则按指定单位查找,若未指定单位,则默认单位为块
                                      1块为512字节即 2048为1M  1024*2*512byte=1024*1KB=1M
                                      也指定单位为c即为字符 1024c=K  10240c=10K
                    find / -type f -size +1G :查找系统中大于1GB的文件
           


                   find / -type f -size 4096 :查找系统中大小为2M的文件:4096*512byte=2M
           


        7,按文件类型查找:-type d/f/b/c/p/l/s
        8,参照文件新旧查找:-newer
                  find / -type f -newer ./i -exec ls -l {} \;  :在系统查找比i文件更新的文件                
            


                 -newer file1 ! file2 :查找更改时间比file1新但比file2旧的文件
         9, -depth:查找文件时先查找当前目录,在查找其他目录。
         10,-mount:在查找文件时不跨越文件系统mount点。
         11, -follow:遇到符号链接文件时,跟踪至链接所指向的文件。
         12, -cpio:对匹配的文件使用cpio命令,将这些文件备份至磁带设备中。
         13, -fstype:查找位于某一文件系统中的文件,文件系统类型参考/etc/fstab
         14,两个条件同时满足:-a    两个条件满足任意一个:-o
             


            15,对查找后的内容进行操作:-exec -ok
                   -exec和-ok不同之处在于:-ok每次进行操作之前会询问
            16,查找排除目录:-prune (如果同时制定了-depth,那么-prune将忽略)                 在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能。假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0、dir1和dir2 ...等目录及dir00、dir01...dir10、dir11...等子目录。1. 在当前目录下查找所有txt后缀文件    find ./ -name *.txt2.在当前目录下的dir0目录及子目录下查找txt后缀文件    find ./ -path './dir0*' -name *.txt3.在当前目录下的dir0目录下的子目录dir00及其子目录下查找txt后缀文件    find ./ -path '*dir00*' -name *.txt4.在除dir0及子目录以外的目录下查找txt后缀文件    find ./ -path './dir0*' -a -prune -o -name *.txt -print说明:-a 应该是and的缩写,意思是逻辑运算符‘或’(&&); -o应该是or的缩写,意思是逻辑运算符‘与’(||), -not 表示非.命令行的意思是:如果目录dir0存在(即-a左边为真),则求-prune的值,-prune 返回真,‘与’逻辑表达式为真(即-path './dir0*' -a -prune 为真),find命令将在除这个目录以外的目录下查找txt后缀文件并打印出来;如果目录dir0不存在(即-a左边为假),则不求值-prune ,‘与’逻辑表达式为假,则在当前目录下查找所有txt后缀文件。5.在除dir0、dir1及子目录以外的目录下查找txt后缀文件    find ./ /( -path './dir0*' -o -path './dir1*' /) -a -prune -o -name *.txt -print注意:圆括号()表示表达式的结合。即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。由于命令行不能直接使用圆括号,所以需要用反斜杠'/'进行转意(即'/'转意字符使命令行认识圆括号)。同时注意'/(','/)'两边都需空格。6.在dir0、dir1及子目录下查找txt后缀文件    find ./ /( -path './dir0*' -o -path './dir1*' /) -a -name *.txt -print +1. 在所有以名为dir_general的目录下查找txt后缀文件find ./ -path '*/dir_general/*' -name *.txt -print
       

                                                              
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  find