Linux 命令:每日一学,一文说尽打包压缩工具实践

发布于:2024-10-18 ⋅ 阅读:(9) ⋅ 点赞:(0)

a1e77707c3015f3ca9111b87891a9e9c.gif

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]


文章目录:

72054abb99d8b675038a913c1875012d.png

0x00 前言简述

前面,我们介绍了Linux中文件查找find命令以及与之联用最勤的xargs命令,作者以一个个简单的实例给各位看友展示了在运维中两个命令的使用技巧,今天我们再来介绍一些打包、压缩解压等相关命令。

在 Linux 系统中,我们经常需要使用到压缩和解压文件,使用压缩文件可以减少文件大小,从而减少存储空间,以及在网络传输文件时,可以减少传输的时间,此外还有打包的操作,打包可以方便的将一大堆文件或目录变成一个总的文件,值得注意的是,此处打包和压缩是两个概念,简单的说:

  • 打包:将一大堆文件或目录变成一个总的文件,不会对齐压缩,类似于你将许多书籍放在纸箱中。

  • 压缩:将一个大的文件通过一些压缩算法变成一个小文件,类似于将书籍进行电子化,方便携带其重量自然减少了。

为什么要区分这两个概念呢?

答:这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)

此外,Linux 中最常见的压缩文件后缀名(格式)有 .Z .gz .tar.gz .bz2 .tar.bz2 .xz .zip .rar .tgz,其中通过tar命令将目录打包,从而解决.gz和.bz2压缩目录的不便之处,所以常用压缩格式.tar.gz和.tar.bz2格式作为先打包后压缩的产物。

4240e9921493b45edcdcc6a2970f6463.png

例如,Linux 内核源码压缩包是 xz 格式,Nginx 源码压缩包是 tar.gz 格式,以及 Apache httpd 源码压缩包是 tar.bz2。

12bbb96a4a9486605c32f916b28b1bac.png

weiyigeek.top-一些项目常见压缩包格式图

那这么多的压缩文件格式,用什么命令来打包、压缩和解压呢?我们该如何选择呢?他们之间的差异是什么?让我们带着这三个问题开始今天的主题吧!

请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

温馨提示:此 Linux 命令 | 系列 文章将作为《#运维从业必学》专栏辅助学习知识,这是也是每位Linux运维工程师必须掌握的基础知识,作者耗费心力、时间进行总结,希望对大家有所帮助,所以若有帮助还请多多关注作者,并鼓励作者创造更多文章吧。

Linux 运维学习之路相关文章:

以自身实践为第一标准,下面跟随作者一起学习吧!


0x01 压缩解压命令

描述:下述命令主要针对于Linux系统中单个文件进行压缩和解压命令,下面我们一一介绍。

compress 命令 - 将文件压缩为.Z格式

uncompress 命令 - 将.Z格式文件解压

描述:compress命令为Unix或Linux系统中常见的压缩程序,其文件名一般为xxx.Z,使用 uncompress 命令对xxx.Z文件进行解压。

请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

温馨提示:此工具目前已经很少使用,如系统中没有此工具可以安装ncompress包。

# Redhat/Centos 系统系列
yum install ncompress

# Debian/Ubuntu 系统系列
apt-get install ncompress

语法参数

# Usage: 
compress [-dfvcVr] [-b maxbits] [file ...]
uncompress [-dfvcVr] [-b maxbits] [file ...]

# Parameters:
-d: 解压文件,默认解压到当前目录,相当于uncompress命令
-c: 将文件压缩到标准输出,保留原始文件
-f: 强制压缩文件,即使该文件以.Z结尾
-v: 显示压缩或解压文件的详细过程
-r:递归目录其中并压缩其中的所有内容。

实例演示:首先,我们生成几个示例文件,以供后续测试使用。

# 文本文件
for i in `seq 1 10000`;do ip addr >> test1.txt;done

# 二进制文件
dd if=/dev/zero of=test2.txt bs=38M count=1

# 将两个测试用例文件设置为一样的大小
$ ls -sh *.txt
38M test1.txt  38M test2.txt

常规使用:

# 示例1.压缩文件
compress test1.txt   # 文本压缩
compress test2.txt   # 二进制压缩
ls -alh *.Z
  # -rw-r--r-- 1 root root 1.9M Oct 11 10:46 test1.txt.Z
  # -rw-r--r-- 1 root root  13K Oct 11 10:52 test2.txt.Z

# 示例2.查看Z压缩文件中的文本文件
zcat test1.txt.Z 
zcat test1.txt.Z | head -n 3
  # 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  #     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  #     inet 127.0.0.1/8 scope host lo

# 示例3.解压文件
compress -d test2.txt.Z
uncompress test1.txt.Z

# 示例4.保留源文件压缩
compress -c test1.txt > test1.txt.Z
# 或者使用管道
compress -c test1.txt | tee test1.txt.Z > /dev/null

# 示例5.批量压缩目录下单个txt文件
ls *.txt | xargs -n1 compress
请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

gzip 命令 - 将文件压缩为.gz格式

gunzip 命令 - 将.gz格式文件解压

描述:gzip命令是GNU组织开发的一个压缩解压缩工具,它提供了很多种压缩级别,使用起来非常简单。不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式, 据统计gzip命令对文本文件有60%~70%的压缩率,文件经它压缩过后,其名称后面会多处“.gz”扩展名

gunzip 命令是gzip工具的解压缩程序,它用于解开被gzip压缩过的文件。

语法参数

# Usage: 
gzip [OPTION]... [FILE]...
gunzip [OPTION]... [FILE]...

# Parameters:
-c : 将压缩文件的内容输出到标准输出上。
-d : 解压缩文件,默认解压到当前目录,相当于gunzip命令
-k : 保留源文件,即不删除原始文件。
-t :测试压缩文件是否正确无误,即压缩文件完整性。
-q :抑制所有警告,静默执行
-r :递归操作目录
-l :列出压缩文件内容
-f :强制覆盖输出文件并压缩链接
-[1-9] :压缩等级,数字越大压缩率越高,越耗费CPU但时间越长,

实例演示

  • 示例1.将文件或者目录中的文件压缩为.gz格式

# 压缩文件,注意会删除源文件
gzip test1.txt
gzip test2.txt  

# 或者直接压缩当前目录下的的每个文件压缩为.gz格式
gzip *
ls -sh
  # total 296K
  # 256K test1.txt.gz   40K test2.txt.gz
  • 示例2.将文件或者目录中的文件解压为原始格式

# 方式1.
gzip -dv test1.txt..gz   # 解压单个文件
gzip -dv *                  # 解压通配符匹配的文件
  # test1.txt.gz:        99.3% -- replaced with test1.txt
  # test2.txt.gz:        99.9% -- replaced with test2.txt

# 方式2.
gunzip -v test1.txt.gz  # 同上
gunzip -v *
  # test1.txt.gz:        99.3% -- replaced with test1.txt
  # test2.txt.gz:        99.9% -- replaced with test2.txt
  • 示例3.保留源文件压缩和解压的几种方式

# 压缩并保留源文件
gzip -k test1.txt  # CentOS8 新特性,CentOS7不支持
gzip -c test1.txt > test1.txt.gz  
cat test1.txt | gzip > test1.txt.gz

# 备份并保留源gz文件
gzip -d -c test1.txt.gz > test1.txt
gunzip -c test1.txt.gz > test1.txt
  • 示例4.查看压缩文件信息及其文本文件内容

# 查看压缩文件信息,压缩率99.3%
gzip -l test1.txt.gz
         compressed        uncompressed  ratio uncompressed_name
             259609            38910000  99.3% test1.txt
# 在不解压的情况下查看压缩文件内容
zcat test1.txt.gz
zcat test1.txt.gz > test1.txt
  • 示例5.只能压缩目录下所有的子文件,但不能压缩目录

# 递归压缩 tmp 目录中前台目录下面的文件都变成了*.gz,目录依然存在只是目录里面的文件相应变成了*.gz,这就是压缩和打包不同。
# 因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。
gzip -rvf /tmp  
# /tmp/demo:     -200.0% -- replaced with /tmp/demo.gz
# /tmp/test:     -200.0% -- replaced with /tmp/test.gz
# /tmp/test.jsp.gz:       21.2% -- replaced with /tmp/test.jsp.gz.gz
# /tmp/www/test.jsp:     -100.0% -- replaced with /tmp/www/test.jsp.gz

# 递归解压
gzip -drv *   
# demo.gz:        -200.0% -- replaced with demo
# test.gz:        -200.0% -- replaced with test
# test.jsp.gz.gz:  21.2% -- replaced with test.jsp.gz
# www/test.jsp.gz:        -100.0% -- replaced with www/test.jsp
  • 示例6.验证压缩文件

gzip  -vt test1.txt.gz
  # test1.txt.gz:    OK
  • 示例7.解压 tar 命令打包的 gz 格式文件。

tar -zcvf test1.tar.gz test1.txt
gzip -vt test1.tar.gz
gzip -d test1.tar.gz
  • 示例8.指定压缩等级,等级越高压缩率越高,越耗费CPU但时间越长

gzip -k -9 test1.txt
  # 224K test1.txt.gz  # 压缩等级9,占用 224K 
  # 256K test1.txt.gz  # 默认压缩等级,占用 256K
请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

bzip2 命令 - 将文件压缩为.bz2格式

bunzip2 命令 - 将.bz2格式文件解压

bzcat 命令 - 查看.bz2格式文件内容

描述:bzip2命令是块排序的文件压缩工具,它是一个类似gzip的压缩格式。不同的是此命令使用Lempel-Ziv 编码和多哈希算法(MH算法),该程序的设计目标是提供更高的压缩比。

语法参数:

# 语法
 bzip2 [flags and input files in any order]

# 参数
-d --decompress: 强制解压缩
-z --compress  : 强制压缩
-k --keep      : 保留源文件
-f --force     : 强制压缩或解压文件,即使它已经存在了
-t --test      : 测试验证压缩文件
-c --stdout    : 将压缩或解压后的内容输出到标准输出
-q --quiet     : 禁止所有警告信息
-s --small     : 降低内存使用,但压缩比低
-1 --fast      : 降低内存使用,但压缩比低
-9 --best      : 最高压缩比,但需要更长的时间
-[1..9]        : 将块大小设置为100k。。90万

示例演示

  • 示例1.将文件或者目录中的文件压缩为.bz2格式

# 不保留源文件压缩
bzip2 test1.txt

# 或者压缩当前目录下的所有文件
bzip2 *

# 可看到压缩文件大小,要小于 gzip 压缩文件,但是耗费时间更长。
ls -sh
  total 96K
   92K test1.txt.bz2  4.0K test2.txt.bz2
  • 示例2.保留源文件进行压缩和要解压

# 保留源文件压缩
bzip2 -k test1.txt
# 或者,标准输出到压缩文件
bzip2 -c test1.txt > test1.txt.bz2
# 或者
cat test1.txt | bzip2 > test1.txt.bz2
  • 示例3.压缩指定文件并强制覆盖:

# 第一次压缩会成功,第二次压缩会提示文件已存在
bzip2 -k -z test1.txt.bak
bzip2 -k -z test1.txt.bak
bzip2: Output file test1.txt.bak.bz2 already exists.

# 然后强制覆盖
bzip2 -k -f test1.txt.bak
  • 示例4.解压文件并在不解压情况下查看文本文件内容

# 查看压缩文本文件内容
bzcat test1.txt.bz2 | head -n 3
  # 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  #   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  #   inet 127.0.0.1/8 scope host lo

# 解压文件
bzip2 -d test1.txt.bz2
# 或者
bunzip2 test1.txt.bz2

# 解压文件并保留源文件
bzip2 -k -d 压缩文件
# 或
bunzip2 -k  压缩文件      

# 解压文件并覆盖解压后的文件
bzip2 -df test1.txt.bak.bz2
  • 示例5.验证压缩文件

bzip2 -tv test1.txt.bz2
  # test1.txt.bz2: ok
  • 示例6.将所有后面看做文件(即使文件名以'-'开头)进行压缩

bzip2 -k -- test1.txt test2.txt
ls -sh *.bz2
  # 92K test1.txt.bz2  4.0K test2.txt.bz2
  • 示例7.利用bzip2来压缩tar打包后的tar文件,解压时可直接使用 tar -jxf 命令解压文件。

$ tar -cvf test.tar test.jsp
$ bzip2 test.tar 
  # test.tar.bz2
# 或者
$ tar -jcvf test.tar.bz2 test.jsp              # 一条命令搞得搞定
$ tar -jtvf  test1.tar.bz2                     # 查看压缩文件中的目录文件结构
  # -rw-r--r-- root/root  38910000 2024-10-11 10:46 test1.txt

$ tar -jcvf 压缩包名.tar.bz2 源文件 -C /tmp/   # 压缩目录到压缩包中
$ tar -jxvf 压缩包名.tar.bz2                   # -jxf参数解压缩 tar.bz2 文件
$ tar -jtvf 压缩包名.tar.bz2                   # -jtv参数查看压缩 tar.bz2 文件
请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

zcat 命令 - 查看打包或压缩文件

描述: zcat与gunzip-c完全相同,zcat 是 Linux 系统中用于查看压缩文件内容的命令,特别是用于处理 .gz 格式的 gzip 压缩文件。它的功能与 cat 命令类似,但可以直接读取压缩文件,并将解压后的内容输出到标准输出(通常是终端)。

语法参数

# 用法:
zcat [选项] [压缩文件]

# 常用参数:
-f:强制处理文件,即使文件没有 `.gz` 后缀。

使用示例

  1. 查看Z、gz、tar.gz 压缩文件内容

    # 这个命令会将 `file.gz` 文件解压并输出其内容到终端。
    zcat test1.txt.Z 
    zcat test1.gz
    zcat server.log.2017-02-07.tar.gz 
    
    # 如果有需要进行过滤的需求,可以使用通道符与 grep 命令。
    zcat server.log.2017-02-07.tar.gz | grep -a -C30 7494560570
  2. 将多个压缩文件的内容合并输出

    # 这会将 `file1.gz` 和 `file2.gz` 的内容解压并依次输出。
    zcat file1.gz file2.gz
  3. 将压缩文件内容保存到另一个文件

    # 这个命令会将 `file.gz` 的解压内容保存到 `output.txt` 文件中。
    zcat file.gz > output.txt
  4. 与管道结合使用

    # 该命令会将解压后的内容通过管道传递给 `grep` 命令,以搜索包含“关键词”的行。
    zcat file.gz | grep "关键词"
  5. 查看压缩文件的头部信息

    # 这个命令会显示压缩文件的前几行内容。
    zcat -f file.gz | head

总结:zcat 是一个非常实用的命令,特别是在处理大量压缩数据时,可以方便地查看和处理文件内容而无需手动解压。

请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

xz 命令 - 将文件压缩为.xz格式

unxz 命令 - 将.xz格式文件解压

描述:xz 是Linux系统中用于压缩和解压 xz 格式文件的命令,它是算是比较新的压缩工具,它是一种高压缩比的文件压缩算法,其压缩后文件的后缀名通常为 .xz结尾,并常常与tar打包工具联用压缩文件目录为 .tar.xz

例如,访问 Linux 内核源代码的下载地址中就使用 xz 格式的压缩文件,其压缩文件大小比 gzip 压缩文件小得多以及7z格式还小,并且解压速度也很快。

3d0414806c421fc915f376e7abfaef9b.png

weiyigeek.top-The Linux Kernel Archives 图

语法参数:

# 语法
xz [OPTION]... [FILE]...
unxz [OPTION]... [FILE]..

# 参数
-z --compress  : 强制压缩
-d --decompress: 强制解压缩
-l --list     : 列出压缩文件内容
-k --keep      : 保留源文件
-f --force     : 强制压缩或解压文件,即使它已经存在了
-t --test      : 测试验证压缩文件
-c --stdout    : 将压缩或解压后的内容输出到标准输出
-T --thread     : 指定使用与处理器内核数量一样多的线程
-q --quiet     : 禁止所有警告信息
-[1..9]        : 压缩率默认值为6,9最高

使用示例

  • 示例1.压缩文件为.xz格式

# 压缩文件
xz test1.txt
xz -z test2.txt

# 保留源文件压缩
xz -k test1.txt

# 分别压缩当前目录下文件
xz -k *

# 查看压缩后的文件大小
ls -sh
  # total 38M
  #   8.0K test1.txt.xz  8.0K test2.txt.xz
  • 示例2.解压格式为xz的文件

# 解压
xz -d test1.txt.xz
# 保留源文件解压
xz -d -k test1.txt.xz
# 或者
unxz -k test2.txt.xz
  • 示例3.设置压缩率加入参数 -0 到 -9调节压缩率,如果不设置默认压缩等级是6,压缩等级越高压缩率越大,但压缩时间也越长。

xz -z -k -9 test1.txt
  # ls 
  # 6.5K Oct 11 16:57 test1.txt.xz
  • 示例4.查看压缩文件列表及其验证压缩文件

# 查看压缩文件列表
  xz -l test1.txt.xz
  Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
      1       1      6,564 B     37.1 MiB  0.000  CRC64   test1.txt.xz

# 验证压缩文件
xz -tv test1.txt.xz
  # test1.txt.xz (1/1)
  #   100 %          6,564 B / 37.1 MiB = 0.000
  • 示例5.使用tar命令打包目录或文件,然后使用xz压缩为.tar.xz

# 创建 tar.xz 文件, 
# 只要先 tar cvf xxx.tar xxx/ 这样创建xxx.tar文件先,然后使用 xz -z xxx.tar 来将 xxx.tar压缩成为 xxx.tar.xz
tar cvf text.tar text/
xz -z -k text.tar 

# 解压tar.xz文件:
# 先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包
xd -k -d text.tar.xz   #保存解压前的文件
tar xvf text.tar

0x02 打包解压缩命令


zip 命令 - 将文件压缩为.zip格式

unzip 命令 - 将.zip格式文件解压

描述:在 Windows 系统中,zip 是最常用的压缩应用,可以用来解压缩文件,或者对文件进行打包操作,在 Linux 中也有存在zip命令的文件经它压缩后会另外产生具有 .zip扩展名的压缩文件。

值得注意的是,zip 命令在压缩文件时,不会保留源文件的属性信息,解压后也不会自动创建目录,所以一般建议使用tar命令替代,不过在实际运维中由于部分项目是在Windows系统中,所以当上传到Linux服务器中时往往需要使用 zip 命令。

语法参数

# 语法
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
zip -h2

# 参数
-A:调整可执行的自动解压缩文件;
-b<工作目录>:指定暂时存放文件的目录;
-c:替每个被压缩的文件加上注释; 
-d:从压缩文件内删除指定的文件; 
-D:压缩文件内不建立目录名称;
-f:此参数的效果和指定“-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中; 
-F:尝试修复已损坏的压缩文件; 
-g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件; 
-h:在线帮助; 
-i<范本样式>:只压缩符合条件的文件; 
-j:只保存文件名称及其内容,而不存放任何目录名称;
-J:删除压缩文件前面不必要的数据; 
-k:使用MS-DOS兼容格式的文件名称; 
-l:压缩文件时,把LF字符置换成LF+CR字符; 
-ll:压缩文件时,把LF+cp字符置换成LF字符; 
-L:显示版权信息; 
-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中; 
-n<字尾字符串>:不压缩具有特定字尾字符串的文件; 
-o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同;
-q:不显示指令执行过程; 
-r:递归处理,将指定目录下的所有文件和子目录一并处理; 
-S:包含系统和隐藏文件; 
-t<日期时间>:把压缩文件的日期设成指定的日期; 
-T:检查备份文件内的每个文件是否正确无误; 
-u:更换较新的文件到压缩文件内; 
-v:显示指令执行过程或显示版本信息; 
-V:保存VMS操作系统的文件属性;
-w:在文件名称里假如版本编号,本参数仅在VMS操作系统下有效; 
-x<范本样式>:压缩时排除符合条件的文件;
-X:不保存额外的文件属性; 
-y:直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效;
-z:替压缩文件加上注释; 
-$:保存第一个被压缩文件所在磁盘的卷册名称; 
-[1-9]:压缩效率是一个介于1~9的数值。
# 语法
unzip [-Z] [-opts[modifiers][-g num]] file[.zip] [list] [-x xlist] [-d exdir]
unzip -hh

# 参数
-c:将解压缩的结果
-l:显示压缩文件内所包含的文件
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-t:检查压缩文件是否正确
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中
-v:执行是时显示详细的信息
-z:仅显示压缩文件的备注文字
-a:对文本文件进行必要的字符转换
-b:不要对文本文件进行字符转换
-C:压缩文件中的文件名称区分大小写
-j:不处理压缩文件中原有的目录路径
-L:将压缩文件中的全部文件名改为小写
-M:将输出结果送到more程序处理
-n:解压缩时不要覆盖原有的文件
-o:不必先询问用户,unzip执行后覆盖原有文件
-P:使用zip的密码选项
-q:执行时不显示任何信息
-s:将文件名中的空白字符转换为底线字符
-V:保留VMS的文件版本信息
-X:解压缩时同时回存文件原来的UID/GID
请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

示例演示

  • 示例1.压缩文件或者打包文件目录并压缩为.zip格式

# 压缩文件
zip /tmp/test1.txt.zip /tmp/test1.txt
  adding: tmp/test1.txt (deflated 99%)

# 压缩目录
zip -r /tmp/test_zip.zip test_zip/
  adding: test_zip/ (stored 0%)
  adding: test_zip/v1/ (stored 0%)
  adding: test_zip/v1/test2.txt (deflated 100%)
  adding: test_zip/v1/test1.txt (deflated 99%)

# 压缩文件包文件到zip压缩包,从标准输出中获取
cat /var/log/messages | zip -9 log.zip -
  • 示例2.把/home目录下面的abc文件夹和weiyigeek.txt都压缩成为weiyigeek.zip压缩文件

zip -r weiyigeek.zip abc/ weiyigeek.txt 

# 将目录下所有文件和文件夹打包为当前目录下的 html.zip:
zip -q -r html.zip /home/Blinux/html   # 将绝对地址的文件及文件夹进行压缩
zip -q -r html.zip *                   # 将相对路径目录的文件及文件夹进行压缩

  • 示例3.解压文件到指定目录

# 默认解压到当前目录  
unzip /tmp/test1.txt.zip

# 指定解压到 /tmp/unzip/ 目录,温馨提示:若目录不存在则会自行创建
unzip /tmp/test1.txt.zip -d /tmp/unzip/
  # Archive:  /tmp/test1.txt.zip
  #   inflating: /tmp/unzip/tmp/test1.txt

# 静默解压 zip 到指定目录
unzip -q -d 201906 weiyigeek.top.zip

# 将 zip 压缩包里面的所有文件解压到第一级目录 
unzip -j /tmp/test_zip.zip
  # Archive:  /tmp/test_zip.zip
  #   inflating: test2.txt
  #   inflating: test1.txt
  
# 匹配/home目录下面的abc12.zip、abc23.zip、abc34.zip并同时解压到/home目录里面
unzip abc\*.zip  

# 通过管道方式将解压的文件输出到源格式文件中
unzip -p /tmp/test1.txt.zip > /tmp/test1.txt
  • 示例4.查看压缩文件列表及其验证压缩文件

# 查看 zip 压缩文件列表
unzip -v test_zip.zip
  # Archive:  test_zip.zip
  #  Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
  # --------  ------  ------- ---- ---------- ----- --------  ----
  #        0  Stored        0   0% 10-11-2024 22:47 00000000  test_zip/
  #        0  Stored        0   0% 10-11-2024 22:48 00000000  test_zip/v1/
  # 39845888  Defl:N    38677 100% 10-11-2024 22:48 15dd759b  test_zip/v1/test2.txt
  # 38910000  Defl:N   259581  99% 10-11-2024 22:48 cf114264  test_zip/v1/test1.txt
  # --------          -------  ---                            -------
  # 78755888           298258 100%                            4 files
  
# 验证 zip 压缩文件是否完整
unzip -t test_zip.zip
  # Archive:  test_zip.zip
  #     testing: test_zip/                OK
  #     testing: test_zip/v1/             OK
  #     testing: test_zip/v1/test2.txt    OK
  #     testing: test_zip/v1/test1.txt    OK
  # No errors detected in compressed data of test_zip.zip.
  • 示例5.交互式或非交互式设置密码并使用密码解压文件

# 1.交互式设置压缩密码
zip -e -r test.zip *

# 2.交互式使用密码解压文件,并覆盖已存在的文件
unzip test.zip

# 3.非交互式设置密码并解压文件
zip -P weiyigeek.top -r test.zip *
unzip -P weiyigeek.top test.zip

b3e9bd61e32f8a1fe228bbd11af2c5f5.png

weiyigeek.top-交互式或非交互式设置压缩包密码图
请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

rar 命令 - 将文件压缩为.rar格式

unrar 命令 - 将.rar格式文件解压

描述:除了zip压缩以外在Windows系统中,rar也是一个常用的压缩文件格式,用于将一个或多个文件和目录打包成一个压缩文件,具有较好的压缩比和错误恢复功能。

通常在 Windows 系统中压缩的rar文件上传到Linux服务器中并解压时,就需要使用unrar命令。所以通常情况下我们一般会试探看看当前环境中是否已经有 unrar 或者 rar(可选) 命令,如果已经存在了,则直接使用即可,如果没有则可以通过下面的方式进行安装它们。

rar解压缩环境安装:

# unrar 安装最简单一把梭子搞定
yum install unrar -y

# rar 若包管理器无法安装需要下载源码进行编译安装,或者二进制安装。
sudo apt install rar
sudo yum install rar
# 32位:https://soft.itbulu.com/php/rarlinux-5.3.0.tar.gz
# 64位:https://soft.itbulu.com/php/rarlinux-x64-5.4.b2.tar.gz
# 二进制安装包64位: https://www.rarlab.com/rar/rarlinux-x64-6.0.0.tar.gz
  • 方式1.编译安装 rar

wget https://soft.itbulu.com/php/rarlinux-x64-5.4.b2.tar.gz
tar -zxvf rarlinux-x64-5.4.b2.tar.gz
cd rar && make
f788de9db075f9499cce244846500812.png
weiyigeek.top-rar编译安装
  • 方式2.二进制安装 rar

wget https://www.rarlab.com/rar/rarlinux-x64-6.0.0.tar.gz
tar -zxvf rarlinux-x64-6.0.0.tar.gz
cp -a ./rar/rar ./rar/unrar /usr/local/bin/
ls /usr/local/bin/
rar  unrar

温馨提示:在Linux系统中,通常只会用到unrar解压在windows或者其他平台上压缩的zip,不建议在linux上进行rar打包,因为其压缩率没有 tar.gz 或者 xz 高。


语法参数

  • rar 帮助

# Usage: 
rar <command> -<switch 1> -<switch N> <archive> <files...> <@listfiles...> <path_to_extract\>

# Parameters
<Commands>
  a             将文件或目录压缩
  c             添加压缩注释
  ch            改变存档属性
  cw            将存档注释写入文件
  d             Delete files from archive
  e             Extract files without archived paths
  f             Freshen files in archive
  i[par]=<str>  Find string in archives
  k             Lock archive
  l[t[a],b]     列出归档包中信息 [technical[all], bare]
  m[f]          Move to archive [files only]
  p             将文件打印到stdout
  r             修复压缩包文件
  rc            Reconstruct missing volumes
  rn            Rename archived files
  rr[N]         Add data recovery record
  rv[N]         Create recovery volumes
  s[name|-]     Convert archive to or from SFX
  t             Test archive files
  u             Update files in archive
  v[t[a],b]     Verbosely list archive contents [technical[all],bare]
  x             解压压缩文件到本地
  • unrar 帮助

# 用法
unrar <命令> -<开关 1> -<开关 N> <压缩文件> <文件...>  <@列表文件...> <解压路径\>

# 参数
<注释>
  e             解压压缩文件到当前目录
  l[t,b]        列出压缩文件[技术信息,简洁]
  p             打印文件到标准输出设备
  t             测试压缩文件
  v[t,b]        详细列出压缩文件[技术信息,简洁]
  x             用绝对路径解压文件

<开关>
  -             停止扫描
  ac            压缩或解压后清除存档属性
  ad            添加压缩文件名到目标路径
  ap<路径>      添加路径到压缩文件中
  av-           禁用用户身份校验
  c-            禁用注释显示
  cfg-          禁用读取配置
  cl            名称转换为小写
  cu            名称转换为大写
  dh            打开共享文件
  ep            从名称中排除路径
  ep3           扩展路径为包含盘符的完全路径
  f             刷新文件
  id[c,d,p,q]   禁止信息显示
  ierr          发送所有消息到标准错误设备
  inul          禁用所有消息
  ioff          完成一个操作后关闭 PC 电源
  kb            保留损坏的已解压文件
  n<文件>       仅包括指定文件
  n@            从标准输入设备读取要包括的文件名称
  n@<列表>      在指定列表文件包括文件
  o+            覆盖已存在文件
  o-            不覆盖已存在文件
  oc            设置 NTFS 压缩属性
  or            自动重命名文件
  ow            保存或恢复文件所有权和组
  [密码]        设置密码
  p-            不询问密码
  r             包含子目录
  ri<P>[:<S>]   设置优先级 (0-默认,1-最小..15-最大) 和休眠时间(毫秒)
  sl<大小>      处理小于指定大小的文件
  sm<大小>      处理大于指定大小的文件
  ta<日期>      添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS
  tb<日期>      添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
  tn<时间>      添加 <时间> 以后的文件
  to<时间>      添加 <时间> 以前的文件
  ts<m,c,a>[N]  保存或恢复文件时间(修改,创建,访问)
  u             更新文件
  v             列出所有卷
  ver[n]        文件版本控制
  vp            每卷之前暂停
  x<文件>       排除指定的文件
  x@            从标准输入设备读取要排除的文件名
  x@<列表>      排除指定列表文件中的文件
  y             假设对全部询问都回答是
请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

实例演示

  • 示例1.将文件或目录压缩为 RAR 格式

rar a test1.txt.rar test1.txt   # 文件压缩
rar a test.dir.rar v1/          # 目录打包压缩

# 或一次性压缩多个文件及目录:
rar a archive.rar file1.txt file2.txt /path/to/directory

b8fcd54cbba358ce2baaa2a7a68468d9.png

weiyigeek.top-压缩文件或目录图
  • 示例2.查看 RAR 压缩文件中的详细文件信息

# 方式1
rar l test.dir.rar

# 方式2
unrar v test.rar  
  # Archive: test.dir.rar
  # Details: RAR 5
  
  #  Attributes      Size     Date    Time   Name
  # ----------- ---------  ---------- -----  ----
  #  -rw-r--r--  39845888  2024-10-12 08:11  v1/test2.txt
  #  -rw-r--r--  38910000  2024-10-12 08:11  v1/test1.txt
  # ----------- ---------  ---------- -----  ----
  #              78755888                    2
  • 示例3.解压 RAR 文件到当前或者指定目录

# 方式1
# 解压到当前目录
rar x test1.txt.rar
# 解压到指定目录(原始目录文件)
rar x test1.txt.rar ./v2/
rar x test.dir.rar ./v3/

# 方式2
unrar x test1.txt.rar ./v4/
unrar x test.dor.rar ./v5/

f7673760dbfe1a4dd238de35a2fca19a.png

weiyigeek.top-解压文件到当前或者指定目录图
  • 示例4.解压到当前文件夹,但只是文件不包括目录,即将所有目录下的源文件移动的一级目录下。

unrar e test.dir.rar v6/
  # Extracting from test.dir.rar
  # Extracting  v6/test2.txt                                              OK
  # Extracting  v6/test1.txt                                              OK
  # All OK
  • 示例5.按完整路径且不覆盖已存在文件的方式解压指定的压缩档案到指定的目录下

# 即把 weiygeek.rar 文件解压到 /home/weiygeek 目录下
unrar x -o- -y weiygeek.rar /home/weiygeek/ 

# 若要覆盖已存在的文件,可以使用 -o+ 选项
unrar x -o+ -y weiygeek.rar /home/weiygeek/
f32f62c164d29291871604f1d3d2bbe0.png
weiyigeek.top-rar解压与压缩
  • 示例6.在创建压缩文件时设置密码,以及解压带密码的压缩文件

# 创建带密码的压缩文件
rar a -p test1.txt.pass.rar test1.txt
  # Enter password (will not be echoed): weiyigeek.top
  # Reenter password: weiyigeek.top
  # Evaluation copy. Please register.
  # Creating archive test1.txt.pass.rar
  # Adding    test1.txt                                                   OK
  # Done

# 查看带密码的压缩文件内容
rar l test1.txt.pass.rar
  # Archive: test1.txt.pass.rar
  # Details: RAR 5
  #  Attributes      Size     Date    Time   Name
  # ----------- ---------  ---------- -----  ----
  # *-rw-r--r--  38910000  2024-10-12 08:10  test1.txt
  # ----------- ---------  ---------- -----  ----
  #              38910000                    1
  
# 解压缩带密码的 RAR 文件时
rar x  test1.txt.pass.rar
  # Extracting from test1.txt.pass.rar
  # Enter password (will not be echoed) for test1.txt:
请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

tar 命令 - 将文件或目录打包并压缩

描述:GNU 软件 “tar” Tape ARchive)将许多文件一起保存到一个磁带或磁盘存档中,并且可以从存档中还原单个文件,也可以在档案中改变文件,或者向档案中加入新的文件,能过保留文件属性;最初被用来在磁带上创建档案,当下通常用于备份功能,针对单个文件或者目录进行打包压缩。

语法参数:

# Usage: 
tar [OPTION...] [FILE]...

# Parameters:
-z   使用 gzip 压缩格式
-j   使用 bzip2 压缩格式
-J   使用 xz 压缩格式
-c   创建新的 tar 备份文件
-v   显示操作过程
-f [指定备份文件]  指定备份文件,该参数必须放在最后
-C   更改要解压缩的目录
-O, --to-stdout 将备份文件还原输出到标准输出

-A   新增文件到 tar 文件中
-r   追加文件到 tar 文件中
-B   读取数据时设置区块大小
-b [区块数目]  设置区块大小,每块为 128 个字节(Bytes)
-C   更改要解压缩的目录
-d   显示文件差异
-F   解压缩时执行指定脚本文件
-i   忽略备份文件中 0 字节的空白区块,即 EOF
-k   保留原有文件不覆盖
-m   还原原有文件不覆盖其属性信息
-N [日期格式]  将比指定日期新的文件打包
-u   仅置换备份文件中最新的文件
-O   
-P   保留原始文件权限信息
-t   列出归档文件中的文件
-w   交互式询问
-W   确认文件是否被修改
--exclude=FILE  排除需要打包压缩的文件
--listed-incremental 指定了一个索引文件,用于记录哪些文件被备份了

实例演示:

  • 示例1.将文件或者目录打包压缩成 tar 格式,并查看解打包文件。

tar -cf archive.tar foo bar  # Create archive.tar from files foo and bar.
tar -tvf archive.tar         # List all files in archive.tar verbosely.
tar -xf archive.tar          # Extract all files from archive.tar.
  • 示例2.将文件全部打包成 tar包 或 tar.gz 或 tar.bz2 或者 tar.xz 包压缩文件

# 压缩文件为 tar 压缩格式
tar -cvf log.tar weiyigeek.log   
# 压缩文件为 gzip 压缩格式
tar -zcvf log.tar.gz weiyigeek.log
# 压缩文件为 bzip2 压缩格式
tar -jcvf log.tar.bz2 weiyigeek.log
# 压缩文件为 xz 压缩格式
tar -jcvf log.tar.xz weiyigeek.log


# 压缩目录
tar -zcvf context.tar.gz .
  • 示例3.将打包 tar 包 或 tar.gz 或 tar.bz2 包 压缩的文件进行解压

# 解包
tar -xvf test.tar.gz          

# 解压 tar.gz 或者 tar.tgz
tar -zxvf test.tar.gz      
tar -zxvf test.tar.tgz       

# 解压 tar.bz2
tar -jxvf test.tar.bz2  

# 指定压缩文件与解压目录
tar -zxvf test.tar.gz -C /tmp 

# 不指定压缩文件
tar -zx -C /tmp --strip-components=1
  # drwx------ root/root    0 2019-06-03 14:46 ./yum_save_tx.2019-05-29.11-23.JTFrPb.yumtx
  • 示例4.查看 tar 或 tar.gz 或 tar.bz2 包中的文件内容

# 查看tar包内容
tar -tf test.tar
# 查看tar.gz 或者 tar.tgz 包内容
tar -ztf test.tar.gz
tar -ztf test.tar.tgz

# 查看tar.bz2包内容
tar -jtf test.tar.bz2
  # test1.txt
  • 示例5.保存属性打包并且排序备份文件夹里面的文件或者目录

# 打包压缩时保持文件属性
tar -p -zcvf log31.tar.gz weiyigeek.top1.log weiyigeek.top2.log

# 打包压缩时排除 scf/service 目录
tar --exclude scf/service -zcvf scf.tar.gz scf/* 
# 或者在压缩时排除多个文件或目录:
tar --exclude='dir1' --exclude='dir2' -czvf archive.tar.gz scf/

# 打包压缩时排除目录中所有以.gif结尾的文件
tar --exclude=*.gif -zcvf weiygeek.top.tar.gz /home/public_html/
  • 示例6.查看压缩包内容,提取指定文件,查阅上述tar包内有哪些文件并只将tar内的部分文件解压出来

# 再压缩文件
tar -zcvf test_tar.gz ./test_tar

# 在查看压缩包内容
tar -ztvf test_tar.gz

# 再通过下面方式提取压缩包中指定文件到当下目录中 
tar -zxvf  test_tar.gz ./test_tar/v1/test1.txt
  # ./test_tar/v1/test1.txt
# 或者,通过如下方式提取压缩包中指定文件到指定目录
 tar -zxvf /tmp/test_tar.gz --strip-components=1 -C /backup ./test_tar/v1/test1.txt
  ./test_tar/v1/test1.txt

# 此外,在打包文件tar中,也可使用类似方式的命令,将tar包中的部分文件解压出来
# 例如,解压 archive.tar 中的file文件到 /tmp 目录中。
tar -xf archive.tar ./backup/file.txt > /tmp/file.txt
# 使用通配符解压文件,此命令会解压所有以 file 开头并以 txt 结尾的文件
tar -xf archive.tar -C /tmp/destination  ./backup/file*.txt

554a271b8c1957c9a47025655a3d4f87.png

weiyigeek.top-解压提取部分压缩包内文件图
  • 示例7.在文件夹当中,比某个日期新的文件才备份,通常用于备份数据库时使用。

tar -N "20160529" -zcvf time.tar.gz 
  # tar: 选项 --after-date: 将日期 ‘20160529’ 当作 2016-05-29 00:00:00
  # ./.Test-unix/
  # ./yum_save_tx.2019-05-29.11-23.JTFrPb.yumtx
  • 示例8.添加新的文件到tar归档备份中

# 添加两个文件到test.tar归档文件中
tar -cvf test.tar /root/.bash_history
tar -rvf test.tar yum_save_tx.2019-05-29.11-23.JTFrPb.yumtx
# 查看test.tar文件
tar -tvf test.tar
  -rw------- root/root      1258 2012-07-31 17:44 root/.bash_history
  -rw------- root/root     29154 2019-05-29 11:23 yum_save_tx.2019-05-29.11-23.JTFrPb.yumtx
  • 示例9.与 tee 命令联用下载tar压缩包时同时解压

wget -O- https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.110.tar.gz | tee linux-5.4.110.tar.gz | tar -xzv
  • 示例10.创建多卷压缩包,与解压多卷压缩包:

# 根据 filelist 文件中的列表创建一个多卷压缩包,每个卷的大小由 卷大小 指定。
tar -czvf archive.tar.gz --files-from=`ls` -v -卷大小

# 会解压一个多卷压缩包,你需要列出所有的卷文件。
tar -xzvf archive.tar.gz archive.tar.gz.1 ...
  • 示例11.使用 find 命令和 tar 命令结合,将查询到文件进行打包(非常实用)

find /app -type f -name '*.conf' -print | tar --create --files-from=- archive.tar
  • 示例12.创建一个完整或者增量备份,并恢复完整或者增量备份

# 首先,你需要创建一个完整备份,这将作为后续增量备份的基础。
tar -czvf backup_full.tar.gz -g snapshot /path/to/directory

# 然后,你可以创建增量备份。
tar -czvf backup_incremental.tar.gz --listed-incremental=snapshot.index /path/to/directory

# 快照内容
cat snapshot.index
  # GNU tar-1.32-2
  # 172870345385020979017287026469311723906476885229./test_tarDv1017287026469311723906476868116717./test_tar/v1Ytest1.txt

# 恢复增量备份时
# 你需要先恢复完整备份
tar -xzvf backup_full.tar.gz -C /path/to/destination

# 然后按顺序恢复所有的增量备份。
tar -xzvf backup_incremental.tar.gz -C /path/to/destination

0x03 总结说明

描述:前面两个章节我们介绍了Linux中常用的压缩和解压命令,以及打包命令,相信大家已经对其有了更深入的了解。那让我回到开篇提出的三个问题进行一一解答。

Linux 中常用的打包、压缩工具呢?

命令 常见压缩格式 介绍说明
compress .Z 最早的UNIX压缩工具,使用LZW算法,压缩率较低,已被gzip所替代。
gzip .gz 广泛用于Unix和类Unix系统,使用DEFLATE算法,压缩速度快,压缩率适中,特别适合压缩单个文件。
bzip2 .bz2 使用Burrows-Wheeler算法,压缩率高于gzip,但压缩速度较慢,适合压缩大文件或文件集合。
xz .xz.lzma 使用LZMA算法,压缩率比bzip2更高,但压缩和解压速度更慢, 适合需要极高压缩率的场景
zip .zip windows 中广泛使用的文件压缩和归档格式,支持多个文件和目录的压缩,可以使用密码加密文件,但压缩率不如gzip、bzip2和xz 。
rar .rar RAR是一种专利文件格式,使用专有的压缩算法,支持多卷压缩和文件分割,适合大文件,压缩率高,但需要特定的软件来解压。
tar .tar.tar.gz.tar.bz2.tar.tgz Linux 中常用打包工具用于将多个文件和目录合并成一个归档文件,可以与压缩工具结合使用,适合备份和归档文件集合,可以很容易地添加或提取单个文件。
请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

如何使用上述命令进行打包、压缩和解压呢?

# .Z 压缩&解压
compress -c filename > filename.Z
uncompress filename.Z

# .gz 压缩&解压
gzip -k filename 
gzip -c filename > filename.gz
gunzip filename.gz

# .bz2 压缩&解压
bzip2 -c filename > filename.bz2
bunzip2 filename.bz2

# .xz 压缩&解压
xz -z -k filename
xz -d filename.xz

# .zip 压缩&解压
zip filename.zip filename
zip -r dir.zip dir/
unzip filename.zip

# .rar 压缩&解压
rar a filename.rar filename
unrar x filename.rar

# .tar 打包、.tar.gz 、.tar.bz2 、.tar.tgz 压缩&解压
tar -cvf filename.tar filename
tar -czvf filename.tar.gz filename
tar -czvf filename.tar.tgz filename
tar -cjvf filename.tar.bz2 filename

tar -xvf filename.tar
tar -xzvf filename.tar.gz
tar -xzvf filename.tar.tgz 
tar -xjvf filename.tar.bz2

这里,在讲解上述工具时创建了两个测试文件 test1.txt(文本文件) 以及 test2.txt(二进制文件,使用dd生成)分别 38MB,并分别使用上述工具进行压缩、解压操作,这里看看其压缩后的文件大小差异。

# 打印每个文件的相关信息,以及分配大小,以块为单位
ls -lsh
# 原始文件
 38M(每个文件的分配大小,以块为单位) -rw-r--r-- 1 root root  38M Oct 11 10:46 test1.txt
 38M(每个文件的分配大小,以块为单位) -rw-r--r-- 1 root root  38M Oct 11 11:16 test2.txt

# compress 工具,由于 test2.txt.Z 是 zero 文件,所以大小为0
1.9M -rw-r--r-- 1 root root 1.9M Oct 11 11:30 test1.txt.Z
   0 -rw-r--r-- 1 root root    0 Oct 11 11:40 test2.txt.Z

# gzip 工具
224K -rw-r--r-- 1 root root 222K Oct 11 10:46 test1.txt.gz
 40K -rw-r--r-- 1 root root  38K Oct 11 11:16 test2.txt.gz

# bzip2 工具
 92K -rw-r--r-- 1 root root  89K Oct 11 16:33 test1.tar.bz2
4.0K -rw-r--r-- 1 root root   50 Oct 11 11:16 test2.txt.bz2

# xz 工具
8.0K -rw-r--r-- 1 root root 6.5K Oct 11 16:57 test1.txt.xz
8.0K -rw-r--r-- 1 root root 5.8K Oct 11 16:57 test2.txt.xz
# zip 工具
256K -rw-r--r-- 1 root root 254K Oct 11 22:51 test1.txt.zip
 40K -rw-r--r-- 1 root root  38K Oct 12 11:18 test2.txt.zip

# rar 工具
4.0K -rw-r--r-- 1 root root 3.4K Oct 12 08:31 test1.txt.rar
4.0K -rw-r--r-- 1 root root 2.2K Oct 12 08:31 test2.txt.rar

# tar 工具
# tar 打包文件,所以其大小会比原始文件大一些,但没有压缩
38M -rw-r--r-- 1 root root  38M Oct 12 10:48 test1.tar
39M -rw-r--r-- 1 root root  39M Oct 12 11:19 test2.tar
# tar -czf 等同于 gzip 压缩后效果
256K -rw-r--r-- 1 root root 254K Oct 12 10:48 test1.tar.gz
 40K -rw-r--r-- 1 root root  38K Oct 12 11:16 test2.tar.gz
# tar -jzf 等同于 bzip2 压缩后效果
 92K -rw-r--r-- 1 root root  89K Oct 11 10:46 test1.tar.bz2
4.0K -rw-r--r-- 1 root root  126 Oct 11 16:33 test2.tar.bz2
# tar -jzf 等同于 xz 压缩后效果
8.0K -rw-r--r-- 1 root root 6.5K Oct 12 15:10 test1.tar.xz
8.0K -rw-r--r-- 1 root root 5.9K Oct 12 15:09 test2.tar.xz

从上述结果可以看出,gzip、bzip2 和 xz 打包工具的压缩率都高于compress,其中 rar 工具与 xz 工具压缩率更高,bzip2 工具次之。

请多多支持作者,关注【全栈工程师修炼指南】公众号或者博客站点【https://blog.weiyigeek.top】进行持续学习,共同进步

我们该如何选择哪一款工具呢?

描述:其实,我们选择一款压缩工具,主要取决于文件大小、压缩比以及压缩/解压速度,而上述的每款工具都有各自的优缺点,我们可根据实际情况进行选择。

  • 速度与压缩率:如果需要快速压缩,选择gzip;如果需要更高的压缩率,选择bzip2或xz。

  • 单文件或多文件:如果只需要压缩单个文件,可以使用gzip或bzip2;如果需要打包多个文件或目录,使用tar。

  • 兼容性:如果需要在不同的系统间传输文件,gzip和zip是较好的选择,因为它们被广泛支持。

  • 安全性:如果需要加密压缩文件,可以考虑使用zip或rar。

  • 文件大小:对于非常大的文件或文件集合,可以考虑使用rar的多卷压缩功能。

  • 开源与专利:如果偏好开源软件,应避免使用rar,因为它是专利的。

综上所述:作者这里建议各位看友,使用tar工具进行打包压缩,以及后起之秀xz命令工具。

若文章写得不错,不要吝惜手中转发,点赞、在看,若有疑问的小伙伴,可在评论区留言你想法哟💬!

温馨提示:作者最近10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者账号[WeiyiGeeker],当前价格¥199,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

399585b9ddfcb25ff3aaf9e3961eb44a.png


如果此篇文章对你有帮助,请你将它转发给更多的人!

 学习推荐 往期文章

b3a646c766eb7bd5f46e39185e48ce15.gif