linux-压缩和归档

压缩

压缩比:λ=oldSizenewSizeoldSize\lambda = \frac{oldSize - newSize}{ oldSize}

文件准备

echo "godme" > godme.file
echo "judas" > judas.file

gzip

  • 压缩文件
gzip godme.file
gzip judas.file

linux-压缩和归档

  • 默认后缀.gz
  • 自动命名
  • 自动删除源文件
  • 查看信息
zcat godme.file.gz
zcat judas.file.gz

linux-压缩和归档

通过这点应该理解一件事情,gzip压缩的是文件内容,而不是文件本身。

查看时没有相关文件信息,而是内容的输出。

  • 解压文件
gunzip godme.file.gz
gzip -d judas.file.gz

linux-压缩和归档

可以看到,解压方式有两种:gunzipgzip -d。后面跟上压缩文件即可。

为了验证我们之前只是压缩文件内容的说法,做一个小实验
linux-压缩和归档

可以看到,解压文件的文件名,仅仅是把.gz后缀去掉了。

也就是说,gzip只是单纯的文件内容压缩,关于文件名信息并没有进行保存和管理。

所以gzip仅仅是针对单个文件的压缩。

  • 小结

特别提示:-nnN+n\in N^+,可以指定压缩比。

gzip一般用于老平台。

command options description
gzip 压缩文件内容
- -d 解压文件内容
- -n 指定压缩比例
zcat 查看压缩文件内容
gunzip 解压文件
  1. 后缀名.gz
  2. 自动添加后缀,不用指定压缩文件名称
  3. 不保存源文件
  4. 针对单个文件内容压缩,不管理文件名

bzip2

压缩效果高于gzip

小文件压缩效果差,可能会更大,大文件压缩效果更佳。

  • 压缩文件
bzip2 godme.txt
bzip2 -k judas.file

linux-压缩和归档

  • -k保持keep源文件,不删除。

  • 单文件,不用指定压缩文件名。

  • 默认后缀.bz2

  • 查看信息
bzcat godme.txt.bz2
bzcat judas.file.bz2

linux-压缩和归档

同样是文件内容

  • 解压文件
bzip2 -d godme.txt.bz2
bunzip2 judas.file.bz2

linux-压缩和归档

文件名试验
linux-压缩和归档

不管文件名,只是去后缀名实现文件内容解压。

  • 小结
command options description
bzip2 压缩文件内容
-k 保留原文件
-d 解压压缩文件
-n 指定压缩比例
bzcat 查看压缩文件内容
bunzip2 解压压缩文件
  1. 后缀名.bz2
  2. 自动命名,无需指定
  3. 针对内容,压缩单个文件

xz

  • 压缩文件
xz godme.txt
xz -k judas.txt

linux-压缩和归档

  • 后缀名.xz

  • -k保留原文件

  • 自动后缀命名

  • 查看内容
xzcat godme.txt.xz

linux-压缩和归档

  • 解压文件
xz -d godme.txt.xz
unxz judas.txt.xz

linux-压缩和归档

文件名测试
linux-压缩和归档

  • 小结
command options description
xz 压缩文件内容
-k 保留原文件
-d 解压压缩文件
-n 指定压缩比
xzcat 查看压缩内容
unxz 解压压缩文件

unxz看起来正常了,但是

神经病多余正常人,正常人就是神经病。

这种感觉。

  1. 后缀.xz
  2. 自动后缀命名
  3. 单文件压缩

特殊

zip

  • 压缩文件
zip all.zip godme.godme judas.file

linux-压缩和归档

  • 需指定压缩文件名
  • 默认不删除原文件
  • 可以压缩多个文件

命令后第一个作为压缩文件名,后续属于压缩范围

  • 查看内容
zipnote all.zip

linux-压缩和归档

含有文件名称信息

  • 解压文件
unzip all.zip

linux-压缩和归档

  • 小结
command description
zip 压缩多个文件
zipnote 查看压缩信息
unzip 解压压缩文件
  1. 需手动指定压缩文件名
  2. 后缀.zip
  3. 可压缩多个文件
  4. 第一个参数为压缩文件名,后续为压缩文件
  5. 默认保留原文件

zip是很多平台默认自带的压缩工具。

但是压缩比不高,压缩效率并不太好。

关于怎么可以压缩成多个文件,还有一层隐藏。

归档

压缩只针对一个文件,归档呢?

多个文件合而为一,两者配合天衣无缝。

tar

首先说一下命令选项

options description
-f 指定文件名
-c 创建归档
-x 展开归档
-t 查看归档
-z gzip格式
-j bzip2格式
-J xz格式
-v 详细信息

你可以看到-f,归档文件都必须指定文件名,不论创建还是其他 操作,相当于是强制选项了。

接下来操作一下。

  • 归档
tar -cf all.tar godme.txt judas.file

linux-压缩和归档

创建时,必须-c,指定文件名也必须-f,由于-f后必须跟上文件名参数,所以每次都是最后一个。

默认保留原文件。

  • 查看
tar -tf all.tar

linux-压缩和归档

打印文件名称信息,不显示内容。

  • 目录
    linux-压缩和归档

可针对目录直接归档

  • 解压
tar -xf all.tar

linux-压缩和归档

自动解压还原目录

  • 小结
  1. 后缀.tar
  2. 必须指定名称
  3. 可针对目录归档

压缩命令大多只针对单文件进行压缩,tar可针对目录完成归档。

常用

压缩命令只压缩内容,无法管理目录结构。

配合归档,先把多个文件合二为一,然后针对单独的归档文件进行压缩。

这就是符合我们使用的模式

gzip
xz
bzip2
a.file
b.file
n.file
all.tar
all.tar.gz
all.tar.xz
all.tar.bz2

tar其中的格式选项对应的就是压缩方式,展开时也会自动调用

option type
-z gzip
-j bz2
-J xz

gzip

  • 压缩(-zcf)
    linux-压缩和归档

  • 查看(-ztf)
    linux-压缩和归档

  • 解压(-zxf)
    linux-压缩和归档

bz2

效果不变,自己尝试

  • 压缩(-jcf)
  • 查看(-jtf)
  • 解压(-jxf)

xz

自己尝试

  • 压缩(-Jcf)
  • 查看(-Jtf)
  • 解压(-Jxf)

自动识别

其实当我们归档以后,就有了后缀名了,我们可以不必去指定压缩格式,它可以自动识别的。

options short
-ztf -tf
-zxf -xf
-jtf -tf
-jxf -xf
-Jtf -tf
-Jxf -xf

似曾相识

关于压缩,常见的是这种把tar -zxvf XXX.tar.gz

然后出来一大堆,感觉高大上,但是你可以简单分析一下。

  • -v显示了详细信息看起来比较多
  • -z指定了格式
  • -x解压
  • -f指定文件

结果zv完全没必要,结果就是tar -xf XXX.tar.gz

有啥高大上的,别被骗了,不用自己吓自己,慢慢来,总能学会。

如是安慰自己。