Linux bzip2/gzip/zip/tar 命令详解
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:
- 我下载了一个aaa.zip文件,想解压:
- 我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:
或
unzip -v large.zip- 我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否完整:
- 我用-l选项发现music.zip文件里面有很多目录和子目录,并且子目录中全是.mp3文件。我想把这些文件都解压到当前目录下,而不创建原有目录结构。
- 我想把aaa.zip解压到指定目录/a/b/c/下面(目录c可以有也可以没有,如果没有会自动创建,但是/a/b/必须要有)
xz工具
根据维基百科的解释, xz 是一个使用 LZMA 压缩算法的无损数据压缩文件格式。和gzip与bzip2一样,同样支持多文件压缩,但是约定不能将多于一个的目标文件压缩进同一个档案文件。
压缩
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
上面的命令把目录pic1和目录pic2的内容归档到文件pic.tar中。
这时候在WIN7下查看如下图:
注意,这里的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
提取文件可以用命令
此时用tree命令查看
.
├── pic1
│ ├── Chrysanthemum.jpg
│ ├── Desert.jpg
│ ├── Hydrangeas.jpg
│ └── Jellyfish.jpg
├── pic2
│ ├── Koala.jpg
│ ├── Lighthouse.jpg
│ ├── Penguins.jpg
│ └── Tulips.jpg
└── pic.tar
注意:不管是归档还是提取,原始文件都会被保留。
tar命令与(解)压缩
上文已经说过,bzip2、gzip和xz工具都不能处理目录,只能处理文件。如果想对整个目录进行压缩,可以先用tar归档,再用bzip2、gzip或者xz处理。为了方便,这两个过程可以合二为一。
于是tar命令就有了如下的选项:
| -j | 将输出重定向给bzip2命令来压缩或解压,此时档案名最好为*.tar.bz2 |
| -z | 将输出重定向给gzip命令来压缩或解压,此时档案名最好为*.tar.gz |
| -J | 将输出重定向给xz命令来压缩或解压,此时档案名最好为*.tar.xz |
打包并压缩
- 把目录dir1和dir2打包成all.tar后,并用bzip2压缩,最后生成一个压缩包,命名为all.tar.bz2
- 把当前目录下的所有.jpg文件打包成jpg.tar后,并用gzip压缩,最后生成一个压缩包,命名为jpg.tar.gz
仅查看
在不解压的情况下查看压缩包的内容
tar -tf aaa.tar.gz解压并提取
- 把aaa.tar.gz解压到当前目录
- 把aaa.tar.bz2解压到目录dir(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
总结
以上是生活随笔为你收集整理的Linux bzip2/gzip/zip/tar 命令详解的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 烧写文件系统——韦东山嵌入式Linux学
- 下一篇: Linux 0.00 的编译和运行