Linux文件查找命令find和压缩解压缩

概述

    Linux系统上一切皆文件,那么随着时间的推移和管理的服务器增加,在众多的文件中,如何找到我们需要的文件,这就需要用到文件查找命令了。本章就分享下关于文件查找命令的一些内容和压缩解压缩的相关内容。

    具体分为一下几个部分:

        1、文件查找命令

        2、压缩解压缩

        3、find实际效果演示

第一章    文件查找命令

    1、文家查找locate命令

        locate命令:

            查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db依赖于事先构建的索引;

            索引的构建是在系统较为空闲时自动进行(周期性任务);管理员手动更新数据库(updatedb);

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

        

        工作特点:

            查找速度快;

            模糊查找;

            非实时查找

            搜索的是文件的全路径,不仅仅是文件名

            可能只搜索用户具备读取和执行权限的目录

        

        更新locate数据库:updatedb  (生产环境不能随便执行,特别消耗资源)

        

        locate语法:(搜索关键字支持标准正则表达式)

        语法:locate [OPTION] KEYWORD

            选项

                -i 执行区分大小写的搜索

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

            例如:

                 locate foo

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

                 locate -r ‘\.foo$’

                 使用Regex来搜索以“ .foo”结尾的文件

        blob.png              

  

    2、文件查找命令find

        find命令:实时查找工具,通过遍历指定路径完成文件查找;(支持文件名通配符)

        工作特点:

            查找速度略慢

            精确查找

            实时查找

            可能只搜索用户具备读取和执行权限的目录

    

        语法格式:

            find [OPTION]… [查找路径] [查找条件] [处理动作]

        查找路径:指定具体目标路径;默认为当前目录,要注意用户要对目录具有rx权限,默认是递归去搜索

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

             用 -path ‘/PATH’ -a -prune -o 然后接上一个搜索条件,去排除搜索的目录,表示搜索的时候不搜索该目录

        查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件

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

            

        查找条件:

            根据文件名和inode查找:

                 -name "文件名称":支持使用glob

                 *, ?, [], [^]

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

                 -inum 数字 按inode号查找

                 -samefile FILENAME 相同inode号的文件

                 -links 数字 链接数为n的文件

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

        blob.png

        blob.png

        blob.png

        blob.png

    

 

            根据属主、属组查找:

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

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

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

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

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

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

        blob.png

        blob.png

            根据文件类型查找:

                 -type TYPE:

                 f: 普通文件

                 d: 目录文件

                 l: 符号链接文件

                 s:套接字文件

                 b: 块设备文件

                 c: 字符设备文件

                 p: 管道文件

        blob.png                

            根据文件大小来查找:

                 -size [+|-]#UNIT   常用单位: k, M, G

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

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

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

            blob.png

            根据时间戳:以“天”为单位;

                 -atime [+|-]#,

                     #: [#,#+1)

                     +#: [#+1,∞] 

                     -#: [0,#)

                 -mtime

                 -ctime

                 以“分钟”为单位:

                 -amin

                 -mmin

                 -cmin

        

            根据权限查找:

                 -perm [/|-]MODE

                     MODE: 精确权限匹配

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

                     -MODE:每一类对象都必须同时拥有指定权限,与关系0表示不关注

                 例如:

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

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

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

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

        blob.png

            组合条件:

                 与: -a  不指定默认就是-a的关系

                 或: -o

                 非: -not, !

                

                 德·摩根定律:

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

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

                 !A -a !B = !(A -o B)

                 !A -o !B = !(A -a B)

                 条件加括号时,括号要转义 \( \)

        blob.png

        blob.png

        搜索时排除目录

            find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print

            用 -path ‘/PATH’ -a -prune -o 然后接上一个搜索条件,去排除搜索的目录,表示搜索的时候不搜索该目录

        blob.png

        blob.png

        处理动作:

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

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

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

             -fls /PATH/TO/FILE:查找到的所有文件的长格式信息保存至指定文件中

             -ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;对于每个文件执行命令之前,都会交互式要求用户确认

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

             {}: 用于引用查找到的文件名称自身find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

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

         find | xargs COMMAND

        

第二章    压缩与解压缩

    1、压缩解压缩:

        <1>gzip、gunzip、zcat

         gzip(默认压缩、解压时会删除源文件)

         语法:gzip [OPTION]… FILE…

         选项:

             -d  解压缩,相当于gunzip

             -#  压缩时,指定压缩比,默认为6 ,最大9,数字越大压缩比越大

             -c  压缩时可以将压缩过后的内容输出到标准输出。可以利用重定向输出到指定文件,实现压缩时保留原文件:

         gzip -c /test/11.xx > /nwc/11.gz

        

         zcat可以在不解压的情况下查看.gz压缩的文件

        

        <2>bzip2、bunzip2、bzcat

         bzip2(默认压缩、解压缩时会删除源文件)

         语法:bzip [OPTION]… FILE…

         选项:

             -d  解压缩,相当于bunzip2

             -#  压缩时,指定压缩比,默认为6 ,最大9,数字越大压缩比越大

             -k  保留源文件,使用时无需输出重定向即可保留源文件

        

         bzcat 可以在不接呀的情况下直接查看.bz2的压缩文件的内容

        <3>xz、unxz、xzcat

         另外一组算法lzma、unlzma、lzcat

         语法:xz [OPTION]… FILE…

         选项:

             -d  解压缩,相当于unxz

             -#  指定压缩比,默认6,最大9,数字越大压缩比越大

             -k  保留源文件,使用时无需输出重定向即可保留源文件

        

         xzcat  可以不解压的情况下,直接查看.xz压缩文件的内容

        注意:以上三款压缩工具,都只能压缩文件,无法压缩目录,要压缩目录,就需要用到tar了

    blob.png

    2、归档:tar、cpio,默认不会删除源文件

        <1>tar

         语法:tar [OPTION]… FILE…

         选项:(选项中-可以省略)

              -c  创建归档,一般与-f一起用,f必须要在选项最后一位,跟上归档后的文件名

                 例如:tar -cf /tmp/myetc.tar  /etc/

                      表示对/etc/目录做归档,归档后的文件是/tmp/myetc.tar

              -x  展开归档,与f选项一起用,f必须要在最后一位,指明需要展开的文件,这时,展开的文件放在当前目录下,如果要指定展开后文件的存放位置,要用-C选项

                 例如:tar -xf /tmp/myetc.tar 表示展开这个文件到当前目录

                      tar -xf /tmp/myetc.tar -C /nwc/myetc/展开这个文件到/nwc/myetc/目录

              -t  不展开归档的情况下,查看归档文件的文件列表,与-f一起使用,指明要查看的归档文件

                 例如:tar -tf /tmp/myetc.tar

              -f /PATH/TO/SOMEFILE.tar  指定归档后的文件名,展开时被展开的文件名

              -C /PATH/TO/SOMEWHERE  展开时,指明展开后文件存放的路径

    3、归档并压缩:tar

         -z 调用gzip工具压缩

         -j 调用bzip2工具压缩

         例如:(gzip工具,-z选项)

              tar -zcf /tmp/myetc.tar.gz  /etc/

              表示将/etc/目录利用gzip压缩,归档至/tmp/目录下,叫做myetc.tar.gz文件

              tar -zxf /tmp/myetc.tar.gz  解压并展开该文件到当前目录,可用-C指定展开后文件存放的目录(展开时可以不用指明-z,系统会自动识别压缩方式,自动进行解压缩)

              tar -xf /tmp/myetc.tar.gz -C /nwc/

        

         例如:(bzip2工具,-j选项)

              tar -jcf /tmp/myetc.tar.bz2  /etc/

              表示将/etc/目录利用bzip压缩,归档至/tmp/目录下,叫做myetc.tar.bz2文件

              tar -jxf /tmp/myetc.tar.bz2  解压并展开该文件到当前目录,可用-C指定展开后文件存放的目录(展开时可以不用指明-j,系统会自动识别压缩方式,自动进行解压缩)

              tar -xf /tmp/myetc.tar.bz2 -C /nwc/

         例如:(xz工具,-J选项)

              tar -Jcf /tmp/myetc.tar.xz  /etc/

              表示将/etc/目录利用xz压缩,归档至/tmp/目录下,叫做myetc.tar.xz文件

             tar -Jxf /tmp/myetc.tar.xz  解压并展开该文件到当前目录,可用-C指定展开后文件存放的目录(展开时可以不用指明-J,系统会自动识别压缩方式,自动进行解压缩)

              tar -xf /tmp/myetc.tar.xz -C /nwc/

    4、zip/unzip:(能压缩并归档文件和目录,windows、linux、unix都支持)

         例如:

         zip /tmp/myetc.zip  /etc/  表示对/etc目录归档压缩,压缩后的名字是/tmp目录下的myetc.zip

         unzip /tmp/myetc.zip  解压该文件

    5、cpio复制 从或到文件

        cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“ .cpio”或者“ .tar”结尾的文件。

        cpio [选项] > 文件名或者设备名

        cpio [选项] < 文件名或者设备名

        选项

            -o 将文件拷贝打包成文件或者将文件输出到设备上

            -i 解包,将打包文件解压或将设备上的备份还原到系统

            -t 预览,查看文件内容或者输出到设备上的文件内容

            -v 显示打包过程中的文件名称。

            -d 解包生成目录,在cpio还原时,自动的建立目录

            -c 一种较新的存储方式

        实例

         将etc目录备份:

            find ./etc -print |cpio -ov >etc.cpio

         内容预览

            cpio –tv < etc.cpio

         要解包文件

            cpio –iv <etc.cpio

            cpio –idv < etc.cpio

第三章    find实际效果演示

    1、查找/var目录下属主为root,且属组为mail的所有文件

        # find /var -type f -a -user root -a -group mail -ls

    blob.png

    2、查找/var目录下不属于root、lp、gdm的所有文件

        # find /var -type f -a -not -user root -a -not -user lp -a -not -user gdm -ls

        # find /var -type f -a -not \( -user root -o -user lp -o -user gdm \) -ls

    blob.png

    blob.png

    3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

        # find /var -type f -a -mtime -7 -a -not -user root -a -not -user postfix -ls

        # find /var -type f -a -mtime -7 -a -not \( -user root -o -user postfix \) -ls

    blob.png

    4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

        # find / \( -nouser -o -nogroup \) -a -atime -7 -ls

    blob.png

    5、查找/etc目录下大于1M且类型为普通文件的所有文件

        # find /etc -size +1M -a -type f -ls

    blob.png

    6、查找/etc目录下所有用户都没有写权限的文件

        # find /etc -not -perm /222 -ls  可理解为任何一类用户有写权限都不行

    blob.png

    7、查找/etc目录下至少有一类用户没有执行权限的文件

        # find /testdir/ -not -perm -111 -ls  (可理解为可以有多个用户没有执行权限,但不能所有都有执行权限)

    blob.png

    8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

        # find /testdir -perm -113 -ls

    blob.png

原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/36053

(2)
M20-1倪文超M20-1倪文超
上一篇 2016-08-16
下一篇 2016-08-16

相关推荐

  • Linux之iptables原理详解

    目录: 一、netfilter与iptables 二、filter、nat、mangle等规则表 三、INPUT、FORWARD等规则链和规则 四、Linux数据包路由原理 五、iptables编写规则  一、netfilter与iptables (1)Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既…

    2017-08-04
  • Leetcode 编程训练

    Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google、微软、Facebook、Amazon之类的这些公司,基本上是应试教育的功利主义。 我做这些题目的不是为了要去应聘这些公司,而是为了锻炼一下自己的算法和编程能力。因为我开始工作的时候基本没有这样的训练算法和编程的网站,除了…

    Linux干货 2016-08-15
  • N25-第15周博客作业

    1、总结sed和awk的详细用法; sed [OPTION]…  ‘script’  [input-file] … script: 地址定界编辑命令 常用选项: -n:不输出模式空间中的内容至屏幕; -e script, –expression=script:多点编辑;…

    Linux干货 2017-05-21
  • python分支循环和列表

    if语句 if condition: 代码块 condition必须是一个bool类型,这个地方有一个隐式转换bool(condition) if 1<2: print(‘1 less than 2’)   循环——while语句 while condition: block 当条件满足即condition为True,…

    2018-03-27
  • VIM 详用!

    1、复制/etc/rc.d/rc.sysinit文件至/TMP目录,将/tmp/rc.sysinit文件的至少一个空白字符开头的行首加 :%s/^[[:space:]]/#/ 2、复制/boot/grub/grub.conf 至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符; :%s/[[:space:]]\+// 3、删除/tmp/…

    Linux干货 2017-08-20
  • OPENSSL&DNS

      1、详细描述一次加密通讯的过程,结合图示最佳。 Client 从互联网下载CA的公钥,用于验证Server身份 Server 通过加密算法生成一对密钥,将公钥发给CA认证机构,做数字证书 CA 通过自己的私钥加密 Server 公钥并加上自己的数字签名后,将生成的数字证书发给Server Client 与 Server 通TCP的三次握手建立连…

    Linux干货 2016-12-05

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 12:20

    文章对当天所学的知识点,有了一个完整的梳理与总结,对于文件查找而言,find命令至关重要了,这是我们笔试中必考的知识点,需要我们多加练习,熟练掌握。