Linux下常见的压缩指令
压缩是将文件或数据转换为更小的表示形式的过程。它通过使用各种算法和技术,去除文件中的冗余信息,以减小文件的大小。在 Linux系统中,压缩文件是一种常见的操作,它可以减小文件大小来节省存储空间,还可以减少网络传输数据量来节省带宽。在本文中,我将介绍 Linux 下常见的压缩类型和相应的指令。
常见的压缩类型和指令
在 Linux 系统中,存在多种常见的压缩类型,每种类型都有对应的扩展名和相应的压缩指令。下表列出了这些常见的压缩类型及其对应的指令:
扩展名 | 指令 |
---|---|
*.Z |
compress 压缩的文件(已被 gzip 取代) |
*.gz |
gzip 压缩的文件 |
*.bz2 |
bzip2 压缩的文件 |
*.xz |
xz 压缩的文件 |
*.tar , *tar.gz (*.tgz ), *.tar.bz2 , *.tar.xz |
tar 打包的数据文件,分别经过:未压缩,gzip 压缩,bzip2 压缩,xz 压缩 |
这些压缩类型和指令使用了不同的压缩算法,可以根据需求选择适合的压缩类型和相应的指令来进行文件的压缩和解压缩操作。
其中,compress
、gzip
、bzip2
和 xz
是一系列压缩指令的迭代过程,不断改进了压缩算法和性能。最早出现的是 compress
指令,它使用 LZ77 算法对文件进行压缩,生成的压缩文件以 .Z
作为扩展名。然而,随着时间的推移,compress
逐渐被 gzip
取代。gzip
指令采用 DEFLATE 算法,它不仅提供了更好的压缩比,还具备较快的压缩和解压缩速度。尽管 gzip
在性能和压缩比方面有所改进,但 bzip2
指令随后出现,引入了 Burrows-Wheeler 变换和霍夫曼编码作为压缩算法。bzip2
提供了更高的压缩比,但代价是较长的压缩时间。生成的压缩文件以 .bz2
作为扩展名。然而,为了进一步提高压缩比,xz
指令随后问世。xz
使用 LZMA 和 LZMA2 算法,通常比 gzip
和 bzip2
提供更高的压缩比,并且在压缩速度方面相对较快。压缩后的文件扩展名为 .xz
。
tar
是一种文件打包指令,可以将多个文件和目录打包成单个文件。然而,在后续的 GNU
计划中 tar
指令已经与压缩功能结合在一起(压缩指令如 gzip
、bzip2
和 xz
),以创建更复杂的压缩和归档操作。使用 tar
指令打包文件和目录时,生成的归档文件没有进行压缩,仅用于打包目的。但结合不同的压缩指令,可以创建各种压缩格式的归档文件。例如,使用 gzip
压缩的 tar
归档文件具有 .tar.gz
扩展名,它通过在 tar
打包的基础上应用 gzip
进行压缩。同样地,使用 bzip2
压缩的 tar
归档文件以 .tar.bz2
扩展名结束,通过在 tar
打包的基础上使用 bzip2
进行压缩。而使用 xz
压缩的 tar
归档文件则以 .tar.xz
作为扩展名,它在 tar
打包后应用 xz
进行压缩。
gzip/bzip2/xz 系列指令
在文件压缩和解压缩的过程中,我们常用到一系列迭代的压缩指令,其中包括了 gzip
、bzip2
和 xz
。虽然它们有着相似的用法,但每个指令都有其特点和用途。下面我们将通过比较它们的基本用法来了解它们以及它们之间的区别。
基本用法
- 当我们使用压缩指令(
gzip/bzip2/xz
)进行压缩时,它们通常针对单个文件进行操作,而不是整个目录。因此,压缩的内容是文件而不是目录。 - 如果压缩指令带有选项
-k
(例如gzip -k file.txt
)或使用重定向符号>
(例如gzip file.txt -c > custom.gz
),则不会删除源文件(默认会删除)。 - 如果想做到没有解压缩就可以查看压缩文件的内部文件,我们可以使用类似于
cat
、more
、less
或grep
的命令来浏览压缩文件的内容。这些命令会直接读取压缩文件,并在终端上显示其内容,而无需解压缩整个文件。对于源文件本身,压缩操作对其没有直接影响。它的创建时间以及权限等属性不会受到压缩操作的改变。
特点和适用场景
gzip
是最常见的压缩工具之一。它以其快速和高效的压缩和解压缩能力而闻名。gzip
适用于大多数压缩和解压缩任务。它的压缩速度相对较快,解压速度更快,特别适合处理大型文件。另外,gzip
具有广泛的支持和普及度,几乎所有现代浏览器和服务器都支持gzip
压缩。这使得在通过HTTP或其他网络协议传输文件时,gzip
成为首选工具。通过启用服务器端的gzip
压缩,可以在传输前对文件进行压缩,从而减小文件大小,提高传输速度,并降低网络带宽的消耗。bzip2
以其更高的压缩比而受到青睐。当需要更高的压缩率时,bzip2
是一个好的选择。它能够将文件压缩到更小的大小,但与此同时,压缩和解压缩的速度相对较慢。因此,对于处理大型文件或对文件大小有严格要求的场景,bzip2
可能不太适合。但如果可以容忍较长的压缩和解压缩时间,那么bzip2
是一个不错的选择。例如,当我们需要通过电子邮件或其他带宽受限的网络通道传输文件时,bzip2
可以将文件压缩到更小的尺寸,减少传输时间和带宽消耗。另外,对于存储容量有限的环境,bzip2
也可以帮助节省磁盘空间。- 与
gzip
和bzip2
相比,xz
是一个综合了两者优点的工具。它具有更高的压缩比,并且在压缩速度方面相对较快。然而,与gzip
相比,xz
的解压速度较慢。
下图展示了不同压缩指令(对文本进行压缩)的压缩耗时和压缩程度:
tar 指令
上面谈到的 gzip/bzip2/xz
仅针对单个文件来进行压缩,虽然这些指令也能够针对目录来进行压缩,但对目录的压缩是指将目录内的所有文件分别进行压缩的动作。而不像在 Windows 的系统,可以使用类似 WinRAR 这一类的压缩软件来将好多数据包成一个文件的方式。这种将多个文件或目录打包成一个大文件的指令功能,我们可以称为打包指令。在 Linux 中可以使用 tar 指令将多个目录或文件打包成一个大文件,同时还可以通过 gzip/bzip2/xz
将该文件同时进行压缩。
基本用法
- 不像其他参数的顺序可以随意更换,参数
f
必须放在最后或者单独列出,否则会导致报错警告。
- 当需打包的目录或文件是以绝对路径指定的,默认情况下会剥离掉
/
路径,而使用了参数P
(保留/
路径)的归档文件会按原路径解压缩,可能导致数据覆盖。为了避免这种情况,可以使用参数C
指定解压缩的路径(去除/
,保留home/jack/Public/
)。
- 如果你想解压缩单个文件,可以在归档文件后面通过指定需要解压缩的文件名(可以使用参数
t
查看文件列表)来实现。
其他指令
另外,zip
和 7z
也是常见的压缩文件格式,可以在多个操作系统上使用。在 Linux 系统中(以 Ubuntu 为例),你可以使用以下命令安装对应的工具,以便进行 zip
和 7z
文件的压缩和解压缩操作。
# 安装zip
sudo apt install zip
# 安装p7zip-full
sudo apt install p7zip-full
基本用法
# zip 压缩:zip 压缩文件名.zip 文件1 文件2 文件3 ...
zip archive.zip file1.txt file2.txt
# zip 解压缩:unzip 压缩文件名.zip -d 目标目录
unzip archive.zip
unzip archive.zip -d /home/user/destination
# 7z 压缩:7z a 压缩文件名.7z 文件1 文件2 文件3 ...
7z a archive.7z file1.txt file2.txt
# 7z 解压缩:7z x 压缩文件名.7z -o 目标目录
7z x archive.7z
7z x archive.7z -o /home/user/destination
其他
其他操作系统的压缩工具推荐
参考
- 鸟哥的Linux私房菜——基础学习篇(第四版)
- Linux gzip 压缩/解压 详解