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

[经验分享] Linux学习(十七)压缩与打包

[复制链接]

尚未签到

发表于 2017-11-18 14:37:56 | 显示全部楼层 |阅读模式
一、关于打包和压缩
  打包和压缩的最大意义在于减少文件传输中需要的流量。打包的方式大概有tar命令,zip命令。压缩的方式有gzip,bzip2,xz。tar命令可以通过参数将压缩和打包在一起执行。

二、gzip
  命令格式:gzip -n file



[iyunv@ruanwenwu02 ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1424 10月 17 04:55 anaconda-ks.cfg
[iyunv@ruanwenwu02 ~]# gzip -9 anaconda-ks.cfg
[iyunv@ruanwenwu02 ~]# ls -l anaconda-ks.cfg.gz
-rw-------. 1 root root 777 10月 17 04:55 anaconda-ks.cfg.gz
  基本上压缩了一半。-n的默认值是6,最大是9,n的值越大压缩的程度越高。



[iyunv@ruanwenwu02 ~]# gzip -3 anaconda-ks.cfg
[iyunv@ruanwenwu02 ~]# ls -l anaconda-ks.cfg.gz
-rw-------. 1 root root 783 10月 17 04:55 anaconda-ks.cfg.gz
  实验发现n的值-3和-9的区别并不大。
  解压缩命令:gzip -d filename.gz



[iyunv@ruanwenwu02 ~]# gzip -d anaconda-ks.cfg.gz
[iyunv@ruanwenwu02 ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1424 10月 17 04:55 anaconda-ks.cfg
  如果要查看压缩过后的文件,需要使用命令zcat:



[iyunv@ruanwenwu02 ~]# cat anaconda-ks.cfg.gz
��anaconda-ks.cfg�TQo�8
{�BĆA��?"2eJ�����?$ŏ�>~�s4Ph�W�����M׮{�^�e�ڵk�
J���6ʃ���K�^"�q�?kd?[�.*4�Q�R�Yam�z3Y/]e�2��EaN1kt��y?cWX��i�l6��|!�i�qa�[m3��0�{j4���
�d�u�|�e8��1?�(�
�'b�"3��O�RA��E�����Յ�⎺.·���2�ǃ�ף��'���XMj��8=.���t������H�%�I����ӭ]=�������ݴ�n�>۷7�]�����m1;j��>=;d;#1�B���Q{k:9��G���?�v�
&≤_%��]���π\XBRJ␉��;襒��� '�5��h4�@����ì����-��d��߽ϲ?�9-@�>���c?Z���Vi�"���@i�)}A�čm�i#k��s�6�eW���d�yS������F4���Z������Z���m-h;~:�I�!z%6��$�^_���n_��   �����y����7�ע��[iyunv@ruanwenwu02 ~]# zcat anaconda-ks.cf^C
[iyunv@ruanwenwu02 ~]# zcat anaconda-ks.cfg.gz |head -n 3
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
三、bzip2
  压缩:



[iyunv@ruanwenwu02 ~]# bzip2 anaconda-ks.cfg
[iyunv@ruanwenwu02 ~]# ls -l anaconda-ks.cfg.bz2
-rw-------. 1 root root 870 10月 17 04:55 anaconda-ks.cfg.bz2
  解压缩:



[iyunv@ruanwenwu02 ~]# bzip2 -d anaconda-ks.cfg.bz2
  查看:



[iyunv@ruanwenwu02 ~]# bzcat anaconda-ks.cfg.bz2 |head -n 3
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
四、xz
  xz的用法和gzip和bzip2的用法一样。
  压缩:



[iyunv@ruanwenwu02 ~]# xz anaconda-ks.cfg
[iyunv@ruanwenwu02 ~]# ls -l anaconda-ks.cfg.xz
-rw-------. 1 root root 848 10月 17 04:55 anaconda-ks.cfg.xz
  解压缩:



[iyunv@ruanwenwu02 ~]# xz -d anaconda-ks.cfg.xz
[iyunv@ruanwenwu02 ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1424 10月 17 04:55 anaconda-ks.cfg
  查看:



[iyunv@ruanwenwu02 ~]# xzcat anaconda-ks.cfg.xz |head -n 3
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
五、zip命令
  zip命令和上面几个压缩已命令有些区别,因为它可以压缩目录。它不单可以压缩,还可以打包。
  例如,gzip命令不能压缩目录:



[iyunv@ruanwenwu02 ~]# gzip 1
gzip: 1 is a directory -- ignored
  使用zip压缩目录:



[iyunv@ruanwenwu02 ~]# zip 1.zip 1
adding: 1/ (stored 0%)
[iyunv@ruanwenwu02 ~]# zip -r 1bak.zip 1
adding: 1/ (stored 0%)
adding: 1/2/ (stored 0%)
adding: 1/2/3/ (stored 0%)
adding: 1/2/3/4/ (stored 0%)
adding: 1/2/1.txt (stored 0%)
adding: 1/2/2.txt (stored 0%)
adding: 1/1.txt (stored 0%)
[iyunv@ruanwenwu02 ~]# unzip -d 2/ 1.zip
Archive:  1.zip
creating: 2/1/
[iyunv@ruanwenwu02 ~]# cd 2/
[iyunv@ruanwenwu02 2]# ls
1
[iyunv@ruanwenwu02 2]# cd 1
[iyunv@ruanwenwu02 1]# ls
  代码说明:如果我们不加-r参数,打进去的只是一个空目录。这段代码也说明了如何解压一个zip文件。那就是unzip命令。-d参数是指定解压地址。
  zip除了可以压缩一个目录之外,它还可以把多个文件同时打包:



[iyunv@ruanwenwu02 ~]# zip 3.zip 2.tar anaconda-ks.cfg.xz
adding: 2.tar (deflated 98%)
adding: anaconda-ks.cfg.xz (stored 0%)
[iyunv@ruanwenwu02 ~]# zip 4.zip 1 2.tar
adding: 1/ (stored 0%)
adding: 2.tar (deflated 98%)
[iyunv@ruanwenwu02 ~]# zip -r 5.zip 1 2.tar
adding: 1/ (stored 0%)
adding: 1/2/ (stored 0%)
adding: 1/2/3/ (stored 0%)
adding: 1/2/3/4/ (stored 0%)
adding: 1/2/1.txt (stored 0%)
adding: 1/2/2.txt (stored 0%)
adding: 1/1.txt (stored 0%)
adding: 2.tar (deflated 98%)
  六、tar
  tar命令是一个打包命令。它的使用和zip有点相似。



[iyunv@ruanwenwu02 ~]# tar cvf 2.tar *.zip
1bak.zip
1.zip
3.zip
4.zip
5.zip
  解压缩:



[iyunv@ruanwenwu02 ~]# tar xvf 2.tar -C 3
1bak.zip
1.zip
3.zip
4.zip
5.zip
[iyunv@ruanwenwu02 ~]# tree 3
3
├── 1bak.zip
├── 1.zip
├── 3.zip
├── 4.zip
└── 5.zip
0 directories, 5 files
  -C是指定解压缩的目录。
  tar命令压缩目录不需要加额外的参数:



[iyunv@ruanwenwu02 ~]# ls
1  1bak.zip  1.tar  1.zip  2  2.tar  3  3.zip  4.zip  5.zip  anaconda-ks.cfg.xz
[iyunv@ruanwenwu02 ~]# tar cvf 4.tar 1 3.zip
1/
1/2/
1/2/3/
1/2/3/4/
1/2/1.txt
1/2/2.txt
1/1.txt
3.zip
  查看tar包:



[iyunv@ruanwenwu02 ~]# tar tf 4.tar
1/
1/2/
1/2/3/
1/2/3/4/
1/2/1.txt
1/2/2.txt
1/1.txt
3.zip
  tar命令可以配合参数实现打包的同时并压缩。压缩支持gzip压缩和bzip2压缩。
  tar.gz格式压缩并打包:



[iyunv@ruanwenwu02 ~]# tar zcvf 3.tar.gz 3 3.zip
3/
3/1bak.zip
3/1.zip
3/3.zip
3/4.zip
3/5.zip
3.zip
[iyunv@ruanwenwu02 ~]# ls
1  1bak.zip  1.tar  1.zip  2  2.tar  3  3.tar.gz  3.zip  4.tar  4.zip  5.zip  anaconda-ks.cfg.xz
[iyunv@ruanwenwu02 ~]# tar tf 3.tar.gz
3/
3/1bak.zip
3/1.zip
3/3.zip
3/4.zip
3/5.zip
3.zip
  tar.gz解压缩:



[iyunv@ruanwenwu02 ~]# mkdir 5
[iyunv@ruanwenwu02 ~]# tar zxvf 3.tar.gz -C 5/
3/
3/1bak.zip
3/1.zip
3/3.zip
3/4.zip
3/5.zip
3.zip
[iyunv@ruanwenwu02 ~]# tree 5
5
├── 3
│   ├── 1bak.zip
│   ├── 1.zip
│   ├── 3.zip
│   ├── 4.zip
│   └── 5.zip
└── 3.zip
1 directory, 6 files
  tar.bzip2格式压缩:



[iyunv@ruanwenwu02 ~]# tar jcvf 4.tar.bip2 2.tar 3
2.tar
3/
3/1bak.zip
3/1.zip
3/3.zip
3/4.zip
3/5.zip
[iyunv@ruanwenwu02 ~]# ls
1         1.tar  2      3         3.zip  4.tar.bip2  5      anaconda-ks.cfg.xz
1bak.zip  1.zip  2.tar  3.tar.gz  4.tar  4.zip       5.zip
  上面的例子写错了,应该是tar jcvf 4.tar.bz2。
  tar.biz2解压缩:



[iyunv@ruanwenwu02 ~]# tar jxvf 4.tar.bip2 ^C
[iyunv@ruanwenwu02 ~]# mkdir 6
[iyunv@ruanwenwu02 ~]# tar jxvf 4.tar.bip2 -C 6/
2.tar
3/
3/1bak.zip
3/1.zip
3/3.zip
3/4.zip
3/5.zip
  上面的代码说明,即使我们写错了后缀(4.tar.bip2)也没有影响的。
  如果我们在打包的时候想排除一些文件怎么办呢?



[iyunv@ruanwenwu02 ~]# tar cvf 33.tar 1 --exclude 1.txt --exclude 2/2.txt
1/
1/2/
1/2/3/
1/2/3/4/
[iyunv@ruanwenwu02 ~]# tar tf 33.tar
1/
1/2/
1/2/3/
1/2/3/4/
七、常见习题
  7.1. gzip, bzip2 能否直接压缩目录呢?
不能直接压缩目录

7.2. 请快速写出,使用gzip和bzip2压缩和解压一个文件的命令。
gzip 1.txt
gzip -d 1.txt.gz
bzip2 1.txt
bzip2 -d 1.txt.bz2

7.3. tar 在打包的时候,如果想排除多个文件或者目录如何操作?
tar cvf 123.tar --exclude a.txt --exclude b.txt 123/

7.4. 请实验,如果不加 "-" 是否正确, 如 tar zcvf  1.tar.gz  1.txt 2.txt ?
不加 - 一样没有问题

7.5. 如何使用tar打包和解包 .tar.gz, .tar.bz2 的压缩包?
tar zcvf  1.tar.gz 1
tar zxvf 1.tar.gz
tar jcvf 1.tar.bz2 1
tar jxvf 1.tar.bz2

7.6. 找一个大点的文件,使用tar 分别把这个文件打成 .tar.gz和.tar.bz2 压缩包,比较一下哪个包会更小,从而得出结论,是gzip压缩效果好还是bzip2压缩效果好?
理论上.tar.bz2的压缩包小一些,但个别时候,有相反的情况。但大多时候bzip2压缩效果好。

7.7. 使用tar打包并压缩的时候,默认压缩级别为几? 想一想如何能够改变压缩级别呢?(提示,tar本身没有这个功能哦,可以尝试拆分打包和压缩)
tar打包压缩时,是按照gzip和bzip2的默认压缩级别来的,gzip工具默认压缩级别为6,bzip2默认压缩级别为9.
改变默认压缩级别可以这样来做,首先tar打包,然后再使用gzip或者bzip2压缩工具来压缩,压缩的时候指定压缩级别。如:  tar cvf 1.tar 123/;  gzip -2 1.tar

运维网声明 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-408240-1-1.html 上篇帖子: linux与windows查看占用端口的进程ID并杀死进程 下篇帖子: Linux环境下压缩与解压命令大全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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