当前位置:文档之家› 数据压缩原理

数据压缩原理

AIX 上总有一种压缩方式适合你当今世界每天产生大量的数据,有些数据我们需要进行压缩,压缩数据的好处不言而喻:节省空间;方便传输;加密保护等等。

很多压缩工具应运而出,每种工具都有自己的特点。

对于AIX 平台上的压缩方法也很多compress、pack、gzip、pax、tar 等等。

本文将首先简单介绍一下压缩的基本原理然后详细介绍AIX 平台的常用压缩工具并针对它们各自的特色进行比较,让读者对对AIX 平台的压缩有针对性的认识,从而能够根据不通的需要选择合适的压缩工具。

数据压缩的原理数据压缩是指在不丢失信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率的一种技术方法。

或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间。

数据压缩包括有损压缩和无损压缩。

无损压缩是可逆的;有损压缩是不可逆的。

计算机处理信息是以二进制数(0 和1)的形式表示的,压缩软件把二进制信息中相同的字符串以特殊字符标记起来,从而实现缩小文件大小来达到压缩的目的。

压缩的理论基础是信息论。

从信息的角度来看,压缩就是去除掉信息中的冗余,即去除掉确定的或可推知的信息,而保留不确定的信息,也就是用一种更接近信息本质的描述来代替原有的冗余的描述,这个本质的东西就是信息量。

数据压缩的硬件和软件工具也非常多,本文将针对AIX 平台常见的几种数据压缩工具进行介绍和比较并提供常用的示例进行解说,希望您能从中选择合适的压缩工具进行压缩。

AIX 平台上,通常我们看到的 .Z .gz .z .ar .tar 后缀的文件都是压缩文件。

通过compress 可以生成 .Z 压缩文件,通过compress、uncompress、gzip 可以解压 .Z 格式的压缩文件;通过gzip 可以生成 .gz 压缩文件,通过gzip 可以解压 .gz 格式的压缩文件;通过pack 可以生成 .z 压缩文件,通过unpack、gzip 可以解压 .z 格式的压缩文件;通过pax 可以生成 .ar 压缩文件,通过pax 可以解压 .ar 格式的压缩文件;通过pax、tar 可以生成 .tar 压缩文件,通过pax、tar、untar、可以解压 .tar 格式的压缩文件。

图 1 描述了各种类型文件的压缩及解压可以选择的AIX 工具。

图 1. 不同文件类型的压缩及解压下面我们将详细介绍AIX 上主要压缩工具的特点已经用法。

回页首compresscompress 是一个相当古老的UNIX 档案压缩指令,利用自适应的Lempel-Zev 编码来减少文件大小。

每一个被参数File 指定的原文件将被可能的压缩文件所代替,压缩后的档案会加上一个 .Z。

延伸档名以区别未压缩的档案,压缩后的档案可以以uncompress 解压。

值得注意的是执行compress 需要有相应的权限来替换文件。

压缩量依赖于输入大小、由Bits 变量指定的单位编码的比特数和公共子串的分布。

典型地,源代码或英文文本将减少50% 到60%。

特点•如果调用压缩进程有适当的权限,压缩文件将保留与原文件相同的所有权、方式和修改时间。

•如果指定的文件的路径大于1023 字节,该命令不工作。

•如果没有指定文件,标准输入将被压缩到标准输出。

•如果压缩没有减少文件大小,将对标准错误写一个消息而不替换原文件。

•compress 命令的压缩一般比利用哈夫曼编码或自适应哈夫曼编码实现的压缩更紧凑,计算时间更少,(哈夫曼编码在pack 命令中被使用)。

•若要将数个档案压成一个压缩档,必须先将档案tar 起来再压缩。

常用示例该命令压缩dsm.opt 文件,-v 参数将程式执行的讯息印在荧幕上。

标准输出显示压缩百分比为14 %。

dsm.opt 文件被压缩并重命名为dsm.opt.Z。

2. $compress -b 12 dsm.old该命令指定文件中公共子串的比特的最大值为12。

-b 参数设定共同字串数的上限,以位元计算,可以设定的值为9 至16 bits 。

由于值越大,能使用的共同字串就越多,压缩比例就越大,所以一般使用预设值16 bit。

3. $compress – df dsm.opt.该命令将dsm.opt.Z 解压成dsm.opt,若档案已经存在-df 程式则会自动覆盖档案。

由于系统会自动加入 .Z 为延伸档名,所以该命令中dsm.opt.Z 写成dsm.opt 也会当作dsm.opt.Z 来处理。

Z回页首uncompressCompress 的解压也可以由uncompress 来完成。

uncompress 命令恢复由compress 命令压缩的原文件。

uncompress 命令恢复由compress 命令压缩的原文件。

每个由File 参数指定的压缩文件被除去而由展开后的副本所替换。

展开后的文件与压缩的版本名字相同,但没有 .Z 扩展名。

如果用户有root 用户权限,展开后的文件保留与原文件相同的所有者、组、方式和修改时间。

如果用户没有root 用户权限,则文件保留相同的方式和修改时间,但获取新的所有者和组。

如果没有指定文件,则标准输入将展开为标准输出。

示例•采用Huffman 编码来压缩文件。

因此pack 命令始终只能压缩小于8MB 的文件。

•pack 命令在下列任何一个条件下都不能压缩:文件已经压缩过;输入文件名超过了253 个字节;文件有链接;文件是目录;文件不能打开;不能通过压缩节省存储块;名称为File.z 的文件已经存在;.z 文件不能创建;处理中发生I/O 错误。

示例该命令压缩名为dsm.sys 和dsm.sys.ini 的文件并显示修改的文件名。

压缩的版本重命名为dsm.opt.z 和dsm.sys.z。

此pack 命令显示每个压缩文件的文件大小减小百该命令压缩名为dsmwebcl.log 的文件并显示该文件的统计信息。

回页首unpackunpack 命令展开由pack命令创建的文件。

对每个指定的文件,unpack 命令搜索名为File.z 的文件。

如果这个文件是压缩文件,则unpack 命令用其展开的版本来替换它。

unpack 命令通过从File 除去 .z 后缀来给新的文件命名。

如果用户有root 用户权限,则新的文件具有和原文件一样的访问方式、访问和修改时间、所有者和组。

如果用户没有root 用户权限,则该文件保留同样的访问方式、访问时间和修改时间,但获取新的所有者和组。

unpack 命令仅对以 .z 结束的文件进行操作。

结果,当指定不以 .z 结束的文件名时,unpack 添加该后缀并搜索目录以寻找带有这种后缀的文件名。

文件位置/usr/bin/unpack特色•如果正在解压的文件有链接,unpack 命令会把警告写到标准错误。

与其来源的压缩文件比较,新解压的文件有不同的索引节点。

但是,任何其它链接到压缩文件原索引节点的文件仍然存在,仍然处于压缩状态。

•以下情况则文件不能解压:文件名(除 .z 文件之外)多于253 字节;文件不能打开;文件不是压缩文件;有展开文件名的文件已存在;不能创建被解压的文件。

示例•系统缺省支持64- 位POSIX- 定义的数据格式。

目的是允许归档大文件,例如dump 文件。

归档文件大小可以大于或等于8 GB•支持长用户名(或组名)•支持大于2097151 的超大UID/GID•支持长路径名或链接名•用-o 标志可以修改归档算法注意事项•在读取或复制方式下,如果需要中间目录来抽取归档成员,pax 执行与mkdir 子例程相同的操作,中间目录作为路径参数,值S_IRWXU 作为方式参数。

•如果没有任何指定的模式或文件操作数与至少一个文件或归档成员匹配,pax 为每个不匹配的模式或文件操作数写一条诊断消息到标准错误,并以错误状态退出。

•遍历目录过程中,pax 将检测无限循环;例如,进入一个作为最后访问文件的祖先的先前访问的目录。

在检测到无限循环时,pax 将诊断消息写到标准错误然后终止。

•当pax 处于读取方式或列表方式,使用-x pax 归档格式和文件名、链接名、所有者名或任何其他扩展的头记录中的字段,这些字段无法从pax UTF8 编码集格式转换到当前编码集和语言环境,pax 写诊断消息到标准错误,如-o invalid= 选项所描述的那样处理文件,然后处理归档中的下一个文件。

•对于AIX 5.3,在缺省情况下pax 命令将忽略扩展属性。

-U 选项通知pax 来归档或恢复扩展属性,它包括ACL。

-pe 选项将保留ACL。

指定-pe 选项时,如果pax 无法保留ACL,诊断消息将写入标准错误,但是不会删除抽取的文件。

将返回非零退出代码。

pax 归档文件中的扩展属性条目需要新的记录类型。

示例1. $pax -wf mytest.ar -x pax test1该命令将在当前目录下为目录test1 创建pax 格式的归档mytest.ar。

使用-w 标志来写归档文件,-x 参数指定输出归档格式。

pax 有 3 中输出格式:pax、copyio、ustar。

pax 为缺省数据交换格式。

特定字符归档文件的格式的缺省分块值是10240。

支持以512 递增的从512 到32256 的分块值;cpio 扩展cpio 交换格式。

特定字符归档文件的格式的缺省分块值是5120。

支持以512 递增的从512 到32256 的分块值;ustar 扩展tar 交换格式。

特定字符归档文件的格式的缺省分块值是10240。

支持以512 递增的从512 到32256 的分块值。

该命令将抽取bin.ar,抽取过程中要忽略pax 格式的归档的路径名。

当归档文件中包含ASCII 码,抽取到z(VM/ESA)操作系统时为了避免出现乱码现象我们需要在添加其他的标志来进行抽取。

10. $ pax -r -f myfile1.pax -o from=ISO8859-1,to=IBM-1047该命令将抽取myfile1.pax 文件,该命令保证了归档文件中的ASCII 码解压到zVM/ESA)操作系统的正常使用。

11. $ pax -rw bin newdir该命令将bin 目录层次结构复制到newdir 中同时保留了源文件的大多数属性,如硬连接数和文件访问次数等。

如果newdi 目录中包含相同的文件或目录那么该命令不会覆盖原有的目录结构,该命令会提示类似下面的信息:12. $ pax: bin : The file/directory exists and will not be overwritten.回页首tartar 是一个已移植到Linux 中的经典UNIX 命令。

tar 是tape archive(磁带归档)的缩写,最初设计用于将文件打包到磁带上,现在也可用于其它存储介质。

相关主题