在 Linux 系统中, 用户可以使用多种压缩与解压缩工具, 如 tar
、gzip
、bzip2
、compress
、zip
、rar
及其对应的解压程序 gunzip
、bunzip2
、uncompress
、unzip
、unrar
。通过它们可以对不同格式的压缩文件进行操作, 如 .tar
、.gz
、.tar.gz
、.tgz
、.bz2
、.tar.bz2
、.Z
、.tar.Z
、.zip
、.rar
等。下面将逐一介绍这些程序的基本用法及常用命令, 以后应该不需要为下载了一个软件而不知道如何在 Linux 下解开而烦恼了。
tar 命令
tar
是 Linux 中最常用的打包程序, 通常用于将多个文件打包成一个 .tar
文件, 便于管理和分发
tar
使用破折号传递参数 (例如: tar -cf
而不是 tar cf
), 则 -f
选项必须放在最后, 因为它指定文件名
tar
命令的基本用法如下
# 将所有 .jpg 文件打包为 all.tar
# -c 创建新包
# -f 指定包文件名
tar -cf all.tar *.jpg
# 将所有 .gif 文件添加到 all.tar 中
# -r 向已有的 tar 包中添加文件
tar -rf all.tar *.gif
# 更新 all.tar 中的 logo.gif 文件
# -u 更新文件
tar -uf all.tar logo.gif
# 列出 all.tar 中的所有文件
# -t 列出 tar 包中的文件
tar -tf all.tar
# 解压 all.tar
# -x 解压文件
tar -xf all.tar
tar 调用压缩程序 (组合使用)
tar
可以在打包或解包的同时调用其它的压缩程序, 如 compress
、gzip
、bzip2
、xz
等。
compress
, gzip
, bzip2
, xz
与 tar
的组合适用于 Linux 系统打包压缩工作, 适合高效存储。
tar 格式: Linux/Unix 系统常用 .tar.Z
、.tar.gz
、.tar.bz2
、.tar.xz
格式, 解压时通常需要先使用对应的压缩工具解压, 再使用 tar
提取归档。
下面分别介绍如何调用这些压缩程序
tar 调用 compress
compress
是早期 Unix 系统中使用的一种压缩工具, 采用 LZW 算法 (Lempel-Ziv-Welch)。
.Z
文件是使用 compress
压缩的文件, 解压程序是 uncompress
。
tar
中使用 -Z
参数调用 compress
# 将所有 .jpg 文件打包为 all.tar, 并用 compress 压缩生成 all.tar.Z
tar -cZf all.tar.Z *.jpg
# 解压 all.tar.Z
tar -xZf all.tar.Z
tar 调用 gzip
gzip
(GNU zip) 是由 Jean-loup Gailly 和 Mark Adler 开发的, 基于 DEFLATE 算法。广泛用于 Linux 和 Unix 系统。
.gz
, .tgz
文件是使用 gzip
压缩的文件, 解压程序是 gunzip
。
tar
中使用 -z
参数调用 gzip
# 将所有 .jpg 文件打包为 all.tar, 并用 gzip 压缩生成 all.tar.gz
tar -czf all.tar.gz *.jpg
# 解压 all.tar.gz
tar -xzf all.tar.gz
tar 调用 bzip2
bzip2
是使用 Burrows-Wheeler (BWT+RLE+Huffman) 变换算法的压缩工具, 专为压缩率优化而设计。
.bz2
文件是使用 bzip2
压缩的文件, 解压程序是 bunzip2
。
tar
中使用 -j
参数调用 bzip2
# 将所有 .jpg 文件打包为 all.tar, 并用 bzip2 压缩生成 all.tar.bz2
tar -cjf all.tar.bz2 *.jpg
# 解压 all.tar.bz2
tar -xjf all.tar.bz2
tar 调用 xz
xz
是一种基于 LZMA2 算法的压缩工具, 提供更高的压缩比和更高的压缩效率。
.xz
文件是使用 xz
压缩的文件, 解压程序是 unxz
。
tar
中使用 -J
参数调用 xz
# 将所有 .jpg 文件打包为 all.tar, 并用 xz 压缩生成 all.tar.xz
tar -cJf all.tar.xz *.jpg
# 解压 all.tar.xz
tar -xJf all.tar.xz
一体化压缩工具
在 Windows 中常见的压缩格式, zip
, 7z
, rar
这些工具可以同时进行打包和压缩, 将多个文件压缩到一个文件中, 因此生成的文件只需一个步骤即可完成归档和压缩。
zip
、7z
和 rar
通常只生成 .zip
、.7z
、.rar
文件, 跨平台兼容性较好。
zip
Linux 中 zip
和 unzip
程序分别用于压缩和解压 .zip
格式的文件
# 将所有 .jpg 文件压缩成 all.zip
zip all.zip *.jpg
# 解压 all.zip
unzip all.zip
7z
Linux 中处理 .7z
文件需要安装 7-Zip for Linux: console version, 下载地址: 7-Zip for Linux
# 下载并解压
wget https://www.7-zip.org/a/7z2408-linux-x64.tar.xz
mkdir 7z
tar -xJpf 7z2107-linux-x64.tar.xz -C 7z
cp 7z/7zzs /usr/local/bin/7z
安装完成后, 可以使用 7z
命令。
# 将所有 .jpg 文件压缩成 all.7z
7z a all.7z *.jpg
# 解压 all.7z
7z e all.7z
rar
Linux 中处理 .rar
文件需要安装 RAR for Linux (Command line only), 下载地址: WinRAR and RAR archiver downloads
# 下载并解压
tar -xzpvf rarlinux-3.2.0.tar.gz
cd rar
# 安装
make
安装完成后, 可以使用 rar
和 unrar
命令。
# 将所有 .jpg 文件压缩成 all.rar
rar a all.rar *.jpg
# 解压 all.rar
unrar e all.rar
常见压缩文件的解压命令总结
压缩文件格式 | 解压命令 |
---|---|
.Z |
uncompress file.Z |
.gz |
gzip -d file.gz 或 gunzip file.gz |
.bz2 |
bzip2 -d file.bz2 或 bunzip2 file.bz2 |
.xz |
xz -d file.gz |
.tar |
tar -xf file.tar |
.tar.Z |
tar -xZf file.tar.Z |
.tar.gz 或 .tgz |
tar -xzf file.tar.gz 或 tar -xzf file.tgz |
.tar.bz2 |
tar -xjf file.tar.bz2 |
.tar.xz |
tar -xJf file.tar.xz |
.zip |
unzip file.zip |
.7z |
7z e all.7z |
.rar |
unrar e file.rar |
综合比较
特性 | compress | gzip | bzip2 | xz | 7z | rar |
---|---|---|---|---|---|---|
压缩算法 | LZW | DEFLATE | BWT+RLE+Huffman | LZMA2 | LZMA2 | RAR |
文件格式支持 | .Z |
.gz |
.bz2 |
.xz |
.7z |
.rar |
压缩比 | 较低 | 中等 | 高 | 非常高 | 非常高 | 高 |
压缩速度 | 快 | 很快 | 较慢 | 慢 | 较慢 | 慢 |
解压速度 | 快 | 很快 | 较慢 | 慢 | 快 | 较快 |
资源使用 | 低 | 低 | 中等 | 高 | 高 | 较高 |
大文件支持 | 否 | 是 | 是 | 是 | 是 | 是 |
多线程支持 | 否 | 否 | 否 | 是 | 是 | 否 |
例子
将整个 /home/www/images
目录下的文件全部打包为 /home/www/images.tar
在参数 f
后面的压缩文件名是自己取的, 习惯上用 .tar, 如果加 z
参数, 则以 .tar.gz
或 .tgz
来代表 gzip
压缩过的 tar 文件
# 仅打包, 不压缩
tar -cvf /home/www/images.tar /home/www/images
# 打包后, 以 gzip 压缩
tar -zcvf /home/www/images.tar.gz /home/www/images
将 .tgz
文件解压到指定目录
tar -zxvf test.tgz -C 指定目录
# 比如将 /source/kernel.tgz 解压到 /source/linux-2.6.29 目录
tar -zxvf /source/kernel.tgz -C /source/linux-2.6.29
原文
Create a tar.xz in one command
Linux File Compression: gzip, bzip2, and xz Unveiled
Linux解压文件到指定目录