设为首页 收藏本站
查看: 820|回复: 0

[经验分享] Linux 压缩、解压缩和打包工具

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-16 08:59:56 | 显示全部楼层 |阅读模式
  
    前言:你是否曾经因为某个文件占用空间较大,而空间紧缺的U盘无法存放此文件。你是否曾经因为软件里有太多文件而不方便复制和携带。你是否曾因需要备份太过零散而头疼。那么基于“文件压缩和打包”的技术因此出现。下面介绍下Linux下关于压缩、解压缩和打包的工具及使用。



一、相关术语的原理和意义
    1、压缩原理:
        计算机处理信息的是以二进制的形式表示的,而压缩工具就是将二进制数据中的将重复的字符串用特殊字符标记,从而达到了压缩空间的目的目的。
        例如:如果你的数据有 111..... 共计 10个1时,那么压缩技术就是只记录了“10个1”,而不是真正的将10个1都记录,这样就能减少空间的占用
    2、解压缩
        是压缩的反过程,因为压缩过的文件并无法直接被操作系统所使用,因此,如果我们要使用被压缩过的文件数据,那么就需要将压缩文件“还原”成未压缩前的状态,这个就是“解压缩”
    3、压缩比
        压缩前和压缩后的文件所占用磁盘空间的大小比例



二、压缩技术的好处
    1、减少文件占用的空间
    2、在文件传输过程中不易导致文件损坏
    3、可以对压缩文件进行加密,保护文件
    4、在应用系统文件备份方便


三、在Linux环境中,压缩文件的扩展名大多是 *.tar , *.tar.gz , *.tgz , *.gz , *.Z , *.bz2 , *.xz ,*.zip
    下面是常见的压缩文件扩展名对应的压缩命令
        *.Z            compress程序压缩文件
        *.gz           gzip程序压缩的文件
        *.bz2          bzip2程序压缩的文件  
        *.xz           xz程序压缩的文件
        *.tar          tar程序打包的文件,但未进行压缩
        *.tar.gz       tar程序打包的文件,并经gzip程序压缩
        *.tar.bz2      tar程序打包的文件,并经bzip2程序压缩
        *.zip          zip程序压缩的文件
    小贴士:在Linux的中,没有一个固定的程序后缀,后缀只是为了管理员标识使用,方便日后的维护。



四、下面介绍常用的扩展名对应的压缩命令及使用
    Linux系统常用的压缩命令
        compress :属于比较老旧的一款压缩软件,使用于比较旧UNIX系统上,并现的Linux已不常用
        gzip     :现应用最广的压缩命令,可解压由compress、zip和gzip等软件所压缩的文件
        bzip2    :基于Burrows-Wheeler算法变换的无损压缩软件
        xz       :是一款新的压缩文件,采用LZMA SDK压缩
        zip      :是一款比较通用的压缩工具,在Linux,windows都通用
    压缩比、压缩速度和解压速率比较
             compress < gzip < bzip2 < xz

    1、compress、uncompress
        备注:由于compress比较旧,所以CentOS5.5以上默认没有安装,然后compress的程序包是ncompress,如果系统没有此命令,请执行yum install ncompress安装此程序
        compress [-cv] 文件或目录  <—— 压缩
            -c:将压缩后的结果输出至标准输出
            -v: 显示出压缩后的文件信息以及压缩过程中的文件名变化
        uncompress 文件.Z      <—— 解压
1
2
3
4
5
6
7
8
9
10
11
12
13
例子:
[iyunv@www tmp]# cp -a /etc/man.config  /tmp/       #拷贝/etc/man.config文件到/tmp路径下,为了做练习
[iyunv@www tmp]# compress -v man.config             #对man.config文件进行compress压缩
man.config:  -- replaced with man.config.Z Compression: 41.84%   #压缩比
[iyunv@www tmp]# ls
man.config.Z                                       #发现压缩后的文件后缀默认是.Z,这里也可以看出执行了压缩命令后,源文件会被清除
[iyunv@www tmp]# uncompress man.config.Z            #解压缩
[iyunv@www tmp]# ls
man.config                                         #解压缩后原压缩的文件会被清除
[iyunv@www tmp]# compress -c man.config > man.config.Z   #这相当于保留压缩前的文件
[iyunv@www tmp]# ll -h
-rw-r--r--. 1 root root 4.9K Feb 22  2013 man.config
-rw-r--r--. 1 root root 2.9K Jul 12 13:05 man.config.Z   #可以对比压缩后的文件已经被压缩变小



    小贴士:compress现在已经很少使用了,因为它无法解压*.gz,*.bz2等压缩文件,而后续的压缩程序能解压*.Z的程序包

    2、gzip、gunzip、zcat
        gzip [-cdtv#] 文件名  <—— 压缩
            -c:将压缩后的结果输出至标准输出,这样就能保留源文件了
            -d:相当于gunzip
            -t:可以校验压缩文件的一致性、看看文件有无错误
            -v:显示压缩比的信息
            -#:指定压缩比,范围0-9,数字越大,压缩比例越大,但所消耗的CPU资源更多。默认为6
        gunzip 文件名.gz     <—— 解压缩
        zcat 文件名.gz       <—— 不解压查看gzip压缩后的文件内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
例子:
[iyunv@www tmp]# gzip -v man.config       #压缩文件
man.config:  56.5% -- replaced with man.config.gz   #显示压缩比
[iyunv@www tmp]# ls
man.config.gz                            #压缩后原文件会被删除
[iyunv@www tmp]# gzip -c man.config > man.config.gz  #这相当于保留压缩前的文件
[iyunv@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config
-rw-r--r--. 1 root root 2184 Jul 12 13:27 man.config.gz
[iyunv@www tmp]# zcat man.config.gz      #不解压查看gzip压缩的文件的内容
[iyunv@www tmp]# gzip -1 -c man.config > man.config1.gz
[iyunv@www tmp]# gzip -9 -c man.config > man.config9.gz    #压缩比例越高,所占空间越小
[iyunv@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config
-rw-r--r--. 1 root root 2332 Jul 12 13:31 man.config1.gz
-rw-r--r--. 1 root root 2184 Jul 12 13:31 man.config9.gz
[iyunv@www tmp]# gzip -d man.config1.gz  #解压缩文件,相当于gunzip
[iyunv@www tmp]# ls
man.config  man.config1  man.config9.gz



    小贴士:gzip不能压缩目录

    3、bzip2、bunzip2、bzcat
        bzip2 [-cdkv#] 文件名   <——压缩
            -c:将压缩后的结果输出至标准输出,这样就能保留源文件了
            -d:相当于gunzip
            -t:可以校验压缩文件的一致性、看看文件有无错误
            -v:显示压缩比等的信息
            -k:保留原文件,而不会删除原始文件
            -#:指定压缩比,范围0-9,数字越大,压缩比例越大,但所消耗的CPU资源更多。默认为6
        bunzip2 文件名.bz2    <——解压缩
        bzcat 文件名.bze      <——不解压查看bzip2压缩后的文件内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
例子:
[iyunv@www tmp]# bzip2 -v man.config
  man.config:  2.251:1,  3.555 bits/byte, 55.57% saved, 4940 in, 2195 out.    #压缩比,速度等信息
[iyunv@www tmp]# ls
man.config.bz2
[iyunv@www tmp]# bzip2 -d man.config.bz2  #解压缩,相当于bunzip
[iyunv@www tmp]# ls
man.config
[iyunv@www tmp]# bzip2 -9 -k man.config   #-k参数压缩后保留了原始文件
[iyunv@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config
-rw-r--r--. 1 root root 2195 Jul 12 13:23 man.config.bz2
[iyunv@www tmp]# bzcat man.config.bz2    #不解压查看bzip2压缩后的文件内容
[iyunv@www tmp]# bzip2 -c man.config > man.config2.bz2
[iyunv@www tmp]# ls
man.config  man.config2.bz2  man.config.bz2



    小贴士:bzip2不能压缩目录

    4、xz、unxz、xzcat
        xz [-cdkv# ] 文件名  <——压缩
            各参数用法和bzip2一样,这里不再详述
        unxz 文件名.xz   <——解压缩
        xzcat 文件名     <——不解压查看xz压缩后的文件内容
1
2
3
4
5
6
7
8
9
10
11
练习:
[iyunv@www tmp]# xz -v man.config
man.config (1/1)
  100.0 %                   2,204 B / 4,940 B = 0.446    #压缩比信息
[iyunv@www tmp]# xz -c man.config > man.config.xz    #这相当于保留压缩前的文件
[iyunv@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config
-rw-r--r--. 1 root root 2204 Jul 12 14:18 man.config.xz
[iyunv@www tmp]# unxz man.config.xz       #解压缩,相当于xz -d
[iyunv@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config




    5、zip、unzip
        zip ZIPFILE.zip src_file....    <——压缩
            备注:zip可以对目录进行归档压缩
        unzip ZIPFILE.zip      <——解压缩
1
2
3
4
5
6
7
8
9
练习:
[iyunv@www tmp]# cp -R /home/* /tmp/home/    #将home下文件拷贝到/tmp目录下
[iyunv@www tmp]# ls /home/
user1  user2
[iyunv@www tmp]# zip home.zip home/*         #对目录进行压缩
  adding: home/user1/ (stored 0%)
  adding: home/user2/ (stored 0%)
[iyunv@www tmp]# ls
home  home.zip



    对于目录的归档压缩通常使用tar工具,所以zip这里不再多介绍



五、打包归档工具
    tar:打包归档工具
        能实现将多个文件打包成单个文件,即为归档文件,但是tar只是归档,不压缩
    1、创建归档
        tar [-cvf] Tarfile.tar filename
            -c:create,新建打包文件
            -v:在压缩/解压缩过程中,将正在处理的文件名显示出来
            -f filename:-f后面一定要接被处理的文件名,建议-f 单独使用一个参数
1
2
3
[iyunv@www tmp]# tar -cv -f /tmp/home.tar /home
[iyunv@www tmp]# ls /tmp/
home.tar



    2、展开归档
        tar [-xvf] Tarfile.tar
            -x:解压缩的功能
            -v:在压缩/解压缩过程中,将正在处理的文件名显示出来
            -f filename:-f后面一定要接被处理的文件名,建议-f 单独使用一个参数            
1
2
3
[iyunv@www tmp]# tar -xvf home.tar
[iyunv@www tmp]# ls
home  home.tar



    3、 查看归档后的文件中包含了哪些原文件
        tar [-tf] Tarfile.tar
            -t:查看打包文件里包含哪些文件名
            -f filename:-f后面一定要接被处理的文件名,建议-f 单独使用一个参数
1
[iyunv@www tmp]# tar -tf home.tar



    4、tar与压缩工具(gzip、bzip2、xz)来执行压缩
         tar [-zjJ] Tarfile.tar
            -z:使用gzip进行压缩/解压缩,此文件名最好为*.tar.gz
            -j:使用bzip2进行压缩/解压缩,此文件名最好为*.tar.bz2
            -J:使用xz进行压缩/解压缩,此文件名最好为*.tar.xz
1
2
3
[iyunv@www tmp]# tar -zcvf home.tar.gz home
[iyunv@www tmp]# ls
home  home.tar  home.tar.gz





六、命令总结
    1、Linux系统常用的压缩命令 : compress,gzip,bzip2,xz,zip
        其中compress,gzip,bzip2,xz不能对目录进行压缩归档,一般和tar归档打包工具一起使用,从而达到对目录进行归档
        zip可以直接对目录进行压缩归档
    2、打包归档工具:tar
        创建归档参数: [-cvf]
        展开归档参数: [-xvf]
        查看归档后的文件参数:[-tf]]
        tar和压缩工具一起使用参数:[-zjJ]


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-87113-1-1.html 上篇帖子: 测试配置yum仓库的http镜像 下篇帖子: linux系统初始化配置脚本分享 打包工具 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表