第十一章压缩和备份本章要点备份命令压缩命令备份和压缩的综合应用11-1备份命令11.1.1tar命令tar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。11-1备份命令11.1.1tar命令语法:tar[主选项+辅选项]文件或者目录tar命令有主选项和辅选项,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。主选项:-c创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。-r把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。-t列出档案文件的内容,查看已经备份了哪些文件。-u更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。-x从档案文件中释放文件。11-1备份命令11.1.1tar命令辅助选项:-b该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512bytes)。-f文件名归档到普通文件,这个选项通常是必选的。-k保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。-m在还原文件时,把所有文件的修改时间设定为现在。-M创建多卷的档案文件,以便在几个磁盘中存放。-v详细报告tar处理的过程。-w每一步都要求确认。-z用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。-j通过bzip2压缩/解压缩文件,即在归档时使用bzip2压缩,在提取文件时使用bzip2解压缩。-Z通过compress压缩/解压缩文件,即在归档时使用compress压缩,在提取文件时使用compress解压缩。11-1备份命令11.1.1tar命令注意:在Linux系统中,普通用户使用tar命令时,最常用的一个用法是使用-f选项,将多个文件和目录子树打包成一个文件。它本身并不压缩文件,但是它可以使用选项与其他压缩程序联合使用,实现既打包,又压缩的功能。例:将当前目录下newdir3目录和kernel子目录中的所有文件,以及vitest文件归档到文件keydata.tar,并显示详细的归档过程。$tarcvfkeydata.tarnewdir3kernelvitest11-1备份命令11.1.1tar命令例:把/home目录下包括它的子目录全部做备份文件,备份文件名为usr.tar。$tarcvfusr.tar/home例:把/home目录下包括它的子目录全部做备份文件,并进行压缩,备份文件名为usr.tar.gz。$tarczvfusr.tar.gz/home例:查看usr.tar备份文件的内容,并以分屏方式显示在显示器上。$tartvfusr.tar|more例:把usr.tar.gz这个备份文件还原并解压缩。$tarxzvfusr.tar.gz11-1备份命令11.1.3档案文件命令ar用户可以使用ar命令集合许多文件,成为单一的档案文件。在档案文件中,所有成员文件皆保存有原来的属性与权限。ar命令可以建立、修改档案文件或者从档案文件中抽取文件。语法:ar[-dmpqrtx][cfosSuvV][a成员文件][b成员文件][i成员文件][备存文件][成员文件]ar命令包括指令参数和选项参数。11-1备份命令11.1.3档案文件命令ar指令参数-d删除备存文件中的成员文件。-m变更成员文件在备存文件中的次序。-p显示备存文件中的成员文件内容。-q将文件附加在备存文件末端。-r将文件插入备存文件中。-t显示备存文件中所包含的文件。-x自备存文件中取出成员文件。指令参数详解d:从库中删除模块。按模块原来的文件名指定要删除的模块。如果使用了任选项v则列出被删除的每个模块。m:该操作是在一个库中移动成员。当库中如果有若干模块有相同的符号定义(如函数定义),则成员的位置顺序很重要。如果没有指定任选项,任何指定的成员将移到库的最后。也可以使用'a','b',或'I'任选项移动到指定的位置。p:显示库中指定的成员到标准输出。如果指定任选项v,则在输出成员的内容前,将显示成员的名字。如果没有指定成员的名字,所有库中的文件将显示出来。q:快速追加。增加新模块到库的结尾处。并不检查是否需要替换。'a','b',或'I'任选项对此操作没有影响,模块总是追加的库的结尾处。如果使用了任选项v则列出每个模块。这时,库的符号表没有更新,可以用'ars'或ranlib来更新库的符号表索引。r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。t:显示库的模块表清单。一般只显示模块名。x:从库中提取一个成员。如果不指定要提取的模块,则提取库中所有的模块。11-1备份命令11.1.3档案文件命令ar选项参数a成员文件将文件插入备存文件中指定的成员文件之后。b成员文件将文件插入备存文件中指定的成员文件之前。c建立备存文件。f为避免过长的文件名不兼容于其他系统的ar指令指令,因此可利用此参数,截掉要放入备存文件中过长的成员文件名称。i成员文件将问家插入备存文件中指定的成员文件之前。o保留备存文件中文件的日期。s若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。S不产生符号表。u只将日期较新文件插入备存文件中。v程序执行时显示详细的信息。V显示版本信息。11-1备份命令11.1.3档案文件命令ar例:将目标文件bar.o加入到档案文件foo.a中。$ar-rfoo.abar.o11-2压缩命令11.2.2gzip命令gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出“.gz”的扩展名。gzip比compress的压缩比高。语法:gzip[选项]压缩(解压缩)的文件名-c将输出写到标准输出上,并保留原有文件。-d将压缩文件解压。-l对每个压缩文件,显示下列字段:压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名字-r递归式地查找指定目录并压缩其中的所有文件或者是解压缩。-t测试,检查压缩文件是否完整。-v对每一个压缩和解压的文件,显示文件名和压缩比。-num用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。11-2压缩命令11.2.2gzip命令例:使用gzip压缩/home/globus/vitest$gzip–v/home/globus/vitest例:在/home/globus/目录下,解压缩vitest.gz文件。$gzip–d/home/globus/vitest.gz例:压缩tar备份文件usr.tar,此时压缩文件的扩展名为.tar.gz。$gzipusr.tar11-2压缩命令11.2.3gunzip命令解压缩用gzip(.gz)、compress(.Z)、以及zip命令或者Windows下的winzip压缩过的文件。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。语法:gunzip选项文件列表gunzip默认解压缩指定文件。如果加入-l选项,将只列出压缩文件的内容,而不解压缩。选项-r递归解压缩,深入目录结构中,递归地解压缩指定目录中的文件及其子目录内的文件。11-2压缩命令11.2.3gunzip命令例:使用gzip命令压缩wu-ftp-2.6.0.tar文件。$gzip–lwu-ftp-2.6.0.tar$gunzipwu-ftp-2.6.0.tar例:解压wu-ftp-2.6.0.tar文件。$gzip–dwu-ftp-2.6.0.tar或11-2压缩命令11.2.4zip命令zip与Windows的winzip压缩程序产生相同的压缩文件。语法:zip压缩文件名被压缩的文件列表例:利用zip命令压缩当前目录中的result.txt文件和vitestpart文件,结果保存到myzip.zip文件。$zipmyzip.zipresult.txtvitestpart11-2压缩命令11.2.5unzip命令在Windows系统下,使用winzip压缩软件压缩的文件可以用unzip命令解压缩,该命令用于解扩展名为.zip的压缩文件。语法:unzip[选项]压缩文件名.zip-x文件指定不要处理.zip压缩文件中的哪些文件。-v查看压缩文件目录,但不解压。-t测试文件有无损坏,但不解压。-d目录指定文件解压缩后所要存储的目录。-z仅显示压缩文件的备注文字。-n解压缩时不要覆盖原有的文件。-o不必先询问用户,unzip执行后覆盖原有文件。-j不重建文档的目录结构,把所有文件解压到同一目录下。11-2压缩命令11.2.5unzip命令例:解压缩刚才生成的myzip.zip文件。$unzipmyzip.zip例:将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。$unzip-ntext.zip-d/tmp11-2压缩命令11.2.6bzip2命令bzip2采用新的压缩算法,压缩效果比传统的LZ77/LZ78压缩演算法来得好。若没有加上任何参数,bzip2压缩完文件后会产生扩展名为.bz2的压缩文件,并删除原始的文件。语法:bzip2[-cdfkqstvzVL][--repetitive-best][--repetitive-fast][-压缩等级][要压缩的文件]11-2压缩命令11.2.6bzip2命令常用选项-c或--stdout将压缩与解压缩的结果送到标准输出。-d或--decompress执行解压缩。-f或--forcebzip2在压缩或解压缩时,强制覆盖相同文件名。默认不覆盖现有文件。-k或--keepbzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数。-q或—quiet压制不重要的警告信息。-s或--small降低程序执行时内存的使用量。-t或--test测试.bz2压缩文件的完整性。-v或--verbose压缩或解压缩文件时,显示详细的信息。-z或--compress强制执行压缩,而不管执行的是哪个程序。-L,-V,--license显示软件版本,许可证条款及条件。-1to-9设置压缩时的区块大小。11-2压缩命令11.2.6bzip2命令例:使用压缩程序bzip2压缩当前目录下的归档文件keydata.tar。$bzip2keydata.tar命令执行的结果是:产生keydata.tar.bz2文件,原有文件keydata.tar被删除。例:对文件keydata.tar.bz2执行解压缩。$bzip2–dkeydata.tar.bz211-2压缩命令11.2.7bunzip2命令bunzip2可解压缩.bz2格式的压缩文件。bunzip2实际上是bzip2的符号链接,执行bunzip2与bzip2–d的效果相同。11-3综合实例用户经常在网上看到类似wu-ftpd-2.6.0.tar.gz、Linux-2.6.6.tar.bz2、oracle10g.cpio.gz等文件,这些文件名中同时包含两个不同的tar、gz、bz2或者cpio扩展名。这些文件名表示首先被归档,然后再被压缩。11-3综合实例11.3.1各