目前计算机系统中都是使用所谓的字节单位来计量的,而事实上,计算机最小的计量单位应该是
bit
才对,而1B = 8bit
,即每个字节当中会有 8 个空格,每个空格可以是0
、1
。
在正常情况下,我们存储数字 1
为例,在 8 个 bit
中,1
会占据最右边的一个位,而其余的七个为都会将会自动地被填上 0。但按理说这七个位都应该为空的才对,不过 为了要满足目前操作系统数据的读写,所以就会将该数据转化为字节的形式来记录,而其中一种压缩的技术其实就是 通过一些复杂的计算方式,将这些没有使用的空间 “丢” 出来,从而使文件变小。
还有一种压缩技术就是将重复的数据进行统计记录,比如说,数据中为 1111111......
共有 100个 1
时,那么压缩技术就可以记录为 100 个 1
来表示,而不是真的使用 100 个 bit 来表示。
不过,这些压缩过的文件并无法直接被操作系统所使用,即需要解压才能正常使用该文件,而压缩后与压缩的文件所占用的磁盘空间大小,就可以被称为 压缩比。
1 Linux 系统常用的压缩命令
在 Linux 的环境中,压缩文件的扩展名大多为:*.tar
、*.tar.gz
、*.tgz
、.gz
、*.Z
、*.bz2
、*.xz
。之前文章都说过,Linux 的扩展名没有什么作用,那么这些扩展名的作用是什么?
这是因为 Linux 支持的压缩命令很多,不同的命令所用的压缩技术并不相同,即彼此之间可能无法互通的进行解压缩。所以比如在下载某个压缩文件时,就需要知道明确该文件是使用哪个压缩命令进行压缩,从而才能明确该使用哪个解压命令进行解压。
以下是一些常用的压缩文件扩展名:
*.Z
:compress 程序压缩的文件*.zip
:zip 程序压缩的文件*.gz
:gzip 程序压缩的文件*.bz2
:bzip2 程序压缩的文件*.xz
:xz 程序压缩的文件*.tar
:tar 程序打包的文件,并没有压缩过*.tar.gz
:tar 程序打包的文件,并使用 gzip 程序压缩*.tar.bz2
:tar 程序打包的文件,并使用 bzip2 程序压缩*.tar.xz
:tar 程序打包的文件,并使用 xz 程序压缩
它们之间的压缩比都是不同的,而 Linux 上最常用的压缩命令就是 gzip
、bzip2
以及最新的 xz
,不过简单的压缩命令通常只针对一个文件来压缩与解压,即如果要压缩与解压一堆文件的时候,就要使用到打包程序 tar
。
tar
可以将很多文件打包成一个文件,实际上它没有压缩功能,所以如上列表的 *.tar.gz
命令那样,将这个 tar
与压缩的功能结合在一起,方便用户使用。
2.1 gzip
,zcat/zmore/zless/zgrep
gzip
可以说是应用最广的压缩命令了,目前 gzip
可以解开 compress、zip 与 gzip 等软件所压缩的文件,以下是它的语法:
压缩:
gzip [-cdtv#] 文件名
以下是一些参数与选项:
-c
:将压缩的数据输出到屏幕上,可通过数据流重定向处理-d
:添加该参数用于 解压 操作-t
:可用来检测一个压缩文件的一致性,查看文件有无错误-v
:可以显示压缩比-#
:#
是一个1
到9
数字,它表示压缩等级,1
最快,但压缩比最差;9
最慢,但压缩比最好,默认值是6
使用 gzip
进行压缩时,在默认的状态下原本的文件会被压缩为 .gz
后缀的文件,源文件就不再存在了,同时使用 gzip
压缩的文件在 Windows 系统中,可以被 WinRAR 或 7 ZIP 这些软件解压缩。
与此同时,还有
bzip2
与xz
这两个用法一致但压缩比更好的压缩命令可以使用,不过鉴于耗时问题,所以最常用的还是gzip
2.1.1 zcat/zmore/zless/zgrep
zcat/zmore/zless/zgrep
这些是 gzip
命令衍生出来的命令,看它们的名字可以猜出,它们可以类比于 cat/more/less/grep
命令用于查看由文本类型的文件压缩而来的压缩文件
2.2 打包命令 tar
前面谈到的压缩命令大多只针对单一文件进行压缩,如 gzip
,bzip2
对目录的压缩是值将目录内所有文件 分别 进行压缩的操作,而不是像使用 WinRAR 一样将这些数据都包成一个文件然后进行压缩。
此时就需使用到 tar
打包命令了。
tar
命令的语法如下:
打包压缩:
tar [-z|-j|-J] [-cv] [-f 待建立的文件名] filename ...
-c
:建立打包文件-p
:保留备份数据的原本权限与属性--exclude=fliename
:在压缩的过程中,不要将filename
文件打包-v
:在压缩/解压缩的过程中,将正在处理的文件名显示出来,下同[-z|-j|-J]
:表示的是使用哪种方式进行压缩/解压缩,-z
表示使用 gzip 的支持进行解压缩(此时文件名最好为*.tar.gz
),-j
表示通过 bzip2 的支持进行压缩/解压缩(此时文件名最好为*.tar.bz2
),-J
表示通过xz
的支持进行压缩/解压缩(此时文件名最好为*.tar.xz
),下同-f filename
:-f
后面要紧接 被处理的文件名,下同time
:在命令的最前加入time
字段,可以显示程序运行的时间
查看打包压缩文件内文件名:
tar [-z|-j|-J] [-tv] [-f 既有的 tar 文件名]
-t
:查看打包文件的内容含有那些文件名
解压缩:
tar [-z|-j|-J] [-xv] [-f 既有的 tar 文件名] [-C 目录]
-x
:解包或解压缩的功能-C 目录
:在特定目录下解压缩- 如果想要仅解开单一文件下面语法,需要知道想要单一解开文件的文件名,注意:待解开文件名是包含路径的,此时可以使用上述
-t
查看文件名
tar -zxv -f 打包文件名 待解开文件名
tar 打包出来的文件有没有进行压缩所得到文件称呼不同,如果仅是打包而已(如
tar -cv -f filename
),这个文件名我们称为tarfile
,否则称为tarball