欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

文件与文件系统压缩

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

在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私房菜(第四版)