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起来再压缩。常用示例1.$compress-vdsm.optdsm.opt:Compression:10.14%Thisfileisreplacedwithdsm.opt.Z.该命令压缩dsm.opt文件,-v参数将程式执行的讯息印在荧幕上。标准输出显示压缩百分比为14%。dsm.opt文件被压缩并重命名为dsm.opt.Z。2.$compress-b12dsm.old该命令指定文件中公共子串的比特的最大值为12。-b参数设定共同字串数的上限,以位元计算,可以设定的值为9至16bits。由于值越大,能使用的共同字串就越多,压缩比例就越大,所以一般使用预设值16bit。3.$compress–dfdsm.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用户权限,则文件保留相同的方式和修改时间,但获取新的所有者和组。如果没有指定文件,则标准输入将展开为标准输出。示例$uncompressdsm.opt.Z该命令解压dsm.opt.Z文件,并重命名为dsm.opt。回页首packpack命令以压缩格式存储由File参数指定的文件。输入文件由一个原文件名附加.z后缀的压缩文件所代替。压缩文件维持了同原始文件同样的访问方式、访问和修改日期和所有者。输入文件名包含不超过253个字节,以允许有空间添加.z后缀。如果pack命令成功执行,原始文件就被除去。如果pack命令不能创建更小的文件,它就停止处理并报告不能节省空间。(节省空间失败通常发生于小文件或者是统一字符分布的文件。)空间节省的数额取决于输入文件的大小和字符分布频率。由于译码树形成了每个.z文件的第一部分,因此对于小于3个块的文件不会节省空间。典型情况下,文本文件减少25%到40%。文件位置/usr/bin/pack特色采用Huffman编码来压缩文件。因此pack命令始终只能压缩小于8MB的文件。pack命令在下列任何一个条件下都不能压缩:文件已经压缩过;输入文件名超过了253个字节;文件有链接;文件是目录;文件不能打开;不能通过压缩节省存储块;名称为File.z的文件已经存在;.z文件不能创建;处理中发生I/O错误。示例1.$packdsm.sysdsm.sys.ini2.pack:dsm.sys:Thisfileisreducedinsize47.3%.pack:dsm.sys.ini:Thisfileisreducedinsize47.5%.该命令压缩名为dsm.sys和dsm.sys.ini的文件并显示修改的文件名。压缩的版本重命名为dsm.opt.z和dsm.sys.z。此pack命令显示每个压缩文件的文件大小减小百分比。3.$pack-dsm.sys4.pack:dsm.sys:Thisfileisreducedinsize47.3%.5.Thefilechangedfrom6296to3315bytes.6.TheHuffmantreehas11levelsbelowtheroot.7.Thereare49distinctbytesininput.8.Thedictionaryoverheadis67bytes.9.Theeffectiveentropyis4.21bitsperbyte.Theasymptoticentropyis4.13bitsperbyte.该命令压缩名为dsmwebcl.log的文件并显示该文件的统计信息。回页首unpackunpack命令展开由pack命令创建的文件。对每个指定的文件,unpack命令搜索名为File.z的文件。如果这个文件是压缩文件,则unpack命令用其展开的版本来替换它。unpack命令通过从File除去.z后缀来给新的文件命名。如果用户有root用户权限,则新的文件具有和原文件一样的访问方式、访问和修改时间、所有者和组。如果用户没有root用户权限,则该文件保留同样的访问方式、访问时间和修改时间,但获取新的所有者和组。unpack命令仅对以.z结束的文件进行操作。结果,当指定不以.z结束的文件名时,unpack添加该后缀并搜索目录以寻找带有这种后缀的文件名。文件位置/usr/bin/unpack特色如果正在解压的文件有链接,unpack命令会把警告写到标准错误。与其来源的压缩文件比较,新解压的文件有不同的索引节点。但是,任何其它链接到压缩文件原索引节点的文件仍然存在,仍然处于压缩状态。以下情况则文件不能解压:文件名(除.z文件之外)多于253字节;文件不能打开;文件不是压缩文件;有展开文件名的文件已存在;不能创建被解压的文件。示例$unpackdsm.sys.zdsm.sys.iniunpack:dsm.sys:Thisfileisnowunpacked.unpack:dsm.sys.ini:Thisfileisnowunpacked.该命令展开了压缩文件dsm.sys.z和dsm.sys.ini.z,并用名为dsm.sys和dsm.sys.ini的文件来替换它们。unpack命令的文件名可以带有或不带.z后缀。回页首pax抽取、写以及列出归档文件成员;复制文件和目录层次结构。-r和-w标志指定了归档操作的类型。通过pax主要可以实现4大功能包括:列出已归档文件的成员文件(列表方式);使用-r标志抽取归档文件(读取方式);使用-w标志写归档文件(写方式)用-r和-w标志复制文件(复制方式)。pax命令应该是用于系统转储和2GB以上的映像的首选存档方法。pax命令还可以用于查看和修改tar和cpio格式的文件,下面的示例中将会给出相应解释。文件位置/usr/bin/pax特点系统缺省支持64-位POSIX-定义的数据格式。目的是允许归档大文件,例如dump文件。归档文件大小可以大于或等于8GB支持长用户名(或组名)支持大于2097151的超大UID/GID支持长路径名或链接名用-o标志可以修改归档算法注意事项在读取或复制方式下,如果需要中间目录来抽取归档成员,pax执行与mkdir子例程相同的操作,中间目录作为路径参数,值S_IRWXU作为方式参数。如果没有任何指定的模式或文件操作数与至少一个文件或归档成员匹配,pax为每个不匹配的模式或文件操作数写一条诊断消息到标准错误,并以错误状态退出。遍历目录过程中,pax将检测无限循环;例如,进入一个作为最后访问文件的祖先的先前访问的目录。在检测到无限循环时,pax将诊断消息写到标准错误然后终止。当pax处于读取方式或列表方式,使用-xpax归档格式和文件名、链接名、所有者名或任何其他扩展的头记录中的字段,这些字段无法从paxUTF8编码集格式转换到当前编码集和语言环境,pax写诊断消息到标准错误,如-oinvalid=选项所描述的那样处理文件,然后处理归档中的下一个文件。对于AIX5.3,在缺省情况下pax命令将忽略扩展属性。-U选项通知pax来归档或恢复扩展属性,它包括ACL。-pe选项将保留ACL。指定-pe选项时,如果pax无法保留ACL,诊断消息将写入标准错误,但是不会删除抽取的文件。将返回非零退出代码。pax归档文件中的扩展属性条目需要新的记录类型。示例1.$pax-wfmytest.ar-xpaxtest1该命令将在当前目录下为目录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的分块值。值得注意的是:pax