Linux bzip2/gzip/zip/tar 命令详解

时间:2022-12-10 14:19:49

Changelog

版本 时间 修订章节
1.0 2018-3-24 添加了关于xz的内容

Linux文件压缩工具

工具 文件扩展名 描述
bzip2 .bz2 采用 Burrows-Wheeler 块排序文本压缩算法和霍夫曼编码
gzip .gz GNU压缩工具,用 Lempel-Ziv-Welch 编码
zip .zip Windows上 PKZIP 工具的 Unix 实现
xz .xz 使用 LZMA/LZMA2 压缩算法

bzip2工具

压缩文件

格式:

bzip2 文件名(不能是目录)

举例:

bzip2 pic.tar

这时候,你会发现原始文件pic.tar不见了,被替换成了pic.tar.bz2;
如果bzip2后面跟多个文件(比如 命令bzip2 1.txt 2.txt 3.txt),那么不会打包压缩,而是把每个文件分别压缩,*.txt会变成*.txt.bz2,不建议这样使用。

如果要保留原始文件,可以加-k选项。

解压缩

格式:

bunzip2 xxx.bz2

或者

bzip2 -d xxx.bz2

举例:

bunzip2 pic.tar.bz2

这时候,你会发现原始文件pic.tar.bz2不见了,被替换成了pic.tar

如果要保留原始文件,可以加-k选项。

gzip工具

bzip2用法基本相同。

压缩文件

gzip 文件名(不能是目录)

这时候,你会发现原始文件xxx不见了,被替换成了xxx.gz;
如果gzip后面跟多个文件,那么会把每个文件分别压缩,不建议这样使用。

如果要保留原始文件,可以加-k选项。

解压缩

gunzip xxx.gz

或者

gzip -d xxx.gz

如果要保留原始文件,可以加-k选项。

zip工具

与上面两个工具不同的是,zip工具可以处理目录。

压缩

zip命令常用选项如下:

选项 说明
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-m 将文件压缩后删除原始文件,即把文件移到压缩文件中。
-u 更换较新的文件到压缩文件内。
-v 显示指令的执行过程或版本信息。

解压缩

unzip命令常用选项如下:

选项 说明
-l 显示压缩文件内所包含的文件(仅显示,并不解压)。
-v 显示指令的执行过程或版本信息。
-t 检查压缩文件是否正确。
-j 不处理压缩文件中原有的目录路径。
-d <目录> 解压文件到指定目录。

举例

  • 我想把一个文件abc.txt和一个目录dir压缩成为aaa.zip:
zip -r aaa.zip abc.txt dir
  • 我下载了一个aaa.zip文件,想解压:
unzip aaa.zip
  • 我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:
 unzip -l large.zip

 unzip -v large.zip
  • 我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否完整:
unzip -t large.zip
  • 我用-l选项发现music.zip文件里面有很多目录和子目录,并且子目录中全是.mp3文件。我想把这些文件都解压到当前目录下,而不创建原有目录结构。
 unzip -j music.zip
  • 我想把aaa.zip解压到指定目录/a/b/c/下面(目录c可以有也可以没有,如果没有会自动创建,但是/a/b/必须要有)
unzip -d /a/b/c/ aaa.zip

xz工具

根据*的解释, xz 是一个使用 LZMA 压缩算法的无损数据压缩文件格式。和gzipbzip2一样,同样支持多文件压缩,但是约定不能将多于一个的目标文件压缩进同一个档案文件。

压缩

xz 文件名(不能是目录)

这时候,你会发现原始文件xxx不见了,被替换成了xxx.xz;
如果xz后面跟多个文件,那么会把每个文件分别压缩,不建议这样使用。

如果要保留原始文件,可以加-k选项。

解压缩

xz -d xxx.xz

如果要保留原始文件,可以加-k选项。

tar命令

tar命令是用来归档(把多个文件归档成一个文件)与提取的,本质上没有压缩与解压缩的功能。

命令格式

tar function [options] obj1 obj2 ...

function 参数定义了tar命令的功能,必须有一个。常用的参数如下表:

功能 描述
-c 创建一个新的归档文件
-x 从已有归档文件中提取文件
-t 列出已有归档文件的内容
-r 追加文件到已有归档文件末尾

除了指定一个功能外,还可以指定一个或多个选项。常用的选项如下表:

选项 描述
-f file 在f后要立即接归档文件名(必须要这个参数)
-v 在处理时显示文件
-C dir 切换到指定目录
-j 将输出重定向给bzip2命令来压缩或解压,此时档案名最好为*.tar.bz2
-z 将输出重定向给gzip命令来压缩或解压,此时档案名最好为*.tar.gz

把目录或文件归档

举例:
tree命令查看当前目录结构如下。

.
├── pic1
│ ├── Chrysanthemum.jpg
│ ├── Desert.jpg
│ ├── Hydrangeas.jpg
│ └── Jellyfish.jpg
└── pic2
├── Koala.jpg
├── Lighthouse.jpg
├── Penguins.jpg
└── Tulips.jpg

tar -cf pic.tar pic1/ pic2/

上面的命令把目录pic1和目录pic2的内容归档到文件pic.tar中。
这时候在WIN7下查看如下图:

Linux bzip2/gzip/zip/tar 命令详解

注意,这里的pic.tar只是归档文件,并没有压缩,其大小约等于目录pic1之大小加上目录pic2之大小。

上述结果也可以用命令

tar  -cf pic.tar *

把当前目录下所有内容归档到pic.tar

仅列出档案内容

如果只想列出归档文件pic.tar的内容,并不提取文件,可以用命令

tar -tf pic.tar

返回结果是:

pic1/
pic1/Chrysanthemum.jpg
pic1/Desert.jpg
pic1/Hydrangeas.jpg
pic1/Jellyfish.jpg
pic2/
pic2/Koala.jpg
pic2/Lighthouse.jpg
pic2/Penguins.jpg
pic2/Tulips.jpg

提取档案内容

假设当前目录下仅有pic.tar
提取文件可以用命令

tar -xf pic.tar

此时用tree命令查看

.
├── pic1
│ ├── Chrysanthemum.jpg
│ ├── Desert.jpg
│ ├── Hydrangeas.jpg
│ └── Jellyfish.jpg
├── pic2
│ ├── Koala.jpg
│ ├── Lighthouse.jpg
│ ├── Penguins.jpg
│ └── Tulips.jpg
└── pic.tar

注意:不管是归档还是提取,原始文件都会被保留。

tar命令与(解)压缩

上文已经说过,bzip2gzipxz工具都不能处理目录,只能处理文件。如果想对整个目录进行压缩,可以先用tar归档,再用bzip2gzip或者xz处理。为了方便,这两个过程可以合二为一。

于是tar命令就有了如下的选项:

选项 说明
-j 将输出重定向给bzip2命令来压缩或解压,此时档案名最好为*.tar.bz2
-z 将输出重定向给gzip命令来压缩或解压,此时档案名最好为*.tar.gz
-J 将输出重定向给xz命令来压缩或解压,此时档案名最好为*.tar.xz

打包并压缩

  • 把目录dir1和dir2打包成all.tar后,并用bzip2压缩,最后生成一个压缩包,命名为all.tar.bz2
tar -cjf all.tar.bz2 dir1 dir2
  • 把当前目录下的所有.jpg文件打包成jpg.tar后,并用gzip压缩,最后生成一个压缩包,命名为jpg.tar.gz
tar –czf jpg.tar.gz *.jpg 

仅查看

在不解压的情况下查看压缩包的内容

tar -tf aaa.tar.gz   

解压并提取

  • 把aaa.tar.gz解压到当前目录
tar -xzf aaa.tar.gz 
  • 把aaa.tar.bz2解压到目录dir(dir必须存在)
tar -xjf aaa.tar.bz2 -C dir

简单总结

文件类型 归档或压缩 提取或解压
*.bz2 bzip2 bzip2 -d
*.gz gzip gzip -d
*.xz xz -z xz -d
*.zip zip -r unzip
*.tar tar -cf tar -xf
*.tar.bz2 tar -cjf tar -xjf
*.tar.gz tar -czf tar -xzf
*.tar.xz tar -cJf tar -xJf

【参考资料】
https://www.cnblogs.com/chinareny2k/archive/2010/01/05/1639468.html
http://www.cnblogs.com/jyaray/archive/2011/04/30/2033362.html
https://zh.wikipedia.org/wiki/Xz
https://teddysun.com/294.html