目录
一、为什么Linux压缩文件会有扩展名?
二、压缩
各压缩工具实例
gzip
bzip2
zip
三、打包归档
打包命令tar
四、疑问
为什么zip可以直接压缩并打包,却在Linux中不常使用,而非要去使用麻烦的.tar.gz?
为什么Linux原生的压缩和打包要分开?
一、为什么Linux压缩文件会有扩展名?
在Linux中,常见压缩文件扩展名:*.tar,*.tar.gz,*.tgz,*.gz,*.gz2,为什么会有这么多的扩展名呢?不是说Linux的扩展名没什么作用吗?
这是因为Linux支持的压缩命令非常多,不同的命令使用的压缩算法不同,所以彼此之间无法相互压缩/解压缩。因此,当你要解压缩某个压缩文件时,必须知道用什么算法去解压缩它,那么扩展名就是你判断的唯一标识。也就是说,虽然Linux文件的属性与文件名没有绝对关系,但为了便利,在某些情况下,扩展名还是有必要的。比如同时经过tar打包和gzip压缩的文件,扩展名可以是*.tar.gz,也可以是*.tgz,这都由我们打包的时候自己决定,但是要确保解压缩的人可以识别这个扩展名暗号。
二、压缩
Linux常用压缩工具如下:
工具 | 文件扩展名 | 描述 | 特点 | 命令 【压缩 / 解压缩】 |
---|---|---|---|---|
compress | .Z | 已经很少在Linux文件中出现,被gzip取代 | 只能压缩文件,不能压缩文件夹 | 略 |
gzip | .gz | GNU压缩工具,取代compress,Linux最流行 | 只能压缩文件,不能压缩文件夹 | gzip / gunzip |
bzip2 | .bz2 | gzip之后GNU开发的,压缩更好,但耗时更长 | 只能压缩文件,不能压缩文件夹 | bzip2 / bunzip2 |
zip | .zip | Windows上PKZIP工具的Unix实现 | 即可压缩文件,也可压缩文件夹 | zip / unzip |
各压缩工具实例
原始文件,压缩前102K
gzip
压缩命令:gzip test.jpeg,压缩后大小变为101K
解压缩命令:gunzip test.jpeg.gz
bzip2
压缩命令:bzip2 test.jpeg,压缩后大小变为100K,小于gzip
解压缩命令:bunzip2 test.jpeg.bz2
zip
- 需指定压缩后文件,压缩后会在保留原始文件基础上生成新的文件;
- 既支持压缩文件,也支持压缩文件夹
压缩文件命令:zip test.zip test.jpeg
压缩文件夹命令:zip -r testDir.zip testDir
解压缩命令: unzip testDir.zip
三、打包归档
打包归档的意思是:将多个文件文件夹 “打包” 变成一个方便管理的文件,但其并不具有压缩效果,打包后的文件不会变小。
打包命令tar
参数 | 描述 |
---|---|
-c | 新建打包文件 |
-x | 解打包文件 |
-v | 在打包 / 解打包 的过程中,将正在处理的文件名显示(不想显示可缺省) |
-f | 【不可缺省】-f 后面接被处理的文件名,不使用该参数则无法正确的打包 / 解打包 |
-z | 配合gzip进行压缩 / 解压缩(扩展名通常为:*.tar.gz) |
-j | 配合bzip2进行压缩 / 解压缩(扩展名通常为:*.tar.bz2) |
由于Linux风格的压缩命令均不支持直接压缩目录,仅可压缩单个文件,所以压缩文件夹需要打包命令的配合。
例如:原始文件夹为testDir,先用tar对其进行打包,然后使用gzip进行压缩,可得到testDir.tar.gz
tar -cvf testDir.tar testDir ===========> testDir.tar
gzip testDir.tar ============> testDir.tar.gz
也可以直接一个命令对其进行打包和压缩,扩展名是.tgz或.tar.gz均可,由自己决定,具体原因可见文章开头
tar -czvf testDir.tgz testDir =========> testDir.tgz
解gzip压缩并解打包:tar -xzvf testDir.tgz =========> testDir
四、疑问
为什么zip可以直接压缩并打包,却在Linux中不常使用,而非要去使用麻烦的.tar.gz?
因为zip不是Linux原生支持的压缩方式,其对Linux的风格保留并不完整,当你对一个已经付好权限的文件使用zip压缩后再解压缩,会发现需要重新chmod才可恢复。
为什么Linux原生的压缩和打包要分开?
因为Linux喜欢一个工具只做好一件事