Linux基础之压缩与归档工具

压缩出现的原因简析

压缩为什么会诞生?我们可以想象一下如果没有压缩的场景:一个游戏10G,下载下来得一整天,我们要上传一个1G电影得1天,磁盘不够用了,再买一块扩展...上传下载好耗费时间啊,买一块硬盘好贵。如果我们可以将游戏压缩到原来的80%,我们就可以节省下来20%的时间,同时也节省了一部分磁盘空间。所以压缩诞生的目的首先是解决磁盘空间问题,其次也是为了节省我们上传下载的时耗问题。

看起来它的出现真的是好的无以复加,不过它也有它的不足,压缩必定伴随着压缩这个过程,同样若是想要解压也需要解压这个过程,这个过程需要占用大量CPU的时间,我们应该会有这种感受,当我们压缩或解压缩大文件时,个人PC会很卡,因为当前的较多CPU资源都用于处理压缩或解压这个进程。

所以压缩的出现是与现实的妥协与折中的产物,我们节省了磁盘空间,减少了上传下载时耗,但我们却会在解压或压缩时增加了CPU的负担。

实验环境为CentOS7.2



压缩及解压工具(包括归档工具tar及cpio)

下面我们就来了解下Linux中的压缩解压缩及归档工具

它主要有如下几种:

compress/uncompress: .Z   很久之前使用的一款压缩与解压工具,现在几乎消失踪迹(本文不予介绍)

gzip/gunzip: .gz    现在Linux系统中使用范围最广的压缩与解压工具

bzip2/bunzip2: .bz2 在gzip之后出现,因其压缩比并没有明显提升,因此使用的并不太多

xz/unxz: .xz        最近出现的压缩与解压工具,因其压缩比较之gzip有了明显的提高,因此近来其用人数越来越多,兴许它可以取代gzip的地位

zip/unzip           这款压缩与解压工具的兼容性更好,它的平台很广,Unix,Windows,Linux,Mac等都可以使用。

tar, cpio           此为归档工具,tar用的最广,cpio一般不用(这里不予介绍)

…………………………………………………………………………………………………………

gzip/gunzip/zcat

gzip、gunzip、zcat:compress or expand files

注:默认压缩后删除原文件

命令使用格式

gzip [OPTION]... FILE ...

常用选项

-d: 解压缩,相当于gunzip

-c: 将结果输出至标准输出;压缩后保留原文件

其格式为:gzip -C FILE > /PATH/TO/SOMEFILE.gz

-#:1-9,指定压缩比,数字越大压缩比越大;默认为6,通常不建议指定压缩比。

zcat:不显式展开的前提下查看文本文件内容;

…………………………………………………………………………………………………………

命令演示

我们把/var/log/message文件拷贝到/test文件夹内

[[email protected] test]# ll -h
总用量 2.5M
-rw-------. 1 root root 2.5M 8月  19 16:33 messages
[[email protected] test]# gzip messages 
[[email protected] test]# ll -h
总用量 196K
-rw-------. 1 root root 194K 8月  19 16:33 messages.gz
[[email protected] test]# zcat messages.gz 
Aug 14 11:39:15 centos7 avahi-daemon[905]: Invalid response packet from host 10.1.252.
7.
Aug 14 11:39:16 centos7 avahi-daemon[905]: Invalid response packet from host 10.1.252.
7.
...
[[email protected] test]# gzip -d messages.gz 
[[email protected] test]# ll -h
总用量 2.5M
-rw-------. 1 root root 2.5M 8月  19 16:33 messages

上面演示了压缩,zcat,解压的过程,这个过程还说明了在压缩文件后会默认将原文件删除,并且解压后自动会为原文件加上.gz后缀,本来文件后缀对Linux没有意义,但是压缩是个例外

下面再演示下指定压缩比及压缩后保留原文件的操作。

[[email protected] test]# gzip -9 -c messages > /test/message1.gz 
[[email protected] test]# ll -h
总用量 2.7M
-rw-r--r--. 1 root root 188K 8月  19 16:52 message1.gz
-rw-------. 1 root root 2.5M 8月  19 16:33 messages

对比两个实验结果可以发现大的压缩比确实可以减少占的磁盘空间,但是默认的6与指定的9相差并不大,因此实际工作中一般不指定文件的压缩比。

…………………………………………………………………………………………………………

bzip2/bunzip2/bzcat

命令使用格式

bzip2 [OPTION]... FILE ...

常用选项

-k: keep, 保留原文件;其bzip -k FILE即可

-d:解压缩,相当于bzip2

-#:1-9,指定压缩比,数字越大压缩比越大;默认为6,通常不建议指定压缩比。

bzcat:不显式展开的前提下查看文本文件内容;

…………………………………………………………………………………………………………

命令演示

[[email protected] test]# bzip2 messages   
[[email protected] test]# ll -h
总用量 316K
-rw-r--r--. 1 root root 188K 8月  19 16:52 message1.gz
-rw-------. 1 root root 128K 8月  19 16:33 messages.bz2

可以看出来bzip2确实比gzip的压缩比好。

[[email protected] test]# bzip2 -d messages.bz2 
[[email protected] test]# ll -h
总用量 2.7M
-rw-r--r--. 1 root root 188K 8月  19 16:52 message1.gz
-rw-------. 1 root root 2.5M 8月  19 16:33 messages
[[email protected] test]# bzip2 -k messages
[[email protected] test]# ll -h
总用量 2.8M
-rw-r--r--. 1 root root 188K 8月  19 16:52 message1.gz
-rw-------. 1 root root 2.5M 8月  19 16:33 messages
-rw-------. 1 root root 128K 8月  19 16:33 messages.bz2
[[email protected] test]# bzcat messages.bz2 | more
Aug 14 11:39:15 centos7 avahi-daemon[905]: Invalid response packet from host 10.1.252.
7.
Aug 14 11:39:16 centos7 avahi-daemon[905]: Invalid response packet from host 10.1.252.
7.
...

上面为bzip2的解压、留原文件的压缩与bzcat。

…………………………………………………………………………………………………………

xz/unxz/xzcat

命令使用格式

xz [OPTION]... FILE ...

常用选项

-k: keep, 保留原文件;表达格式为:xz -k FILE

-d:解压缩,相当于unxz

-#:1-9,指定压缩比,数字越大压缩比越大;默认为6,通常不建议指定压缩比。

xzcat: 不显式展开的前提下查看文本文件内容;

…………………………………………………………………………………………………………

命令演示

[[email protected] test]# xz messages
[[email protected] test]# ll -h
总用量 408K
-rw-r--r--. 1 root root 188K 8月  19 16:52 message1.gz
-rw-------. 1 root root 128K 8月  19 16:33 messages.bz2
-rw-------. 1 root root  90K 8月  19 16:33 messages.xz

从上面三种压缩工具压缩相同的文件可以明显看到xz的压缩效果最好

[[email protected] test]# xz -d messages.xz 
[[email protected] test]# ll -h
总用量 2.8M
-rw-r--r--. 1 root root 188K 8月  19 16:52 message1.gz
-rw-------. 1 root root 2.5M 8月  19 16:33 messages
-rw-------. 1 root root 128K 8月  19 16:33 messages.bz2
[[email protected] test]# xz -k messages
[[email protected] test]# ll -h
总用量 2.9M
-rw-r--r--. 1 root root 188K 8月  19 16:52 message1.gz
-rw-------. 1 root root 2.5M 8月  19 16:33 messages
-rw-------. 1 root root 128K 8月  19 16:33 messages.bz2
-rw-------. 1 root root  90K 8月  19 16:33 messages.xz
[[email protected] test]# xzcat messages.xz | more
Aug 14 11:39:15 centos7 avahi-daemon[905]: Invalid response packet from host 10.1.252.
7.
...

…………………………………………………………………………………………………………

tar  Linux中最常用的归档工具

命令使用格式:

tar [OPTION]...

(1) 创建归档

tar -c -f /PATH/TO/SOMEFILE.tar FILE...

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

(2) 查看归档文件中的文件列表

tar -t -f /PATH/TO/SOMEFILE.tar

(3) 展开归档

tar -x -f /PATH/TO/SOMEFILE.tar

        tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/TO/DIR

4)结合压缩工具实现:归档并压缩

-j: bzip2,

-jcf 使用bzip2对目标文件夹进行归档并以bzip2格式压缩

-jxf 使用bzip2对.bx2后缀的tar包进行解压并展开归档

-z: gzip,

-zcf使用gzip对目标文件夹进行归档并以gzip格式压缩

-zxf使用gzip对.gz后缀的tar包进行解压并展开归档

-J: xz

-Jcf使用xz对目标文件夹进行归档并以xz格式压缩

-Jxf使用xz对.xz后缀的tar包进行解压并展开归档

…………………………………………………………………………………………………………

命令演示

[[email protected] test]# cp /var/log/messages* ./
[[email protected] test]# ll -h
总用量 16M
-rw-r--r--. 1 root root 188K 8月  19 16:52 message1.gz
-rw-------. 1 root root 2.5M 8月  19 17:14 messages
-rw-------. 1 root root 1.1M 8月  19 17:14 messages-20160724
-rw-------. 1 root root 1.4M 8月  19 17:14 messages-20160731
-rw-------. 1 root root 4.4M 8月  19 17:14 messages-20160807
-rw-------. 1 root root 6.1M 8月  19 17:14 messages-20160814
-rw-------. 1 root root 128K 8月  19 16:33 messages.bz2
-rw-------. 1 root root  90K 8月  19 16:33 messages.xz
[[email protected] test]# mkdir test
[[email protected] test]# mv message* test/
[[email protected] test]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 8月  19 17:14 test

先从/var/log/message文件夹下拷贝一些文件,之后在原路径下创建一新文件夹再将这些文件转移其中

下面开始归档操作

[[email protected] test]# tar -cf /test/message1.tar test/
[[email protected] test]# ll -h
总用量 16M
-rw-r--r--. 1 root root  16M 8月  19 17:16 message1.tar
drwxr-xr-x. 2 root root 4.0K 8月  19 17:14 test

归档后总大小并没有减小,通常反而会大一点,所以一般在归档后进行压缩。

[[email protected] test]# tar -t -f /test/message1.tar 
test/
test/message1.gz
test/messages
test/messages-20160724
test/messages-20160731
test/messages-20160807
test/messages-20160814
test/messages.bz2
test/messages.xz
[[email protected] test]# xz message1.tar 
[[email protected] test]# ll -h
总用量 896K
-rw-r--r--. 1 root root 890K 8月  19 17:16 message1.tar.xz
drwxr-xr-x. 2 root root 4.0K 8月  19 17:14 test

这里16M文件被xz工具压缩至890K。

[[email protected] test]# rm -rf test/
[[email protected] test]# ll
总用量 892
-rw-r--r--. 1 root root 910960 8月  19 17:16 message1.tar.xz
[[email protected] test]# tar -xf message1.tar.xz 
[[email protected] test]# ll -h
总用量 896K
-rw-r--r--. 1 root root 890K 8月  19 17:16 message1.tar.xz
drwxr-xr-x. 2 root root 4.0K 8月  19 17:14 test

这里使用tar -xf为什么不加前缀J?因为tar在展开归档时会自动检测指定要展开的压缩包,命令会根据后缀自动选择相应的工具进行解压。



本文总结

1、文件的后缀原本对Linux系统无实际意义,但在压缩解压是个例外

2、gzip、bzip2、xz都只支持压缩文件无法压缩目录,若要对目录进行压缩则需先进行归档之后对归档的文件进行压缩。

3、tar只能对文件归档不能压缩解压操作不过它可以调用gzip、bzip2、xz实现归档压缩及解压并展开归档。

4、tar仅仅做归档操作,其产生的tar包大于等于原来的文件夹大小。

5、tar展开压缩归档文件无需事先指明要解压扩展的文件的压缩工具,因为其可以自动识别。

6、压缩及解压缩是以牺牲CPU时间为代价节省磁盘空间及传输文件时间,若是压缩解压10MB以上的文件,可以明显感觉到命令执行时间变长。

时间: 2024-12-09 14:29:34

Linux基础之压缩与归档工具的相关文章

linux文件压缩与归档工具

1.compress/uncompress  .Z 格式 compress [-dfvcVr] [-b maxbits] [file -] -d: 解压缩,相当于 -c: 结果输出至标准输出,不删除原文件 compress -c  file > file.Z -v: 显示详情 uncompress 解压缩 -c -d file.Z > file   ->  解压,但是保持源文件 zcat file.Z >file 2. gzip/gunzip     .gz 格式 gzip [OP

Linux压缩及归档工具整理

gzip:.gz,只能压缩文件,不能压缩目录 gzip somefiles:压缩完成后会删除原文件 -d:解压缩 -# :1-9,指定压缩比,默认为6 gunzip:解压缩 gunzip somefiles.gz:解压完成后删除原压缩文件 zcat somefiles.gz:查看gzip压缩文件内的文本文件内容 bzip2:.bz2,只能压缩文件,不能压缩目录 比gzip有着更大压缩比的压缩工具: bzip2 somefiles:压缩完成后会删除原文件 -d:解压 -# :1-9,指定压缩比,默

linux下的压缩、归档

压缩  bz2.xz.zip.Z 不能压缩目录,压缩后默认删除原文件. gz: gzip /path/filename -d 解压缩 gunzip /paht/some_filename zcat /path/somefile.gz:在不解压的条件下,查看文本文件的内容. bzip2:比gzip有更大压缩比. bzip2 /path/some_filename -d 解压缩 -k 保留原文件 bunzip2 /path/some_filename bzcat /path/somefile.bz2

Linux下的压缩及归档

Linux下常用的压缩格式有: gz,bz2,xz,zip,Z //只能压缩文件不能压缩目录,如果传递一个目录,他会把目录中的文件逐个压缩 ..压缩算法:算法不同,压缩比也不同 gz:gzip,压缩后为 .gz //gunzip解压缩 -d :解压缩 -#(#范围为1-9):指定压缩比,压缩比越小,压缩速度越快,压缩后的文件也越大,默认为6 zcat:在不解压的情况下查看压缩文本文件的内容(临时解压文件查看,关闭之后临时文件被删除) bz2:bzip2,压缩后为.bz2 比gzip更大压缩比的压

Linux基础篇-压缩、解压缩命令

压缩格式:gz,bz2,xz,zip,Z compress:FILENAME.Z  早期的压缩命令 uncompress gzip:  .gz   只能压缩文件 gzip /PATH/TO/SOMEFILE :压缩完成后会删除源文件 -d:解压缩 -#:1-9 指定压缩比 默认是6: gunzip; gunzip /PATH/TO/SOMEFILE.gz:解压完成后会删除原文件 zcat /PATH/TO/SOMEFILE.gz:不解压的情况下,查看文本文件的内容: bzip2: .bz2 只能

Linux系统管理-(7)-压缩与归档

  常用压缩工具压缩后文件后缀 compress/uncompress: .Z    gzip/gunzip: .gz    bzip2/bunzip2: .bz2    xz/unxz: .xz 1.gzip/gunzip   .gz gzip [OPTION]... FILE ...            -d: 解压缩,相当于gunzip            -c: 将结果输出至标准输出:            -#:1-9,指定压缩比: zcat:不显式展开的前提下查看文本文件内容:2

【Linux基础】压缩和解压

Linux 常用的压缩与解压文件类型:.tar,.gz..tar.gz,.bz2..tar.bz2,.Z..tar.Z,.zip,.rar等. Linux 常用的压缩与解压缩命令有:tar,gzip.gunzip,bzip2.bunzip2,compress .uncompress, zip. unzip,rar.unrar 等. Summary: 压缩: tar –cvf jpg.tar *.jpg // 将目录里所有jpg文件打包成 jpg.tar tar –czf jpg.tar.gz *

linux压缩、归档工具

1.gzip/bzip2/xz [-#] file,只能压缩文件,不可压缩目录. 通用的参数: -#:指定压缩比1-9,默认是6 -d:展开,即解压 a. gzip,gunzip=gzip -d,默认压缩有原文件删除,解压后压缩文件删除. -c:将压缩结果输出到屏幕,可以使用重定向将其保存为压缩文件,从而保留原文件. gzip -c mmm > mmm.gz gzip mmm gzip -d mmm.gz 不解压查看压缩文件 zcat file b. bzip2,bunzip2=bzip2 -d

L-1-17 Linux命令之压缩与归档命令

[bzip2] bzip2 <file> 将文件压缩成bz2格式,并删除原文件. //适合大文件压缩 -d <*.bz2> 解压 -<num> 指定压缩比.<num>∈[1,9] -k 保留原文件 //相关命令bunzip2 [bunzip2] bunzip2 <*.bz2> 解压*.bz2 //相关命令bzip2 [bzcat] bzcat <*.bz2> 查看bz2的文件内容 //相关命令bzip2 [cdrecord] cdre