TAR,GZIP, BZIP2, XZ对比

原文地址: http://hi.baidu.com/mudgao/blog/item/48746b3f8cd2d6d87c1e7139.html

此文只是大致看了一点,尚没有全部看完,发现其中也有一些错误,不过整个文章的内容还是不错的,先转过来,后续仔细看,然后再加工。

 

1.Tar仅仅只是一个打包工具,并不负责压缩

      Tar是在Linux中使用得非常广泛的文档打包格式。它的好处就是它只消耗非常少的CPU以及时间去打包文件,他仅仅只是一个打包工具,并不负责压缩, 压缩是由gzip与bzip2来实现的。因此把*.tar*、.tar.gz、*.tar.bz2 放到一起来举例:

比如我们要把目录/home/www下的test目录打包压缩到当前目录

    tar zcvf test.tar test//仅打包,不压缩
    tar zcvf test.tar.gz test //打包后以gzip压缩
    tar jcvf test.tar.bz2 test // 打包后以bzip2压缩
    ll test.tar* // 对比压缩后文件大小
    -rw-r–r– 1 Lee mock 10240 01-18 17:05 test.tar
    -rw-r–r– 1 Lee mock 357 01-18 17:06 test.tar.bz2
    -rw-r–r– 1 Lee mock 327 01-18 17:05 test.tar.gz

如何解压缩包:

    tar zxvf test.tar
    tar zxvf test.tar.gz
    tar zxvf test.tar.bz2

    选项:
    -c 建立新的归档文件
    -r 向归档文件末尾追加文件
    -x 从归档文件中解出文件
    -O 将文件解开到标准输出
    -v 处理过程中输出相关信息 //如果使用,解压和压缩过程中,会显示详细信息,不用则是静默化
    -f 对普通文件操作
    -z 调用gzip来压缩归档文件,与-x联用时调用gzip完成解压缩
    -Z 调用compress来压缩归档文件,与-x联用时调用compress完成解压缩

上面测试中,每次要删除解压后的test文件后解压打其他目录,因为如果不定义解压后目录路径和名字则默认解压到当前目录并以把压缩包名称作为文件夹名字。如果要解压到其他目录(如:/var/tmp/find)则如下:

    tar zxvf test.tar.bz2 -C /var/tmp/find

注意:C要大写

关于tar.gz和tar.bz2压缩率的问题:

*.tar.gz 在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。也会被简写成tgz。

*.tar.bz2网上好的资料说这种压缩格式是压缩率最好的、它比前面的方式要占用更多的CPU与时间。但是经过上面的试验显示发现test.tar.gz的大小竟然比test.tar.bz2的更小

 2.Gzip的压缩速度是最快的!

        压缩gz格式速度最快,也是UNIX/BSD的常用格式,压缩bz2格式时间稍长一些,但似乎在好机器上还可以接受,xz格式的压缩效果确实不错,cvs.tar是打包的全部OpenBSD CVS库,原本大小有5G多,经过xz压缩后只有700多M,不得不说压缩算法确实强悍,不过压缩时间太长——在我的1300MHz主频的老机器上,将 5G多的cvs打包文件压缩成xz格式用了两个小时左右,看来这种格式最好不作为日常采用的格式,但是如果作为放在服务器上供长期、大量下载的资源,使用这种压缩格式来进行压缩和解压尚可理解。

很多情况下,bzip2压缩率并不比gz高,但一般情况下,它花的时间却远远大于gz;

 

# ls -la
total 14202000
drwxr-xr-x   3 root  wheel         512 Mar 25 21:18 .
drwxr-xr-x  15 root  wheel         512 Mar 25 16:35 ..
drwxr-xr-x  10 root  wheel         512 Mar 25 17:49 cvs
-rw-r--r--   1 root  wheel         387 Mar 25 16:40 cvs-supfile
-rw-r--r--   1 root  wheel  5208381440 Mar 25 21:18 cvs.tar
-rw-r--r--   1 root  wheel   898476333 Mar 25 21:03 cvs.tar.bz2
-rw-r--r--   1 root  wheel  1162675369 Mar 25 21:13 cvs.tar.gz
# xz -z cvs.tar
# ls -la
total 5467600
drwxr-xr-x   3 root  wheel         512 Mar 25 22:32 .
drwxr-xr-x  15 root  wheel         512 Mar 25 16:35 ..
drwxr-xr-x  10 root  wheel         512 Mar 25 17:49 cvs
-rw-r--r--   1 root  wheel         387 Mar 25 16:40 cvs-supfile
-rw-r--r--   1 root  wheel   898476333 Mar 25 21:03 cvs.tar.bz2
-rw-r--r--   1 root  wheel  1162675369 Mar 25 21:13 cvs.tar.gz

-rw-r--r--   1 root  wheel   737463196 Mar 25 21:18 cvs.tar.xz

 

3.Linux下.bz2与.gz文件的区别

.bz2和.gz都是linux下压缩文件的格式,有点类似windows下的.zip和.rar文件。

  .bz2和.gz的区别在于,前者比后者压缩率更高,后者比前者花费更少的时间。也就是说同一个文件,压缩后,.bz2文件比.gz文件更小,但是.bz2文件的小是以花费更多的时间为代价的。

  压缩实例:对一个599M的文件夹workspace进行压缩

  bz2文件

  time tar -jcvf j.tar.bz2 workspace/

  340M 56.8%

  real 13m20.975s

  user 11m13.872s

  sys 0m5.985s

  gz文件

  time tar -zcvf z.tar.gz workspace/

  348M 58.1%

  real 2m10.305s

  user 0m54.228s

  sys 0m7.399s

  总结:压缩后,.bz2文件只比.gz文件小了8M,但却花费了后者6倍多的时间。当然,压缩的比率,时间跟被压缩文件的格式,大小等因素有关。所以,本例不能说明使用gz比使用bz2更划算,但至少可以证明bz2比gz压缩率更高,gz比bz2花费更少的时间。 

 

4.继续測試一下 gzip, bzip 與 xz

http://blog.s10g.tw/2011/03/01/compare-of-gzip-bzip2-xz/

 

被壓縮檔是 ubuntu-10.10-desktop-i386.iso,大小為694MB(726827008 bytes)。

第一次測試,單純測試時間,指定參數全部相同為‘-c ubuntu-10.10-desktop-i386.iso > /dev/null’。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
======== GZIP ========
real    0m44.138s
user    0m42.300s
sys 0m0.576s
 
======== BZIP2 ========
real    4m55.145s
user    4m53.074s
sys 0m0.750s
 
======== XZ ========
real     7m53.939s
user    7m51.902s
sys 0m1.436s

第二次測試,主要紀錄壓縮檔大小,指定參數均為‘-c ubuntu-10.10-desktop-i386.iso > u1010.iso.gz’

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
======== GZIP ========
real    0m44.551s
user    0m42.279s
sys 0m1.303s
684M(716987381 bytes) u1010.iso.gz
 
======== BZIP2 ========
real    4m52.963s
user    4m50.558s
sys 0m1.704s
 
689M(721999239 bytes) u1010.iso.bz2
 
======== XZ ========
real    8m3.213s
user    7m57.394s
sys 0m2.654s
679M(711776308 bytes) u1010.iso.xz

測試的script

第一次:

1
2
3
4
5
6
7
#!/bin/sh
echo======== GZIP ========
timegzip-c ubuntu-10.10-desktop-i386.iso > /dev/null
echo======== BZIP2 ========
timebzip2-c ubuntu-10.10-desktop-i386.iso > /dev/null
echo======== XZ ========
timexz -c ubuntu-10.10-desktop-i386.iso > /dev/null

第二次:

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
echo======== GZIP ========
timegzip-c ubuntu-10.10-desktop-i386.iso > u1010.iso.gz
ls-sh u1010.iso.gz
echo======== BZIP2 ========
timebzip2-c ubuntu-10.10-desktop-i386.iso > u1010.iso.bz2
ls-sh u1010.iso.bz2
echo======== XZ ========
timexz -c ubuntu-10.10-desktop-i386.iso > u1010.iso.xz
ls-sh u1010.iso.xz

 

显而易见,GNU本家的东西一定都是最好的。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值