基本知识
背景知识
我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rar。可是Linux就不同 了。在Linux的环境中,压缩文件的扩展名大多是:『.tar, .tar.gz, .tgz, .gz, .Z, .bz2』。
我们知道在Linux中扩展名并没有什么用,但之所以仍然要使用扩展名是因为 Linux 支持的压缩命令非常多,且不同的命令所用的压缩技术并不相同,当然彼此之间可能就无法互通压缩/解压缩文件。所以,当你下载到某个压缩档时,自然就需要知道该文件是由哪种压缩命令所制作出来的,好用来对照著解压缩啊。
也就是说,虽然 Linux 文件的属性基本上是与档名没有绝对关系的, 但是为了方便助记,适当的扩展名还是必要的!
常见的后缀如下:
1 | *.Z compress 程序压缩的文件; |
Linux上常见的压缩命令就是 gzip 与 bzip2 ,至于compress 已经落伍了。两个压缩命令中bzip2 命令的压缩比更好。
压缩率(Compression ratio),描述压缩文件的效果名,是文件压缩后的大小与压缩前的大小之比,例如:把100m的文件压缩后是90m,压缩率为90/100100%=90%,压缩率一般是越小越好,但是压得越小,解压时间越长。
打包与压缩的区别
打包
指将一大堆文件或目录什么的变成一个总的文件
压缩
将一个大的文件通过一些压缩算法变成一个小文件
为什么要区分这 两个概念呢?其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得先借助另外的工具将这一大堆文件先打 成一个包,然后再就原来的压缩程序进行压缩。
常用压缩命令
gzip
压缩为.gz
文件
1 | zuo@zuo-VirtualBox:~/Sample/Temp$ gzip -h |
首先要说明几点:
- 默认情况下压缩文件会替换源文件,解决办法有两种
- 使用
-k
参数 - 使用
-c
参数并重定向,好处是可以自定义名字
- 使用
-r
指的是将路径内所有文件压缩,而不是压缩整个路径-1
~-9
指的是压缩等级,-1 最快,但是压缩比最差;-9 最慢,但是压缩比最好。默认是 -6- 使用
-d
参数可以解压缩,也可以使用gunzip来解压 - 使用
-c
参数可以预览内容,不过要预览压缩文件内容需要使用-dc
示例:
1 | # 两个文件,一个目录 |
bzip2
若说 gzip
是为了取代 compres
s 并提供更好的压缩比而成立的,那么bzip2
则是为了取代 gzip
并提供更佳的压缩比而来的。
它的压缩比比 gzip 还要好,更重要的是 bzip2
的用法几乎与 gzip 相同 。只是会把文件压缩为.bz2
文件。
1 | zuo@zuo-VirtualBox:~/Sample/Temp$ ls |
也可以使用bunzip2来进行解压。
打包命令 tar
前一小节谈到的命令大多仅能针对单一文件来进行压缩,虽然 gzip 与 bzip2 也能够针对目录来进行压缩,不过,这两个命令对目录的压缩指的是将目录内的所有文件 "分别" 进行压缩的动作,而不像在 Windows 的系统,可以使用类似 WinRAR 这一类的压缩软件来将好多数据包成一个文件的样式。
这种将多个文件或目录包成一个大文件的命令功能,我们可以称呼他是一种打包命令。Linux 的打包命令是tar
命令。tar
可以将多个目录或文件打包成一个大文件,同时还可以透过 gzip/bzip2 的支持,将该文件同时进行压缩!
目前 Windows 的 WinRAR 也支持 .tar.gz 档名的解压缩。
使用方式
tar的压缩用法比较复杂,因此我们只简单的示例一下用法:
- 压 缩:
tar -[j|z]cv -f filename.tar.bz2 <要被压缩的文件或目录名称>
- 查 询:
tar -[j|z]tv -f filename.tar.bz2
- 解压缩:
tar -[j|z]xv -f filename.tar.bz2 -C <欲解压缩的目录>
参数解释:
1 | -c, --create :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename) |
注意一下-f filename
这个参数,这是我们自己取的档名,因为tar
并不会主动的产生创建的文件名,所以我们必须自定义!
也正因如此,扩展名就显的很重要了!
- 如果不加 [-j|-z] 的话,档名最好取为 *.tar 即可
- 如果是 -j 选项,代表有bzip2 的支持,因此档名最好就取为
*.tar.bz2
- 如果是 -z 选项,代表有gzip 的支持,因此档名最好就取为
*.tar.gz
## 使用示例
下面给出使用的例子,首先我们看一下当前目录的情况:
1 | zuo@zuo-VirtualBox:~/Sample/Temp$ tree |
首先只打包看看
1 | # 打包目录 |
需要注意的是,-c -f
可以写成-cf
但不能写出-fc
,否则会报错
1 | zuo@zuo-VirtualBox:~/Sample/Temp$ tar -fc Dir.tar Dir/ |
所以为了逻辑清晰,建议将-f
单独列开。
然后试一下压缩,我们使用gzip
,也就是参数-z
1 | # 压缩 |