Linux打包压缩命令总结

486 阅读5分钟

Linux系统的压缩命令使用总结

Linux 下面的压缩命令主要有下面几个:

  • zip,对应压缩文件格式:.zip
  • gzip,对应压缩文件格式:.gz
  • bzip2,对应压缩文件格式:.bz2
  • xz,对应压缩文件格式:.xz

打包命令tar,对应压缩文件格式.tar。结合压缩命令一起使用会生成。、 .tar.gz(常用) 、.tar.bz2、.tar.xz。

补充gzip bzip2 xz 这几个命令都只能对但一个文件做压缩,不能压缩一个目录,压缩目录需要通过 tar 配合这几个压缩命令来处理,或者使用 zip 命令

zip 命令能提供的功能和 tar 非常类似,更详细的使用方法使用 tldr zip & tldr unzip 来查看

使用方法

gzip(最常见的)

# gzip 会就地压缩,也就是源文件会被压缩文件替代。-v是显示压缩率
gzip -v <file_name>
# 执行完上述命令,会在当前目录下生成 `file_name.gz` 文件。
# ----------------------------------------------------
# 解压缩会在当前目录下生成 <file_name> ,源压缩文件不在了
gzip -d <file_name>.gz
gunzip <file_name>.gz

bzip2 命令

默认情况下,bzip2 命令也是就地压缩,压缩后源文件将会被替代。使用方法和 gzip 基本一样,但是能提供更好的压缩率,当然,付出的代价就是压缩时间更长。

# bzip2  会就地压缩,也就是源文件会被压缩文件替代。-v是显示压缩率
bzip2  -v <file_name>
# 执行完上述命令,会在当前目录下生成 file_name.gz 文件。
# ----------------------------------------------------
# 解压缩会在当前目录下生成 <file_name> ,源压缩文件不在了
bzip2  -d <file_name>.bz2
bunzip2  <file_name>.bz2

xz命令

默认情况下,xz 命令也是就地压缩,原始文件将被覆盖。使用方法和前面提到的 gzip bzip2 类似,参数也几乎是一样的。

# xz  会就地压缩,也就是源文件会被压缩文件替代。-v是显示压缩率
xz  -v <file_name>
# 执行完上述命令,会在当前目录下生成 file_name.gz 文件。
# 这时可以使用 -l 参数,来查看压缩前后的文件对比信息:
xz -l <file_name>.xz 
# ----------------------------------------------------
# 解压缩会在当前目录下生成 <file_name> ,源压缩文件不在了没有xunz哦
xz -d <file_name>.xz

zip 命令

zip 命令和前面的 gzip bzip2 xz 不一样,它压缩后不会覆盖原有的文件。

# -v是显示压缩率
zip -v <compresed>.zip <file_name>
# 执行上述命令,将会在当前目录下新生成 <compresed>.zip 文件,原有的 <file_name> 将继续保留。
# ----------------------------------------------------
# 压缩多个文件
zip <compresed>.zip a.txt b.txt c.txt 
# 压缩目录
zip -r dir.zip <dir_name>
# 解压缩
unzip <compresed>.zip
  • 如果这个 .zip 文件是从多个单一文件通过 zip 命令压缩来的,那么执行 unzip 将会倾倒里面所有的文件到当前文件夹;
  • 如果这个 .zip 文件是从某个目录通过 zip -r 压缩来的,那么执行 unzip 将会在当前目录下生成一个 compresed 名字的目录,目录里面的所有文件不会被倾倒在当前目录。

对比 gzip、bzip2、xz无论时压缩还是解压缩都会将当前文件覆盖,而zip就不会,但是zip在Linux中使用的不是特别的多。

tar命令

tar 命令的参数可以说是 Linux 上面最复杂且最不容易记忆的几个之一了,在这里,主要将介绍 tar 命令最核心的参数。

先解释下 tar 的作用:tar 是打包命令,也就是将一系列文件,或者某个文件夹,打包成单一文件。如果配合前面介绍的 3 种压缩命令 gzip bzip2 xz (不包含 zip ),那么其可以完成 打包+压缩 的功能。

tar 执行完后,原有文件或者目录将保留。

下面先介绍 tar 最常用的参数:

  • -c : create 的意思,创建 tar 文件;
  • -t : 查看 tar 文件;
  • -x : 解打包或者解压缩;
  • -z : 用 gzip 来压缩;
  • -j : 用 bzip2 来压缩;
  • -J : 用 xz 来压缩;
  • -f : 后面接需要生成的文件名;
  • -v : verbose 的意思,显示打包压缩或者解打包解压缩过程中的详细信息;
  • -C : 后面接某个目录,将文件加压缩到该特定目录下(默认是解压缩在当前目录)
# 打包单个或多个文件:
tar -cv -f target.tar a.txt b.txt c.txt d.txt
# 打包单个目录或者多个目录:
tar -cv -f target.tar dir1 dir2 dir3
# 同时打包文件和目录:
tar -cv -f target.tar dir1 dir2 a.txt b.txt c.txt
# 打包同时用 gzip 压缩 常用重点 
tar -cvz -f target.tar.gz dir1 dir2 a.txt 
# 打包同时使用 bzip2 压缩
tar -cvj -f target.tar.bz dir1 dir2 a.txt
# 打包同时使用 xz 压缩
tar -cvJ -f target.tar.xz dir1 dir2 a.txt
# 查看
tar -tvz -f target.tar.gz
tar -tvJ -f target.tar.xz
# 解包和解压缩
tar -xvz -f target.tar.gz
# 上述命令将会在当前目录下解压缩,也就是 `target.tar.gz` 里面的文件会解压缩到当前目录下。
tar -xvz -f target.tar.gz -C ~/test
# 上述命令,会将 target.tar.gz 里面的所有文件解压到 ~/test 目录下。

压缩率和压缩时间测试

# 压缩率最低,压缩和解压缩时间最快压缩完之后28M左右
gzip -v default.log.2021-12-28-12.tar
default.log.2021-12-28-12.tar:   87.6% -- replaced with default.log.2021-12-28-12.tar.gz
​
# bzip2压缩之后有15m左右,20秒左右 解压缩有点慢
bzip2 -v default.log.2021-12-28-12.tar
default.log.2021-12-28-12.tar: 14.734:1,  0.543 bits/byte, 93.21% saved, 232161280 in, 15756642 out.
​
# 可以看到221.4M的一个日志压缩完之后只有6.6M左右,压缩时间最慢 但是解压缩比上面的快一点
xz -v default.log.2021-12-28-12.tar
default.log.2021-12-28-12.tar: 6593.6 KiB / 221.4 MiB = 0.029, 8.0 MiB/s, 0:27

以上的测试结果可能存在偏差,因为测试文件是一个日志文件。

从上述测试情况来看,压缩率和压缩时间成反比,具体使用三种的哪几种,需要结合自己服务器的情况以及磁盘情况来使用。