Linux压缩及归档详解

    我们Linux操作系统中的压缩文件的格式主要有gz、bz2、xz以及Z四种,压缩的过程是我

们的操作系统利用压缩算法来进行实现的,压缩算法不同,压缩比就会不同,压缩文件的过程

是先利用压缩算法去扫描文件,然后利用压缩算法去完成压缩,压缩比指的是压缩前的文件大

小减去压缩后的文件大小的文件大小的差值比上压缩前的文件大小,故压缩比越大,说明压缩

性能就越好,我们早期的Unix操作系统上有一种压缩工具叫做compress,compress本身的意思

就是压缩的意思,compress命令压缩后的文件的文件名的后缀为.Z,而与之对应的解压缩命令

就是uncompress,这个命令的压缩比很小,是一个很古老的压缩工具。

    目前我们的Linux系统上流行的压缩工具主要有以下几种,按出现时间的早晚来进行排序:

        1,gz格式的压缩工具

        压缩工具为gzip,压缩后的文件名的后缀为.gz

        使用格式:gzip filename1 filename2 ...,其后可以指定多个文件,

        gzip会把每一个文件单独压缩,该工具在压缩之后会删除原文件

        wKioL1f67Z-SHGrpAAANhVJeSC8232.png

        该命令所对应的解压缩命令为gunzip

        使用格式:gunzip filename1 filename2 ...

        解压缩之后也会删除原文件(即压缩后的文件)

        wKiom1f67ezCnUgvAAATUCBBIpE720.png

        但是我们的gzip命令有一个-d选项就是用来解压缩的,

        使用格式:gzip -d filename1 filename2 ...

        wKioL1f67jvxI5azAAATWnlpZKs049.png

        还可以使用- #(1-9)选项来指定压缩比,默认的压缩比为6,

        因为压缩比是和压缩速度成反比的

        wKioL1f67onQ58auAAATlBSGRU8371.png

        我们还可以使用zcat命令在不解压的情况下去查看gz格式的压缩文件的内容,

        使用格式:zcat filename.gz

        wKioL1f67x-CvqUoAAAbSRY3zQs169.png

        该工具只能用来压缩文件而不能用来压缩目录

        wKiom1f672WCVdOdAAAX2dkHDek341.png

        2,bz2格式的压缩工具

          压缩工具为bzip2(2为bzip工具的版本号),压缩后的文件名的后缀为.bz2,该工具

比gzip工具有着更大的压缩比,对小文件来讲优势不是很明显,对大文件来讲优势明显,但是

和gzip工具的使用格式是一样的:

         使用格式:bzip2 filename1 filename2 ...,同样该工具也只能用来压缩文件,而

不可以压缩目录,压缩后也会删除原文件:

        wKioL1f68D6zv1mqAAAiByyN66o744.png

        解压缩的工具为bunzip2,使用格式为bunzip2 filename1 filename2 ...,解压缩后

也会删除原文件(即即压缩文件):

        wKioL1f68KGCMPzJAAAYriX9tEY112.png

        同样该工具也支持-d选项进行解压缩,且支持- #选项来指定压缩比:

        wKioL1f68OzATEHVAAAi_HkyjiE461.png

        常用-k(--keep)选项:压缩及解压缩的时候可以保留原文件,而不将原文件删除:

        wKiom1f68fzRIryDAAAqWE5O988282.png

        我们可以使用bzcat命令,在不解压文件的情况下,来查看bz格式的压缩文件的内容:

        wKioL1f68lCzwjFhAAAcq44rlmg585.png

        3,xz格式的压缩工具

        温故->sed命令具有查找并替换的功能,但是sed命令默认是不会修改原文件的内容

的,但是sed命令的-i选项可以修改原文件的内容:

        wKiom1f687OgMCGPAAAlBLD74xc194.png

        压缩工具为xz,压缩后的文件名的后缀为.xz

        使用格式:xz filename1 filename2 ...,压缩程度比bzip2更大,是三种压缩工具

中压缩比最大的工具,压缩后同样会删除原文件:

        wKioL1f69CSym7REAAASKSI9vr4168.png

        解压缩的工具为unxz,使用格式:unxz filename1 filename2 ...,解压缩后也会

删除原文件(即压缩文件):

        wKioL1f69Fizp_21AAAMbPnOKXY541.png

        xz命令也支持-d选项进行解压缩:

        wKiom1f69JugyqUfAAANAzF5VTk153.png

        也支持-#选项指定压缩比,默认压缩比为6:

        wKiom1f69Mny8SaIAAANJb2kZqM079.png

        也支持-k(--keep)选项,在压缩及解压缩的时候保留原文件:

        wKioL1f69SuBhRzUAAAlqe3eVvg085.png

        xzcat命令可以在不解压文件的情况下,查看xz格式压缩文件的内容:

        wKiom1f69avR1ZuWAAAP7IFinsI762.png

        xz命令也是只能压缩文件,而不可以压缩目录:

        wKiom1f69eqBxi24AAAWMw8bPdg647.png

        xzdec(xzdecompress)是一种也可以解压缩xz格式的压缩文件中的内容的压缩工具:

        wKioL1f69kKhq9GlAAAVaO9mT0A297.png

        xzdec命令是一种将压缩文件中的内容解压输出的一种解压工具,而不是解压缩压缩

文件的工具

    由以上可知我们的压缩工具只能压缩文件而不能压缩目录,如果指向目录的话我们的压缩

命令会把目录下的文件一个一个的单独压缩,这些压缩工具在压缩的过程中,默认会删除原文

件,而只保留压缩后的文件,我们在上面介绍了三种目前流行的压缩工具,接下来我们再介绍

一种既可以归档又可以压缩的工具,归档的意思我们可以直接理解为将所有要压缩的文件进行

打包,将多个文件压缩到一起的动作叫做归档(archive),归档本身并不意味着压缩,但是我

们下来要介绍的这种工具本身就是一种既归档又压缩的工具:

·zip命令

    zip命令可以压缩目录,而且压缩后不删除原文件:

    使用格式:zip 压缩后的文件名(由用户自己指定).zip filename1 filename2 ...

    wKiom1f6-FThNXLcAAAZuX3vopc580.png

    上图中的deflated、stored分别指的是压缩文件时的压缩算法

解归档压缩的命令:

·unzip命令

    使用格式:unzip 压缩文件名.zip

     wKiom1f6-MTx97tHAAAlsxv4o20893.png

    解压缩时也不会删除原文件


    下面来介绍一种我们在今后非常常用的一种命令,tar命令:

    tar命令是一种只归档不压缩的工具

    使用格式:tar [options] filename.tar filename1 filename2 ...

        -c选项:创建归档文件

        -x选项:展开归档

        -t选项:不展开归档的情况下,查看归档了哪些文件

        --xattrs:表示在归档的同时保留文件的扩展属性信息,因为我们默认在进行文件归

档的时候不会保留文件的扩展属性信息

        -f选项:-f filename.tar->归档后的文件名是由用户自定义的,这个文件名必须紧

跟在-f选项后面

    创建归档文件:归档的时候会保留原文件

        wKioL1f6-96iCG08AAAUE1PGke0716.png

    在不展开归档文件的情况下查看归档了那些文件:

        wKioL1f6_FTwktuqAAASupv8Z28965.png

    展开归档:展开归档的时候也会保留原文件:

        wKiom1f6_MOgvJnaAAAU023FsQ4005.png

    tar命令允许我们将归档和压缩的功能集成起来,用一条命令就可以完成归档及压缩:

        -z选项表示让我们的tar命令来调用gzip工具来完成压缩,

        使用格式:

        tar -zcf filename.tar.gz(文件名后缀多了一个可以标识我们使用的是哪种压缩工

具的后缀) filename1 filename2 ...

        归档及压缩也不会删除原文件:

        wKiom1f6_Z_xuLaCAAAVjttKSCo347.png

        解压缩再展开归档:也不会删除原文件

        tar -zxf filename.tar.gz

        wKiom1f6_jiSyvrrAAAW9EK8VO0435.png

        -z选项可以省略因为我们的tar命令,可以根据压缩归档文件的后缀名来判断我们使用

了哪种压缩工具,从而就使用哪种工具来解压缩:

        wKioL1f6_r6QzkXHAAAXC5cs7Gk068.png

        不展开归档直接查看归档压缩包的内容:

        tar -ztf filename.tar.gz,同理-z选项也可以省略

        wKiom1f7AVejAHqpAAAbH_lqDNU541.png

        -j选项表示让我们的tar命令去调用我们的bzip2工具来完成压缩:

        使用格式:

        归档及压缩文件:不删除原文件

        tar -jcf filename.tar.bz2 filename1 filename2 ...

        wKiom1f7Advxv2vPAAAV04viBrw745.png

        解归档解压缩文件:不删除原文件

        tar -jxf filename.tar.bz2->同理-j选项可以省略

        wKiom1f7AjKRpSCLAAAsD5Ga9IU442.png

        查看压缩包中的内容

        tar -jtf filename.tar.bz2->同理-j选项可以省略

        wKioL1f7AqnxQch-AAAbk9Sz1qA341.png

        -J选项可以使得我们的tar命令来调用我们的xz压缩工具来完成文件的压缩:

        使用格式:

        压缩及归档文件:不删除原文件

        tar -Jcf filename.tar.xz filename1 filename2 ...

        wKioL1f7AwrjB_gZAAAVdeD3uWA634.png

        解归档解压缩文件:不删除原文件

        tar -Jxf filename.tar.xz->同理-J选项可以省略

        wKioL1f7A8jwo_ihAAA7KKYTLaI465.png

        查看归档压缩包的内容:

        tar -Jtf filename.tar.xz->同理-J选项可以省略

        wKiom1f7BCDAVrO3AAAjAm4KhUI664.png


    我们还有一种归档命令叫做cpio,cpio也是一种归档工具,比tar古老,但是有些场合适

用于使用cpio不适用于使用tar。

    我们Linux系统内置了一个可以使得我们的shell脚本和用户进行交互的命令,这个命令

叫做read命令:

    read命令后面可以接多个参数,参数之间用空格隔开,参数和用户输入的参数一一对应

        -p选项->-p "给出用户的提示"

        -t选项->指定等待用户输入数据的时间

·练习:写一个脚本,要求

    脚本可以和用户进行交互,使得用户输入两个整数,求这两个整数的和,不过脚本有等

待时间,超出等待时间5S脚本自动退出

    脚本内容:

    wKioL1f7BsCRlVa2AAAfUCv63gA215.png

    脚本执行结果:

    wKiom1f7BuWydVDDAAAZ38k0sAY552.png

    温故:echo -n 表示不换行输出

    

·练习:写一个脚本,要求

    脚本可以使用户从键盘输入3个文件,我们的脚本可以使得这几个文件被归档压缩成一

个文件

    脚本内容:

    wKioL1f7Ctijl2EdAABhhfY1gyQ328.png

    脚本执行结果:

    wKioL1f7CuyD42eIAAA0AF2_53A270.png