前言
Linux 有三个常用的压缩命令:gzip
、bzip2
和 tar
。本文介绍它们的区别和简单用法。
压缩文件
数据压缩是去除数据中冗余部分的过程,需要通过压缩算法完成。这些算法可分为两类:
- 「无损压缩」:保留原始文件中包含的所有数据。
- 「有损压缩」:在进行压缩时删除数据,以便应用更多的压缩。当文件被恢复时,它与原始版本不一致,是一个近似值。JPEG和MP3是有损压缩的例子。
gzip命令
该命令被用来压缩一个或多个文件。它将原始文件替换为压缩版本。
该命令的语法为gzip file
。
image.png
我们可以使用gunzip
来解压缩。
image.png
gzip有诸多选项,使用命令man gzip
查看完整的列表。
如果想要查看压缩的文本文件的内容,可以使用gunzip -c
或者 zcat
进行查看。
image.png
image.png
bzip2命令
该命令与gzip
类似,但使用了不同的压缩算法,并以压缩速度为代价实现更高的压缩水平。
用来压缩的命令:
代码语言:javascript复制bzip2 sample.txt
用来解压缩的命令:
代码语言:javascript复制bunzip2 sample.txt.bz2
bzip2
也有几个受支持的选项。
归档文件
归档是将许多文件收集起来,并将它们打包在一起成为一个大文件的过程。
tar命令
tar
程序是归档文件中的经典工具。如果你看到一个以.tar
为扩展名的文件名,它表示一个普通的tar
归档文件,如果它以.tgz
结尾,它表示一个被gzip
压缩过的归档文件。
tar
有几种模式。请记住,模式必须总是先被指定。
模式 | 描述 |
---|---|
c | 从文件和/或目录的列表中创建一个归档。 |
x | 提取一个归档。 |
r | 将指定的路径名,添加到归档的末尾。 |
t | 列出归档的内容。 |
我已经创建了几个文件夹和文件,我可以用tar cf playground.tar playground
归档它们。
image.png
我们可以使用v
选项(verbose)来获得更详细的列表。
image.png
我们可以在一个新的位置提取tar。请记住,除非我们是以超级用户的身份进行操作,否则从归档中提取的文件和目录的所有权是由执行恢复的用户来承担的,而不是原始的所有者。
image.png
tar
默认使用相对路径名而不是绝对路径名。这是非常有用的,因为它允许我们提取归档到任何位置,而不是必须提取到它们的原始位置。
你可以通过在tar
命令中加入尾部的路径名来限制从归档文件中提取的内容,tar
将只恢复指定的文件。你也可以指定多个路径名。通配符通常情况下不被支持,但GUN版本的tar
通过--wildcards
选项支持它们。
tar xf ../playground2.tar --wildcards 'home/azureuser/playground/dir-*/file-A'
image.png
现代版本的GNU tar
分别通过使用z
和j
选项,来直接支持gzip
和bzip2
压缩。
image.png
T
是-files-from
选项的缩写,它向tar
指出从哪里读取它的路径名列表,以前我们告诉tar
要使用的目录或文件,但现在我们使用-
选项,这让tar
知道要使用标准输入或输出作为要提取或归档的文件。-T
选项起初有点令人困惑。这个命令是在说:
find playground/ -name 'file-A'
查找playground
中与file-A
相匹配的所有文件|
将查找到的内容使用管道输出到tar
tar czf playground
创建一个被gzip
压缩的tar
,命名为playground.tgz
-T -
标准输出的文件,这些文件来自管道查找命令的标准输出。
参考资料
[1]
https://www.madebygps.com/an-intro-to-archiving-and-compression-in-linux/: https://www.madebygps.com/an-intro-to-archiving-and-compression-in-linux/