zoukankan      html  css  js  c++  java
  • 压缩与解压缩

    前言

    一、打包工具tar

    1.1 tar简介

    1.2 tar选项详解

    1.3 tar补充——包分隔之split

    1.4 打包备份 cpio

    二、压缩工具汇总

    2.1 compress/uncompress.Z文件)

    2.2 gzip/gunzip.gz文件)

    2.3 bzip2/bunzip2/bzcat.bz2文件)

    2.4 xz/unxz/xzcat.xz文件)

    2.5 打包压缩zip/unzip.zip文件)

     

    前言

    在我们使用计算机的过程中,会需要文件传输,当文件特别大的时候,我们就需要用到压缩工具。在windows系统下,最常见的压缩文件只有两种,一个是 .rar”,另一个是“.zip”。而在我们的linux系统下,可就大大不同了,它有“.Z”、“.gz”、“.bz2”、“.xz”、“.zip”等众多的压缩文件名,接下来,我们就来分别说一说这些linux系统下常见的压缩文件。

     

    一、打包工具tar

    1.1 tar简介

    可能有人会有疑问,为什么明明是一个介绍压缩与解压缩的博客,怎么一开始就说打包工具!!!∑(Д)ノ当然这不是小编写错,我们在介绍压缩文件之前,首先要弄明白一个概念,压缩和打包

    所谓打包,就是把一大堆文件或目录什么的变成一个总的文件;而压缩则是把一个比较大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢?这是由于Linux中的很多压缩程序只能针对一个文件进行压缩,所以当你想压缩一大堆文件的时候,就需要先把这些文件打包到一起,然后才可以用我们的压缩程序进行压缩。

    linux下,最常用的打包工具就是tar了。接下来我们就详细说一说这个命令。

    命令:tar

    格式:tar [OPTION]...

     

    1.2 tar选项详解

    1)创建归档

    tar -cf /PATH/TO/SOMEFILE.tar FILE…

    -c是表示产生新的包,-f指定包的文件名。

     1 [root@ keer app]# ll
     2 total 28
     3 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
     4 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
     5 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
     6 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
     7 [root@ keer app]# tar -cf app.tar ./*                ------------把当前目录下所有文件打包到app.tar中
     8 [root@ keer app]# ll
     9 total 60
    10 -rw-r--r--. 1 root root 30720 Aug 11 19:53 app.tar
    11 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
    12 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
    13 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
    14 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry

     

    2)追加文件至归档  (注:不支持对压缩文件的追加)

    tar -rf /PATH/TO/SOMEFILE.tar FILE…

    -r是表示增加文件的意思。


    3)查看归档文件中的文件列表

    tar -tvf /PATH/TO/SOMEFILE.tar

    -t是列出文件的意思,-v是对文件进行长列出(详细信息)

    Example: 

     1 [root@ keer app]# tar -tvf app.tar 
     2 -rw-r--r-- root/root     15131 2017-08-11 19:44 ./functions
     3 -rw-r--r-- root/root       999 2017-08-11 19:51 ./god
     4 -rw-r--r-- root/root        36 2017-08-11 20:01 ./nihao
     5 -rw-r--r-- root/root      3518 2017-08-11 19:44 ./passwd
     6 -rw-r--r-- root/root       288 2017-08-11 19:47 ./poetry
     7 [root@ keer app]# tar -rf app.tar nihao      ------------追加nihao文件至app.tar中
     8 [root@ keer app]# tar -tvf app.tar           ------------查看app.tar中的文件列表
     9 -rw-r--r-- root/root     15131 2017-08-11 19:44 ./functions
    10 -rw-r--r-- root/root       999 2017-08-11 19:51 ./god
    11 -rw-r--r-- root/root        36 2017-08-11 20:01 ./nihao
    12 -rw-r--r-- root/root      3518 2017-08-11 19:44 ./passwd
    13 -rw-r--r-- root/root       288 2017-08-11 19:47 ./poetry
    14 -rw-r--r-- root/root        36 2017-08-11 20:01 nihao 

    4)展开归档

    tar -xf /PATH/TO/SOMEFILE.tar

    -x是解包的意思

    tar -xf /PATH/TO/SOMEFILE.tar -C /PATH/

    -C是指定新的路径存储解包后的文件

    Example:

     1 [root@ keer app]# tar -cvf test.tar /etc/passwd /etc/group       -----------打包/etc/passwd和/etc/group到test.tar中
     2 tar: Removing leading `/' from member names
     3 /etc/passwd
     4 /etc/group
     5 [root@ keer app]# ll
     6 total 76
     7 -rw-r--r--. 1 root root 30720 Aug 12 08:46 app.tar
     8 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
     9 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
    10 -rw-r--r--. 1 root root    36 Aug 11 20:01 nihao
    11 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
    12 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
    13 -rw-r--r--. 1 root root 10240 Aug 12 08:55 test.tar
    14 [root@ keer app]# tar -xf test.tar                               ------------解包test.tar
    15 [root@ keer app]# ll
    16 total 80
    17 -rw-r--r--. 1 root root 30720 Aug 12 08:46 app.tar
    18 drwxr-xr-x. 2 root root  4096 Aug 12 08:55 etc               ------------解包test.tar生成的文件目录
    19 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
    20 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
    21 -rw-r--r--. 1 root root    36 Aug 11 20:01 nihao
    22 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
    23 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
    24 -rw-r--r--. 1 root root 10240 Aug 12 08:55 test.tar
    25 [root@ keer app]# ll etc/* 
    26 -rw-r--r--. 1 root root 1500 Aug  8 17:57 ./etc/group
    27 -rw-r--r--. 1 root root 3518 Aug  8 17:57 ./etc/passwd 

    5)结合压缩工具实现:归档并压缩(配合cf使用)

    -jbzip2    -zgzip    -Jxz

    -T选项指定输入文件,-X选项指定包含要排除的文件列表  

        tar -zcvf mybackup.tgz -T /root/includefilelist -X  /root/ excludefilelist

    Includefilelistexcludefilelist两个文件存的都是文件的路径,Includefilelist文件里存的路径是需要补充的文件,excludefilelist文件里存的路径是需要排除的文件。比如在我们需要大批量进行打包压缩的时候,我们可以把打包和压缩放在一条命令中进行,此时,我们就可以把需要打包的文件路径存在Includefilelist文件,然而这些文件中可能有一部分我们是不需要的,就可以将其路径存在excludefilelist文件。当然名字是可以随心所欲的认定~

     1 [root@ keer app]# tar -jcf files.tar.bz2 /etc/passwd /etc/group      ----------把/etc/passwd和/etc/group打包并压缩至files.tar.bz2中
     2 tar: Removing leading `/' from member names
     3 [root@ keer app]# ll
     4 total 84
     5 -rw-r--r--. 1 root root 30720 Aug 12 08:46 app.tar
     6 drwxr-xr-x. 2 root root  4096 Aug 12 08:55 etc
     7 -rw-r--r--. 1 root root  1866 Aug 12 09:11 files.tar.bz2
     8 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
     9 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
    10 -rw-r--r--. 1 root root    36 Aug 11 20:01 nihao
    11 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
    12 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
    13 -rw-r--r--. 1 root root 10240 Aug 12 08:55 test.tar 
     1 [root@ keer app]# cat includefilelist 
     2 /etc/init.d/
     3 /root/bin
     4 /app
     5 [root@ keer app]# cat excludefilelist 
     6 /root/bin/createuser21.sh
     7 /root/bin/createyonghu21.sh
     8 [root@ keer app]# tar -zcvf mybackup.tgz -T ./includefilelist -X ./excludefilelist   ----------把includefilelist中写的文件打包,除了excludefilelist中写的文件
     9 tar: Removing leading `/' from member names
    10 /etc/init.d
    11 /root/bin/
    12 /root/bin/jiaozuoye21.sh
    13 /root/bin/sumspace21.sh
    14 /root/bin/links.sh
    15 /root/bin/disk.sh
    16 /root/bin/argsnum21.sh
    17 /root/bin/createsh21.sh
    18 /root/bin/nologin21.sh
    19 /root/bin/reset21.sh
    20 /root/bin/hello.sh
    21 /root/bin/sumfile21.sh
    22 /root/bin/systeminfo.sh
    23 /root/bin/hostping21.sh
    24 /root/bin/sumid21.sh
    25 /root/bin/backup.sh
    26 /root/bin/per21.sh
    27 /root/bin/login21.sh
    28 /root/bin/excute21.sh
    29 /root/bin/checkdisk21.sh
    30 /app/
    31 /app/poetry
    32 /app/functions
    33 /app/mybackup.tgz
    34 /app/test.tar
    35 /app/god
    36 /app/files.tar.bz2
    37 /app/includefilelist
    38 /app/passwd
    39 /app/nihao
    40 /app/excludefilelist
    41 /app/etc/
    42 /app/etc/group
    43 /app/etc/passwd
    44 /app/app.tar
    45 
    46 #以上打包的所有文件中,不包含/root/bin/createuser21.sh,/root/bin/createyonghu21.sh这两个文件。
    47 
    48 [root@ keer app]# ll
    49 total 112
    50 -rw-r--r--. 1 root root 30720 Aug 12 08:46 app.tar
    51 drwxr-xr-x. 2 root root  4096 Aug 12 08:55 etc
    52 -rw-r--r--. 1 root root    54 Aug 12 09:19 excludefilelist
    53 -rw-r--r--. 1 root root  1866 Aug 12 09:11 files.tar.bz2
    54 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
    55 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
    56 -rw-r--r--. 1 root root    28 Aug 12 09:18 includefilelist
    57 -rw-r--r--. 1 root root 18307 Aug 12 09:20 mybackup.tgz             ------生成的文件
    58 -rw-r--r--. 1 root root    36 Aug 11 20:01 nihao
    59 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
    60 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
    61 -rw-r--r--. 1 root root 10240 Aug 12 08:55 test.tar

    1.3 tar补充——包分隔之split

    如果我们在打包的过程中,打包出来的文件大小过大,可能依然不适合传输,此时我们可以把这个文件用split命令分割成多个小文件,这样可能更加方便我们的储存和传输,当然,在解包的时候,我么可以再将其还原成一个完整的文件。

    命令:split

    格式:split -b size -d tar-file-name prefix-name

        -b表示每个输出文件的大小,-d表示输出的结尾以数字标示(如果不加-d则以字母表示为后缀)

    Example:

    1split -b 1M -d mybackup.tgz mybackup-parts

    2split -b 1M mybackup.tgz mybackup-parts


    1.4 打包备份cpio

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

    命令:cpio

    格式:cpio [选项] > 文件名或设备名

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

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

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

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

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

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

              -c 一种较新的存储方式

     1 [root@ keer app]# find -type f |cpio -o > /app/etc_f.cpio         ----------通过重定向把/etc/下的普通文件进行打包备份
     2 [root@ keer app]# ll
     3 total 204
     4 -rw-r--r--. 1 root root  30720 Aug 12 08:46 app.tar
     5 drwxr-xr-x. 2 root root   4096 Aug 12 08:55 etc
     6 -rw-r--r--. 1 root root 107008 Aug 12 09:31 etc_f.cpio
     7 -rw-r--r--. 1 root root     54 Aug 12 09:19 excludefilelist
     8 -rw-r--r--. 1 root root   1866 Aug 12 09:11 files.tar.bz2
     9 -rw-r--r--. 1 root root      0 Aug 12 09:26 functions
    10 -rw-r--r--. 1 root root    999 Aug 11 19:51 god
    11 -rw-r--r--. 1 root root     28 Aug 12 09:18 includefilelist
    12 -rw-r--r--. 1 root root  18307 Aug 12 09:20 mybackup.tgz
    13 -rw-r--r--. 1 root root     36 Aug 11 20:01 nihao
    14 -rw-r--r--. 1 root root   3518 Aug 11 19:44 passwd
    15 -rw-r--r--. 1 root root    288 Aug 11 19:47 poetry
    16 -rw-r--r--. 1 root root  10240 Aug 12 08:55 test.tar
    17 
    18 # 查看刚刚打包的文件内容:
    19 
    20 [root@ keer app]# cpio -vt < etc_f.cpio |less
    21 -rw-r--r--   1 root     root          288 Aug 11 19:47 poetry
    22 -rw-r--r--   1 root     root            0 Aug 12 09:26 functions
    23 -rw-r--r--   1 root     root        18307 Aug 12 09:20 mybackup.tgz
    24 -rw-r--r--   1 root     root        10240 Aug 12 08:55 test.tar
    25 -rw-r--r--   1 root     root          999 Aug 11 19:51 god
    26 -rw-r--r--   1 root     root         1866 Aug 12 09:11 files.tar.bz2
    27 -rw-r--r--   1 root     root           28 Aug 12 09:18 includefilelist
    28 -rw-r--r--   1 root     root         3518 Aug 11 19:44 passwd
    29 -rw-r--r--   1 root     root           36 Aug 11 20:01 nihao
    30 -rw-r--r--   1 root     root           54 Aug 12 09:19 excludefilelist
    31 -rw-r--r--   1 root     root        35328 Aug 12 10:33 etc_f.cpio
    32 -rw-r--r--   1 root     root        30720 Aug 12 08:46 app.tar

        新建一个目录,并将文件恢复到该目录下

     1 [root@ keer app]# mkdir etc
     2 [root@ keer app]# ll
     3 total 196
     4 drwxr-xr-x. 2 root root   4096 Aug 12 10:51 etc
     5 -rw-r--r--. 1 root root 101888 Aug 12 10:33 etc_f.cpio
     6 [root@ keer app]# cd etc/
     7 [root@ keer etc]# pwd
     8 /app/etc
     9 [root@ keer etc]# cpio -id < ../etc_f.cpio 
    10 199 blocks
    11 [root@ keer etc]# ll
    12 total 128
    13 -rw-r--r--. 1 root root 30720 Aug 12 10:52 app.tar
    14 -rw-r--r--. 1 root root 35328 Aug 12 10:52 etc_f.cpio
    15 -rw-r--r--. 1 root root    54 Aug 12 10:52 excludefilelist
    16 -rw-r--r--. 1 root root  1866 Aug 12 10:52 files.tar.bz2
    17 -rw-r--r--. 1 root root     0 Aug 12 10:52 functions
    18 -rw-r--r--. 1 root root   999 Aug 12 10:52 god
    19 -rw-r--r--. 1 root root    28 Aug 12 10:52 includefilelist
    20 -rw-r--r--. 1 root root 18307 Aug 12 10:52 mybackup.tgz
    21 -rw-r--r--. 1 root root    36 Aug 12 10:52 nihao
    22 -rw-r--r--. 1 root root  3518 Aug 12 10:52 passwd
    23 -rw-r--r--. 1 root root   288 Aug 12 10:52 poetry
    24 -rw-r--r--. 1 root root 10240 Aug 12 10:52 test.tar

        有时使用cpio命令打包的文件过大,我们还可以使用压缩命令对其进行压缩

    1 [root@ keer app]# bzip2 -k -9 etc_f.cpio 
    2 [root@ keer app]# ll -h
    3 total 232K
    4 drwxr-xr-x. 2 root root 4.0K Aug 12 10:52 etc
    5 -rw-r--r--. 1 root root 100K Aug 12 10:33 etc_f.cpio
    6 -rw-r--r--. 1 root root  35K Aug 12 10:33 etc_f.cpio.bz2

     

    二、压缩工具汇总

    2.1 compress/uncompress.Z文件)

    命令:compress  压缩

    格式:compress [-dfvcVr] [-b maxbits] [file ...]

    选项:  -d:解压缩,相当于uncompress(不能补齐)

         -c:将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

          -v:显示详情(压缩过程)

              -f:默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

    命令:uncompress  解压缩(可以补齐)

    格式:uncompress [file ...]

    Example

    1 [root@ keer app]# ll -h
    2 total 1.3G
    3 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
    4 [root@ keer app]# compress passwd         ----------压缩passwd
    5 [root@ keer app]# ll -h
    6 total 117M
    7 -rw-r--r--. 1 root root 117M Aug 12 11:07 passwd.Z

        由上可以看出,这个工具的压缩效率不是很高,而且会覆盖原文件,我们怎么才能保留原文件并且也压缩呢?

    1 [root@ keer app]# compress -c passwd > passwd.Z
    2 [root@ keer app]# ll -h
    3 total 1.4G
    4 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
    5 -rw-r--r--. 1 root root 117M Aug 12 11:16 passwd.Z

        当然这种方法可能会导致文件的权限改变0.0所以建议不要使用这种方法。

        如果我们压缩的文件中有带有硬链接的文件呢?我们加上 -f 选项即可:

     1 [root@ keer app]#ll -h
     2 total 1.4G
     3 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
     4 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz
     5 -rw-r--r--. 1 root root 117M Aug 12 11:16 passwd.Z
     6 [root@ keer app]#
     7 [root@ keer app]#ll -h
     8 total 1.4G
     9 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
    10 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz
    11 -rw-r--r--. 1 root root 117M Aug 12 11:16 passwd.Z
    12 [root@ keer app]#ln passwd passwd.ln
    13 [root@ keer app]#ll -h
    14 total 2.6G
    15 -rw-r--r--. 2 root root 1.3G Aug 12 11:07 passwd
    16 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz
    17 -rw-r--r--. 2 root root 1.3G Aug 12 11:07 passwd.ln        ------------注意硬链接数
    18 -rw-r--r--. 1 root root 117M Aug 12 11:16 passwd.Z
    19 [root@ keer app]#compress passwd
    20 passwd has 1 other links: unchanged
    21 [root@ keer app]#compress -f  passwd
    22 [root@ keer app]#ll -h
    23 total 1.4G
    24 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz
    25 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd.ln        ------------注意硬链接数
    26 -rw-r--r--. 1 root root 117M Aug 12 11:07 passwd.Z

      下面给大家说一下解压缩,一共三种方法:

    1 [root@ keer app]# compress -d passwd.Z
    2 [root@ keer app]# uncompress passed.Z
    3 [root@ keer app]# zcat passwd.Z > passwd

           由上可以看出,我们有一个解压缩的万能工具——zcat。这个命令后面直接跟需要解压缩的文件名,但是这个命令出来的内容也是直接打印的,需要配合重定向使用。

    在本文介绍的所有压缩工具中,只有compress -d 命令是不可以补齐的,其他的都可以,这个要注意喏。所以这个工具其实并不是很好用

     

    2.2 gzip/gunzip.gz文件)

    命令:gzip

    格式:gzip [OPTION]... FILE ...

    选项:        -d 解压缩,相当于gunzip

    -c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

    -f 默认不对硬链接数2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

    -v 显示详细过程。

    -# 数字越大,压缩比越高,速度越慢,文件越小。

    -1 等于 --fast

    -23456(default)78

    -9 等于 --best

    Example

    1 [root@ keer app]# gzip -c passwd > passwd.gz    -----------保留原文件并对passwd进行压缩
    2 [root@ keer app]# ll -h
    3 total 1.4G
    4 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
    5 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz

             可以看出,这个的压缩效率还是蛮高的,这个命令有一个设定压缩比的功能,用数字1-9表示,下面我们就来演示一下:

     1 [root@ keer app]# gzip -c1 passwd > passwd.1.gz
     2 [root@ keer app]# gzip -c6 passwd > passwd.6.gz
     3 [root@ keer app]# gzip -c9 passwd > passwd.9.gz
     4 
     5 #我们只来对比一下1,6,9。别的就不做过多演示
     6 
     7 [root@ keer app]# ll 
     8 total 1477020
     9 -rw-r--r--. 1 root root 1330664794 Aug 12 11:07 passwd
    10 -rw-r--r--. 1 root root   35703636 Aug 12 14:34 passwd.1.gz
    11 -rw-r--r--. 1 root root    8162665 Aug 12 14:35 passwd.6.gz
    12 -rw-r--r--. 1 root root    7974465 Aug 12 14:36 passwd.9.gz
    13 -rw-r--r--. 1 root root    8162665 Aug 12 11:23 passwd.gz

             从上面我们可以发现,passwd.6.gz和passwd.gz的大小是一样的,也就是说,gzip的默认压缩比是6

        gzip的解压方法也是三种,如下:
    1 [root@ keer app]# gzip -d test_gzip.gz 
    2 [root@ keer app]# gunzip test_gzip.gz 
    3 [root@ keer app]# zcat test_gzip.gz > test_gzip

    2.3 bzip2/bunzip2/bzcat.bz2文件)

    命令:bzip2

    格式:bzip2 [OPTION]... FILE ...

    选项:    -d 解压缩,相当于bunzip2&bzcatbzcat需要配合重定向使用)

    -k 保留原文件

    -c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

    -f 默认不对硬链接数2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

    -v 显示详细过程。

    -#         数字越大,压缩比越高,速度越慢,文件越小。

    -1 等于 --fast

    -2345678

    -9 等于 --best (default)

    Example

        跟前面介绍到的两个压缩工具相比,bzip2工具不仅提高了压缩比,还可以保留原文件,可以说是非常好用了( • ̀ω•́ )✧但是但是!压缩的时间真的是很长了╮(╯﹏╰)╭所以太大的文件不建议用这个工具

    1 [root@ keer app]# ll -h
    2 total 146M
    3 -rw-r--r--. 1 root root 146M Aug 12 15:28 test
    4 [root@ keer app]# bzip2 -k test       -------------压缩test文件
    5 [root@ keer app]# ll -h
    6 total 147M
    7 -rw-r--r--. 1 root root 146M Aug 12 15:28 test
    8 -rw-r--r--. 1 root root 564K Aug 12 15:28 test.bz2

         同样的,我们也来说一下如何解压

    1 [root@ keer app]# bunzip2 test.bz2
    2 [root@ keer app]# bzip2 -d test.bz2
    3 [root@ keer app]# bzcat test.bz2 > test

     

    2.4 xz/unxz/xzcat.xz文件)

    命令:xz

    格式:xz [OPTION]... FILE...

    选项:  -d 解压缩   xzcat

         -k 保留原文件

         -f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

         -v 显示详细过程。

         -#   数字越大,压缩比越高,速度越慢,文件越小。

           -0 等于 --fast

           -1 -23456(default)78

           -9 等于 --best

    Example:

            当当当当,本文中介绍的所有压缩工具中最好用的来了~xz与上文中介绍的三个工具相比,压缩比可是高的吓人喏

     1 [root@ keer app]# ll -h
     2 total 162M
     3 -rw-r--r--. 1 root root 146M Aug 12 15:28 test
     4 -rw-r--r--. 1 root root 564K Aug 12 15:28 test.bz2
     5 -rw-r--r--. 1 root root 870K Aug 12 15:42 test.gz
     6 -rw-r--r--. 1 root root  15M Aug 12 15:42 test.Z
     7 [root@ keer app]# xz -kv test
     8 100 %        23.6 KiB / 145.6 MiB = 0.000    11 MiB/s       0:13             
     9 [root@ keer app]# ll -h
    10 total 162M
    11 -rw-r--r--. 1 root root 146M Aug 12 15:28 test
    12 -rw-r--r--. 1 root root 564K Aug 12 15:28 test.bz2
    13 -rw-r--r--. 1 root root 870K Aug 12 15:42 test.gz
    14 -rw-r--r--. 1 root root  24K Aug 12 15:28 test.xz
    15 -rw-r--r--. 1 root root  15M Aug 12 15:42 test.Z

              这就可以很清楚的对比出xz的压缩比有多大了,而且xz的压缩时间也很快喏~0.0

        我们再来说一下xz如何解压

    1 [root@ keer app]# xz -d test.xz 
    2 [root@ keer app]# xzcat test.xz > test

    2.5 打包压缩zip/unzip.zip文件)

    命令:zip(打包压缩)

    格式:zip -r 包名文件1路径  文件二路径

    zip命令是将多个文件进行打包压缩,所以直接在包名后跟文件路径即可。如果不加包名,会默认将第一个文件作为包名,该文件不参与打包压缩的过程。

    命令:unzip(打包解压缩)

    格式:unzip file...

    unzip解压时,会在当前目录下新建一个文件夹,文件夹内储存包内的所有文件。文件的权限不变。

    补充:

    |zip 将生成的文件名

    可以将管道前的输出结果转为文件并压缩。通过此方式压缩的文件只能使用“unzip -p 压缩包 > 新文件 ”来解压缩

    unzip -p 预览解压缩后的内容到屏幕,可以配合重定向将结果保存到指定文件,权限会发生变化。(一般用于单个文件的压缩和解压缩)

    Example

     1 [root@ keer app]# zip -r files /etc/group /etc/passwd      ----------打包压缩/etc/group和/etc/passwd文件
     2   adding: etc/group (deflated 51%)
     3   adding: etc/passwd (deflated 64%)
     4 [root@ keer app]# ll 
     5 total 4
     6 -rw-r--r--. 1 root root 2336 Aug 12 15:50 files.zip
     7 [root@ keer app]# unzip -d lianxi files.zip                -----------解压文件files.zip到lianxi目录下
     8 Archive:  files.zip
     9   inflating: lianxi/etc/group        
    10   inflating: lianxi/etc/passwd       
    11 [root@ keer app]# ll
    12 total 8
    13 -rw-r--r--. 1 root root 2336 Aug 12 15:50 files.zip
    14 drwxr-xr-x. 3 root root 4096 Aug 12 15:51 lianxi
    15 [root@ keer app]# cd lianxi/
    16 [root@ keer lianxi]# ll
    17 total 4
    18 drwxr-xr-x. 2 root root 4096 Aug 12 15:51 etc
    19 [root@ keer lianxi]# cd etc/
    20 [root@ keer etc]# ll
    21 total 8
    22 -rw-r--r--. 1 root root 1500 Aug  8 17:57 group
    23 -rw-r--r--. 1 root root 3518 Aug  8 17:57 passwd
     1 [root@ keer app]# find /etc/ -type f | zip etc.zip -             -----------压缩
     2   adding: - (deflated 86%)
     3 [root@ keer app]# ll
     4 total 24
     5 -rw-r--r--. 1 root root 16230 Aug 12 15:55 etc.zip
     6 [root@ keer app]# unzip -p etc.zip > etc.zz                      -----------解压
     7 [root@ keer app]# ll
     8 total 140
     9 -rw-r--r--. 1 root root  16230 Aug 12 15:55 etc.zip
    10 -rw-r--r--. 1 root root 117360 Aug 12 15:55 etc.zz

        以上,如有不足之处还请大家多多指教诺(〃'▽'〃)

  • 相关阅读:
    GoLang中面向对象的三大特性
    Go常用功能总结一阶段
    GO语言基础之并发concurrency
    GO语言基础之error
    GO语言基础之reflect反射
    GO语言基础之interface
    GO语言基础之method
    GO语言基础之struct
    GO语言基础map与函数
    GO语言基础条件、跳转、Array和Slice
  • 原文地址:https://www.cnblogs.com/keerya/p/7347492.html
Copyright © 2011-2022 走看看