文件与文件系统压缩

在Linux下面有相当多的压缩命令可以运行,这些压缩命令可以让我们更方便地从网络上面下载容量较大的文件。此外,我们知道在Linux下面,扩展名没有什么特殊的意义。 不过,针对这些压缩命令所产生的压缩文件,为了方便记忆,还是会有一些特殊的命名方式,就让我们来看看吧!

文件压缩

什么是文件压缩呢?我们稍微谈一谈它的原理,目前我们使用的计算机系统中都是使用所谓的字节单位来计量。不过,事实上,计算机最小的计量单位应该是bit才对,此外,我们也知道 1字节=8比特(1Byte=8bit),但是如果今天我们只是记录一个数字,即1这个数字,它会如何记录?假设一个字节可以看成下面的模样:

由于 1Byte=8bit,所以每个字节当中会有8个空格,而每个空格只可以是0、1

由于我们记录的数字是1,考虑计算机所谓的二进制,如此一来,1会在最右边占据1个位,而其他的7个位将会自动地被填上0.如下图所示

你看看,其实在这样的例子中,那7个位应该是空的才对。不过,为了要满足目前我们的操作系统数据的读写,所以就会将该数据转为字节的形式来记录。而一些聪明的计算机工程师就利用一些复杂的计算方式,将这些没有使用到的空间【丢】出来,以让文件占用的空间变小,这就是压缩的技术。
另一种压缩技术也很有趣,它是将重复的数据进行统计记录。举例来说,如果你的数据为【111······】共有100个1时,那么压缩技术会记录为【100个1】而不是真的有100个1的位存在。这样也能够精简文件记录的容量,非常有趣吧!
简单地说,你可以将它想成,其实文件里面有相当多的空间存在,并不是完全填满的,而压缩技术就是将这些空间填满,以让整个文件占用的容量下降。不过,这些压缩过的文件并无法直接被我们的操作系统所使用,因此,若要使用这些被压缩过的文件数据,则必须将它还原回未压缩前的模样,那就是所谓的解压缩。而至于压缩后与压缩的文件所占用的磁盘空间大小,就可以被称为是压缩比
这个压缩与解压缩的操作有什么好处呢?
1.最大的好处就是压缩过的文件容量变小了,所以你的硬盘无形之中就可以容纳更多的数据。
2.此外,在一些网络数据的传输中,也会由于数据量的降低,好让网络带宽可以用来做更多的工作,而不是老卡在一些大型文件传输上面。

Linux系统常见压缩命令

在Linux的环境中,压缩文件的扩展名大多是: *.tar、*.tar.gz、*.gz、*.Z、*.bz2、*.xz。为什么会有这样的扩展名?不是说Linux的扩展名没有什么作用吗?
这是因为Linux支持的压缩命令非常多,且不同的命令所用的压缩技术并不相同,当然彼此之间可能就无法互通/解压缩文件。所以,当你下载到某个文件时,自然就需要知道该文件是由哪种压缩命令所制作出来的,好用来对照对照着解压缩,也就是说,虽然Linux文件的属性基本上是与文件名没有绝对关系的,但是为了帮助我们人类小小的脑袋,所以适当的扩展名还是必要的,下面我们就列出几个常见的压缩文件扩展名:

*.gz         gzip程序压缩的文件
*.bz2        bzip2程序压缩的文件
*.xz         xz程序压缩的文件
*.zip        zip程序压缩的文件
*.Z          compress程序压缩的文件
*.tar        tar程序打包的文件,并没有压缩过
*.tar.gz     tar程序打包的文件,并且经过gzip的压缩
*.tar.bz2    tar程序打包的文件,并且经过bzip2的压缩
*.tar.xz     tar程序打包的文件,并且经过xz的压缩

Linux常见的压缩命令就是gzip、bzip2以及最新的xz,至于compress已经不流行了。为了支持windows常见的zip,其实Linux也早就有zip命令了。gzip是由GNU计划所开发出来的压缩命令,该命令支持已经替换了compress。后台GNU又开发出了bzip2及xz这几个压缩比更好的压缩命令。不过,这些命令通常仅能针对一个文件来压缩与解压缩,如此一来,每次压缩与解压缩都要一大堆文件,岂不烦人?此时,这个所谓的【打包软件,tar】就显得很重要。
这个tar可以将很多文件打包成一个文件,甚至是目录也可以这么玩。不过,单纯的tar功能仅仅是打包而已,即将很多文件结合为一个文件,事实上,它并没有提供压缩的功能,后台,GNU计划中,将整个tar与压缩的功能结合在一起,如此一来,提供用户更方便且更强大的压缩与打包功能,下面我们就来谈一谈这些在Linux下面基本的压缩命令。

gzip

gzip可以说是应用最广的压缩命令了,目前gzip可以解开compress、zip和gzip等软件所压缩的文件,至于gzip所建立的压缩文件为*.gz,让我们来看看这个命令的语法:

gzip [-cdtvn] 文件名
选项与参数:
-c: 将压缩的数据输出到屏幕上,可通过数据流重定向来处理;
-d: 解压缩的参数;
-t: 可以用来检验一个压缩文件的一致性,看看文件有无错误;
-v: 可以显示出原文件/压缩文件的压缩比等信息;
-n: n为数字的意思,代表压缩等级,-1最快,但压缩比最差,-9最慢,但是压缩比最好,默认是-6

示例1:压缩文件(gzip -v 文件名)

示例2:解压缩文件(gzip -d 文件名)

示例3:按照指定压缩比压缩(gzip -9 文件名)

示例4:查看压缩文件的内容(zcat 文件名)

示例5:压缩为指定文件名(gzip -c 文件名 > 指定文件名)

当你使用gzip进行压缩时,在默认的状态下原本的文件会被压缩成为.gz后缀的文件,源文件就不存在了,这点与一般习惯使用Windows做压缩的朋友所熟悉的情况不同,要注意。cat/more/less可以使用不同的方式来读取纯文本文件,那么zcat/zmore/zless则可以对应于cat/more/less的方式来读取纯文件文件被压缩后的压缩文件。

bzip2

若说gzip是为了替换compress并提供更好的压缩比而成立的,那么bzip2则是为了替换gzip并提供更加的压缩比而来。bzip2真是很不错的东西,这玩意的压缩比竟然比gzip还要好,至于bzip2的用法几乎与gzip相同,看看下面的用法吧!

bzip2 [-cdkzvn] 文件名
选项与参数:
-c: 将压缩的数据输出到屏幕上,可通过数据流重定向来处理;
-d: 解压缩的参数;
-k: 保留原始文件,而不是删除原始文件;
-z: 压缩的参数(默认值,可以不加);
-v: 可以显示出原文件/压缩文件的压缩比等信息;
-n: n为数字的意思,代表压缩等级,-1最快,但压缩比最差,-9最慢,但是压缩比最好,默认是-6

示例:

bzip2 -v 待压缩文件名
bzip2 -d 压缩后的文件名
bzip2 -9 -c 待压缩的文件名 > 自定义压缩文件名

xz

虽然bzip2已经具有很棒的压缩比,不过显然某些自由软件开发者还不满足,因此后来还推出了xz这个压缩比更高的软件。这个软件的用法也跟gzip/bzip2几乎一模一样,那我们就来看一看。

xz [-cdtlkn] 文件名
选项与参数:
-c: 将压缩的数据输出到屏幕上,可通过数据流重定向来处理;
-d: 解压缩的参数;
-k: 保留原始文件,而不是删除原始文件;
-l: 列出压缩文件的相关信息;
-t: 测试压缩文件的完整性,看看有没有错误;
-z: 压缩的参数(默认值,可以不加);
-n: n为数字的意思,代表压缩等级,-1最快,但压缩比最差,-9最慢,但是压缩比最好,默认是-6

示例:

xz -v 待压缩的文件名
xz -l 压缩后的文件名
xz -d 压缩后的文件名
xz -k 待压缩的文件名

打包命令

前面谈到的命令大多仅能针对单一文件来进行压缩,虽然gzip、bzip2、xz也能够针对目录来进行压缩,不过,这几个命令对目录的压缩指的是将目录内的所有文件【分别】进行压缩的操作。而不像在Windows的系统,可以使用类似WinRAR这一类的压缩软件来将好多数据包成一个文件的样式。
这种将多个文件或目录包成一个大文件的命令功能,我们可以称它是一种打包命令,那Linux有没有这种打包命令?有,那就是大名鼎鼎的tar,tar可以将多个目录或文件打包成一个大文件,同时还可以通过gzip、bzip2、xz的支持,将该文件同时进行压缩。更有趣的是,由于tar的使用太广泛了,目前Windows的WinRAR也支持.tar.gz文件名的解压缩。

tar

tar的选项与参数特别多,我们只讲几个常用的选项,更多选项您可以自行man tar查询。

tar [-z|-j|-J] [cv] [-f 待建立的新文件名] filename... <== 打包与压缩。
tar [-z|-j|-J] [cv] [-f 既有的tar文件名]  <== 查看文件名
tar [-z|-j|-J] [xv] [-f 既有的tar文件名]  <== 解压缩
选项与参数:
-c: 建立打包文件,可搭配-v来查看过程中被打包的文件名(filename);
-t: 查看打包文件的内容含有那些文件名,重点在查看【文件名】;
-x: 解包或解压缩功能,可以搭配-C(大写)在特定目录解压,特别留意的是,-c、-t、-x不可同时出现在一串命令行中;
-z: 通过gzip的支持进行压缩/解压缩: 此时文件名最好为*.tar.gz;
-j: 通过bzip2的支持进行压缩/解压缩:此时文件名最好为*.tar.bz2;
-J: 通过xz的支持进行压缩/解压缩: 此时文件名最好为 *.tar.xz,特别留意,-z、-j、-J不可以同时出现在一串命令行中;
-v: 在压缩/解压缩的过程中,将正在处理的文件名显示出来;
-f filename: -f后面要立刻接要被处理的文件名,建议-f单独写一个选项(比较不会忘记)。
-C 目录: 这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
-p(小写): 保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件;
-P(大写): 保留绝对路径,亦即允许备份数据中含有根目录存在之意

其实最简单的使用tar就只要记住下面的命令即可:

  • 压缩: tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称;
  • 查询: tar -jtv -f filename.tar.bz2
  • 解压缩: tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

示例:

tar -zcvf 文件名.tar.gz 文件名(目录)

tar -ztvf 文件名.tar.gz

tar -zxvf 文件名.tar.gz

资料:
鸟哥的Linux私房菜(第四版)

posted @ 2019-11-26 11:08  itbsl  阅读(1399)  评论(2编辑  收藏  举报