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文件夹内

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost  test ] # ll -h
总用量 2.5M
-rw-------. 1 root root 2.5M 8月  19 16:33 messages
[root@localhost  test ] # gzip messages 
[root@localhost  test ] # ll -h
总用量 196K
-rw-------. 1 root root 194K 8月  19 16:33 messages.gz
[root@localhost  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.
...
[root@localhost  test ] # gzip -d messages.gz 
[root@localhost  test ] # ll -h
总用量 2.5M
-rw-------. 1 root root 2.5M 8月  19 16:33 messages

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

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

1
2
3
4
5
[root@localhost  test ] # gzip -9 -c messages > /test/message1.gz 
[root@localhost  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:不显式展开的前提下查看文本文件内容;

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

命令演示

1
2
3
4
5
[root@localhost  test ] # bzip2 messages   
[root@localhost  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的压缩比好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost  test ] # bzip2 -d messages.bz2 
[root@localhost  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
[root@localhost  test ] # bzip2 -k messages
[root@localhost  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
[root@localhost  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: 不显式展开的前提下查看文本文件内容;

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

命令演示

1
2
3
4
5
6
[root@localhost  test ] # xz messages
[root@localhost  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的压缩效果最好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost  test ] # xz -d messages.xz 
[root@localhost  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
[root@localhost  test ] # xz -k messages
[root@localhost  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
[root@localhost  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包进行解压并展开归档

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

命令演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost  test ] # cp /var/log/messages* ./
[root@localhost  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
[root@localhost  test ] # mkdir test
[root@localhost  test ] # mv message* test/
[root@localhost  test ] # ll
总用量 4
drwxr-xr-x. 2 root root 4096 8月  19 17:14  test

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

下面开始归档操作

1
2
3
4
5
[root@localhost  test ] # tar -cf /test/message1.tar test/
[root@localhost  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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost  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
[root@localhost  test ] # xz message1.tar 
[root@localhost  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。

1
2
3
4
5
6
7
8
9
[root@localhost  test ] # rm -rf test/
[root@localhost  test ] # ll
总用量 892
-rw-r--r--. 1 root root 910960 8月  19 17:16 message1. tar .xz
[root@localhost  test ] # tar -xf message1.tar.xz 
[root@localhost  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以上的文件,可以明显感觉到命令执行时间变长。










本文转自 紫色的茶碗 51CTO博客,原文链接:http://blog.51cto.com/chawan/1840390,如需转载请自行联系原作者
目录
相关文章
|
14天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
29 0
|
21天前
|
存储 前端开发 Linux
Linux系统之部署ToDoList任务管理工具
【4月更文挑战第1天】Linux系统之部署ToDoList任务管理工具
63 1
|
22天前
|
存储 传感器 运维
linux系统资源统计工具
【4月更文挑战第1天】Linux系统监控工具如dstat、htop、glances、vmstat、top、iostat、mpstat、sar和atop,用于跟踪CPU、内存、磁盘I/O、网络和进程性能。这些工具提供实时、交互式和历史数据分析,助力管理员优化系统性能和故障排查。例如,dstat是vmstat等工具的增强版,htop提供彩色界面的进程管理,而atop则结合了多种功能并记录历史数据。
28 5
linux系统资源统计工具
|
1月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 软件包管理工具 rpm命令 使用指南
【Shell 命令集合 系统设置 】Linux 软件包管理工具 rpm命令 使用指南
49 0
|
14天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
21 0
|
19天前
|
资源调度 JavaScript 安全
Linux系统之部署web-check网站分析工具
【4月更文挑战第3天】Linux系统之部署web-check网站分析工具
64 9
|
20天前
|
运维 监控 Linux
不是所有的Linux工具都会让人惊叹,但这个绝对让你叫绝
【4月更文挑战第3天】不是所有的Linux工具都会让人惊叹,但这个绝对让你叫绝
31 0
不是所有的Linux工具都会让人惊叹,但这个绝对让你叫绝
|
26天前
|
Linux
linux压缩与解压缩
在Linux中,常用的压缩命令有gzip/gunzip (用于单个文件),bzip2/bunzip2,以及tar (支持gzip, bzip2, xz)。tar还可用于打包多个文件或目录。zip/unzip适用于ZIP格式。使用时注意选项如-c, -z, -j, -J, -x, -v, -f。根据需求选择合适命令,执行时确保目标目录有足够空间和正确权限。
24 3
|
29天前
|
缓存 Linux iOS开发
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
64 1
|
1月前
|
安全 Shell Linux
【Shell 命令集合 系统管理 】Linux 终端复用工具 screen命令 使用指南
【Shell 命令集合 系统管理 】Linux 终端复用工具 screen命令 使用指南
33 0