查看原文
其他

文件打包与压缩(1)-常见的压缩命令

Cloud研习社 Cloud研习社 2023-06-06


为什么需要压缩


打包和压缩的目的就是方便传输和保存。打包相当于把文件放到一个背包里,压缩相当于把背包的体积挤压的更小。


常见的压缩命令


在看压缩命令之前,我们先看看生产中常见的压缩文件的格式。

*.gz        gzip 程序压缩的文件;
*.bz2        bzip2 程序压缩的文件;
*.xz        xz程序压缩的文件
*.tar          tar程序打包的数据,并没有压缩过;
*.tar.gz        tar程序打包的文件,并且经过gzip的压缩
*.tar.bz2      tar程序打包的文件,并且经过bzip2的压缩
*.tar.xz      tar程序打包的文件,并且经过xz的压缩


通过上面的展示,我们可以得出如下结论:
.gz、.bz2、.xz结尾的文件分别是gzip、bzip2和xz压缩的文件。【注意:linux中不根据文件后缀确定文件类型,加上后缀完全是为了方便人类识别^_^】
好了,常用的压缩工具(命令)也就展现在我们的面前了,分别是:gzip、bzip2和xz。
我们来看几个实际的压缩文件的例子吧:
Linux核代码的压缩文件:https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.12.9.tar.xz我们可以看到,这个文件是.tar.xz结尾的,所以我们判断是tar打包的文件且是用xz做的压缩。
nginx的软件包:http://nginx.org/download/nginx-1.18.0.tar.gz 这个文件是以tar.gz结尾的,所以我们判断是tar打包的文件且是用gzip做的压缩。

gzip


gzip [-cdtv] [-num] 被压缩的文件的文件名
选项与参数:
-d  :解压缩;
-v  :可以显示出原文件/压缩文件的压缩比信息;
-num  :压缩等级,num1 最快,但是压缩比最差、num9 最慢,但是压缩比最好!默认是6


我们通过实例看一下:

# 准备需要压缩的文件
[root@studyclub ~]# ls -lSrh /usr/lib/systemd/ # 请自行回顾这个命令及这几个参数的作用
[root@studyclub ~]# cp /usr/lib/systemd/systemd jason/

# 使用gzip命令压缩拷贝出来的systemd文件
[root@studyclub ~]# cd jason/
[root@studyclub jason]# gzip -v systemd # 显示被压缩的文件和压缩比
systemd: 58.1% -- replaced with systemd.gz

[root@studyclub jason]# gzip -d systemd.gz # 解压压缩文件


bzip2


bzip2 [-cdkzv] [-num] 文件名
 选项与参数:
-d  :解压缩
-k  :保留原始文件,而不会删除原始的文件
-v  :可以显示出原文件/压缩文件的压缩比信息;
-num  :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!


我们通过实例看一下:


# 压缩services但保留原文件
[root@studyclub jason]# bzip2 -k services
[root@studyclub jason]# ls
services services.bz2

# 显示压缩比等信息
[root@studyclub jason]# bzip2 -vk services
  services: 5.409:1, 1.479 bits/byte, 81.51% saved, 670293 in, 123932 out.

# 解压缩
[root@studyclub jason]# bzip2 -d services.bz2
bzip2: Output file services already exists. # 由于压缩的时候加了-k选项,所以原来的文件还存在


xz


xz [-dtkv] [-num] 文件名
选项与参数:
 -d  :解压缩
 -t  :可以用来检验一个压缩文件的完整性,看看文件有无错误;
 -k  :保留原文件不删除
 -v  :可以显示出原文件/压缩文件的压缩比信息;
 -num  压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6


我们通过实例看一下:

# 显示压缩信息,压缩后不删除原文件
[root@studyclub jason]# xz -kv services
services (1/1)
  100 % 97.3 KiB / 654.6 KiB = 0.149


gzip、bzip2、xz压缩效率对比

在对比压缩效率之前,我们先介绍一个time命令。

time命令用来查看命令的执行消耗的时长以及系统的资源使用情况。

time [options] COMMAND [arguments]选项和参数:-o 后接文件名,用来保存time的输出结果。-a  配合-o选项,把time执行的输出结果追加到文件结尾,而不是覆盖已有的文件

我们来看看time的用法:

[root@studyclub ~]# time ls
anaconda-ks.cfg  args.sh   link-job  nginx-1.18.0.tar.gz  wofile    # ls的结果

real  0m0.001s  # 从本行开始,是time的输出信息
user  0m0.000s
sys  0m0.001s


上面time的返回结果的含义:
  • real:从ls开始执行到ls执行结束耗费的CPU时间。包括ls进程的阻塞时间(等待完成io等)+其他进程抢占ls进程后耗费的时间+ls进程自身执行需要的时间。

  • user:ls执行用户态代码耗费的CPU时间。这个时间只是指ls进程执行用户态代码实际耗费的时间,不包括阻塞的时间和被抢占的时间。

  • sys:ls执行内核态任务耗费的CPU时间。

注意:real并不一定是user和sys的和,我们以后再讲。
好了,我们来看三个压缩软件的压缩效率:


# gzip压缩
[root@studyclub jason]# time gzip systemd 

real  0m0.097s  
user  0m0.095s
sys  0m0.001s
[root@studyclub jason]# ll -h  # 查看压缩后的大小
-rwxr-xr-x  1 root root 663K Jun 10 10:03 systemd.gz
[root@studyclub jason]# gzip -d systemd.gz   # 把环境还原

# bzip2压缩
[root@studyclub jason]# time bzip2 systemd 

real  0m0.136s
user  0m0.117s
sys  0m0.018s
[root@studyclub jason]# ll -h  # 查看压缩后的大小
-rwxr-xr-x  1 root root 626K Jun 10 10:03 systemd.bz2
[root@studyclub jason]# bzip2 -d systemd.bz2  # 把环境还原

# xz压缩
[root@studyclub jason]# time xz systemd 

real  0m0.611s
user  0m0.567s
sys  0m0.041s
[root@studyclub jason]# ll -h  # 查看压缩后的大小
-rwxr-xr-x  1 root root 542K Jun 10 10:03 systemd.xz
[root@studyclub jason]# xz -d systemd.xz  # 把环境还原


对比压缩效率,我们需要关注命令执行的耗时时长,这里我们关注real指标即可。从上面我们可以看出,gzip、bzip2、xz的实际耗时时间分别是0.097s、0.136s、0.611s。再看看压缩后的文件的大小,我们可以得出以下结论:
  • 在压缩效率上:gzip > bzip2 > xz

  • 在压缩比例上:gzip < bzip2 < xz



新手应知:    尝鲜Rocky Linux
《Linux基础及进阶》:    031 - Linux账号管理(3)-用户组配置文件    032 - Linux账号管理(4)-useradd/usermod/passwd    033 - Linux账号管理(5)-userdel、id、groupadd、groupmod、groupdel    034 - Linux账号管理(6)-身份确认及用户登录信息    035 - Linux账号管理(7)-身份切换su、sudo


看完本文有收获?请分享给更多人


推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存