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 13:59
下一篇 2016-08-16 13:59

相关推荐

  • Linux文件查找的使用方法

    文件查找的方法 locate命令       非实时查找(数据库查找): locate查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db    依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);管理员手动更新数据库(updated…

    Linux干货 2016-08-15
  • 网络分层基础概念与TCP,IP协议解析

    网络分层基础概念:   与ISO的OSI网络分层模型不同。网络分层事实上的标准为TCP/IP 的网络分层模型。   下图是他们是他们之间的对应关系。   左边为OSI网络分层模型。右边为TCP/IP的网络分层模型。 网络分层,是将一个大而复杂的网络,拆分为多个层次,每个层次单独完成自己的任务,多个层次再结合起来,完成一个复杂的通…

    2017-05-04
  • 马哥教育网络班22期第4周课程作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@MyCloudServer ~]# cp /etc/skel/ /home/tuser1  [root@MyCloudServer ~]# c…

    Linux干货 2016-09-19
  • 马哥教育网络班22期+第9周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;            [root@test ~]# vim&nbsp…

    Linux干货 2016-10-24
  • linux文本编辑利器-vim

    概述 Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。Vim强大的编辑能力中很大部分是来自于其普通模式命令。vim的设计理念是命令的组合。例如普通模式命令"dd"删除当前行,"dj"代表删除到下一行…

    Linux干货 2016-08-11
  • linux用户管理(一)

    作为一个专业的服务器发行版,CentOS上存在着n多个用户,作为一个专业的运维工程师,linux的用户管理和用户组的管理是做为一个SA必不可少的工作. 下面我们就先来谈谈linux中的用户管理: useradd可以在系统中新建一个用户 用法如下: useradd [选项] 用户名 常用选项: -u 指定用户的UID -g 指定用户的初始组ID -G…

    Linux干货 2017-04-03

评论列表(1条)

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

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