如何在Linux下压缩文件
对许多用户来讲,在DOS和Windows环境下利用工具软件WinZip、ARJ等压缩或解压文件是比较容易的事。可是,在Linux中如何对文件进行压缩与解压呢? 用tar创建存档 tar是“tape archive”(磁带存档)的简称,它出如今尚未软盘驱动器、硬盘和光盘驱动器的计算机早期阶段。那时软件的发行和备份都须要大卷的磁带,计算机上运行的头几个程序中就得有一个是磁带的阅读程序。随着时间的推移, tar命令逐渐变为一个将不少文件进行存档的工具,目前许多用于Linux操做系统的程序就是打包为tar档案文件的形式。 tar 命令的格式是: tar [option] <file> tar命令有不少参数,利用f选项、设备或文件的名字能够指示tar命令将档案置于特定的设备或文件中。当为tar的档案建立一个文件时,这个文件名的扩展一般是若是指定了一个目录名,那么它全部的子目录都会被包含在档案之中。 利用tar命令和f选项的格式以下所示: #tar opionsf archive-name.tar directory-and-filenames 要建立一个档案应使用c选项,与f选项一块儿,c选项会在设备或文件中建立档案,应在f选项的左边输入这一选项。在下例中,目录mydir和它全部的子目录都被存入文件myarch.tar中。 #tar cf myarch.tar mydir 若是想要改动已经存档的目录中的文件,可使用u选项使tar更新档案中的文件。tar比较每个档案文件与相应用户目录中文件最近一次修改的时间,而后将上一次存档以后又被修改过的文件拷贝到档案文件中去。在用户目录中新建立的文件也会被添加到档案文件中。在下面的例子中,用户用mydir目录中最近被修改或添加的文件来对myarch.tar文件进行更新。 #tar uf myarch.tar mydir 若是想查看在一个档案中存储着哪些文件,可使用tar命令和t选项。下面命令列出全部存储在myarch.tar档案中的文件: #tar tf myarch.tar 要将文件备份到一个特定的设备,只须把设备名做为档案。在下面的例子中,用户在/dev/fdo设备的软盘中建立了一个档案,并将mydir目录中全部的文件都拷贝到档案中。 #tar cf/dev/fdo mydir 要恢复设备磁盘中的文件,可以使用xf选项: #tar xf/dev/fdo 若是所备份的文件大小超过设备可用的存储器,好比软盘,此时就能够建立一个使用多个标号的tar档案。当使用m选项向一个软驱进行存档时,tar命令在一张软盘已满的时候会提醒再放入一张新的软盘。 #tar cmf/dev/fdo mydir 要想恢复几张盘中的档案,只要将第一张软盘放入软驱,而后输入有x和m选项的tar命令。必要时会被提醒放入另一张软盘。 #tar xmf/dev/fdo tar操做不会对档案文件实行压缩操做。若是想压缩档案文件,能够指示tar激活gzip实用工具,在存档以前对文件进行压缩。利用z选项,tar在对文件存档以前首先要使用gzip来压缩文件。当恢复文件时,一样的Z选项将激活gzip对文件解压。 #tar czf myarch.tar mydir 值得注意的是,压缩档案中的单个文件和总体压缩档案是不一样的。一般档案文件是为了便于传输而把几个文件组合成为一个tar文件。为了缩短传输时间,档案应当越小越好,能够将其压缩而后传送压缩后的版本。接收者能够对之解压缩,而后恢复tar文件。在tar文件上使用gzip将会产生有.tar.gz扩展名的文件。扩展名.gz被加到被压缩的gzip文件名以后。 下面的例子建立了myarch.tar的一个压缩的版本,它具备了.gz的扩展名。 #gzip myarch.tar #ls #myarch.tar.gz tar命令虽然有很是多的参数,可是使用起来并不困难,能够快速而又简单地为任何须要的子目录生成档案文件。 首先,咱们来创建一个有三个文件的子目录,再创建一个有另外三个文件的子目录,以下所示: # mkdir mydir #cd mydir # touch file1 file2 file3 # mkdir mydir2 #cd mydir2 # touch file21 file22 file23 #cd../.. #tree mydir mydir file1 file2 file3 mydir2 file21 file22 file23 如今已经有了一个子目录和其中的文件,使用这个命令的c(生成)和f(文件)参数来生成一个tar档案文件: # tar cf mydir.tar mydir # ls -l *.tar - r w - r - - r - - 1 bball u s e r s 10240 Jan 5 15 : 01 mydir. t a r 请注意,原来的子目录并无发生变化。在缺省的状况下,tar命令不会删除原来的子目录和文件。若是想看看命令执行的过程,可使用v参数,以下所示: # tar cvf mydir.tar mydir mydir/ mydir/file1 mydir/file2 mydir/file3 mydir/mydir2/ mydir/mydir2/file21 mydir/mydir2/file22 mydir/mydir2/file23 tar命令在进行操做的时候,就会把正在添加到档案文件中去的子目录和文件的文件名显示出来。使用w参数,即交互参数,这样tar命令在执行的过程中会询问是否想加入每一个文件。当想有选择地备分内容很少的子目录的时候,这样就很是地方便,以下所示: # tar cwf mydir.tar mydir add mydir?y add mydir/file1?n add mydir/file2?y add mydir/file3?n add mydir/mydir2?y add mydir/mydir2/file21?y add mydir/mydir2/file22?n add mydir/mydir2/file23?y 在上面的例子中,没有把文件file一、file3和文件file22归档。可使用tar命令的t参数列出档案文件中的内容,f参数定义操做所使用的tar档案文件,以下所示: # tar tf mydir.tar mydir/ mydir/file2 mydir/mydir2/ mydir/mydir2/file21 mydir/mydir2/file23 须要注意的是,若是参数的顺序放错了,tar命令会显示出错信息并退出。 下面就来看看如何来释放整个的档案文件或者其中的某一个文件。若是想释放其中全部的文件,能够同时使用-x释放参数和-f。为了了解命令执行的过程,还能够加上-v参数: # tar xvf mydir.tar mydir/ mydir/file2 mydir/mydir2/ mydir/mydir2/file21 mydir/mydir2/file23 若是只是想从档案文件中释放几个文件的话,能够再次使用w参数: # tar xvwf mydir.tar extract mydir/?y mydir extract mydir/file2?y mydir/file2 extract mydir/mydir2/?y mydir/mydir2/ extract mydir/mydir2/file21?y mydir/mydir2/file21 extract mydir/mydir2/file23?y mydir/mydir2/file23 上例代表查看了档案文件,并交互地释放了文件。若是只想从档案文件中释放某一个文件,能够在命令行中指定这个文件。做为示例,我先删除了原始的mydir子目录,而后使用一个空的子目录进行以下操做: # tar xf mydir.tar mydir/mydir2/file23 # tree mydir m y d i r - - mydir2 - - file23 1 directory, 1 file 注意,正如所看到的只有一个文件被释放出来。虽然tar命令不会覆盖整个的子目录,可是它会覆盖掉那些有着相同文件名的文件。 值得一提的是,还可使用其它程序,如BRU-2000或者taper脚本程序来备份系统或者选定的文件和子目录。OpenLinux操做系统也能够经过cron日程安排来自动进行文件的归档整理工做。 创建cpio档案文件 cpio命令能够从tar或者cpio档案文件中拷入或者拷出文件。由于cpio命令和tar命令兼容,因此我这里再也不详细介绍它如何工做。可是这个命令具有一些tar命令没有的功能,以下所示: ◆ 支持cpio和tar两种档案文件格式; ◆ 支持许多老式磁带数据格式; ◆ 可以经过一个管道读取文件的文件名。 只有不多的Linux软件包是以cpio格式发行的。若是对cpio命令的详细状况感兴趣的话,能够阅读它的使用手册。 使用gzip压缩文件 gzip命令是用来压缩文件的。它不只能够用来压缩大的、较少使用的文件以节省磁盘空间,还能够和tar命令一块儿构成Linux操做系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。 gzip命令的格式是: gzip [option] [file] gzip很容易使用。若是想压缩某个文件或者磁带档案文件,可输入下面的内容: # gzip mydir.tar 在缺省的状态下,gzip会压缩文件、再加上一个.gz扩展名,而后删除掉原来的文件。若是想解压缩文件,可使用gzip的对应程序命令gunzip或者gzip命令的-d解压缩参数。可是必须保证这个用于解压缩的文件有.gz(或者.Z、-gz、.z、-z、或者_z)扩展名,不然gzip命令和gunzip命令都会显示出错信息。若是想使用本身的扩展名,可使用-S后缀参数,以下所示: # gzip -S .gzipped mydir.tar gzip还能够处理用zip命令、compress命令和pack命令压缩的文件包。若是想在压缩或者解压缩的过程当中看到更多的信息,可使用-l列清单参数看到文件在被压缩或解压缩的时候的文件长度。在前一个例子中,压缩完子目录mydir以后,可使用gzip命令按照下面的方法获得有关的数据: # gzip -l mydir.tar.gz compressed uncompr.ratio uncompressed_name 312 21330 98.2% mydir.tar 此外,gzip还有一个颇有用的参数-t,能够用来测试压缩文件的完整性。若是文件正常,gzip不会给出任何显示。若是想看到OK这两个字母,能够在测试某个文件时使用-tv参数。 使用compress压缩文件 compress命令就像它的文件名那样是用来压缩文件的。这是Unix中出现得比较早的一个压缩程序,它经过使用自适应的Lemple-Ziv编码来缩小所指文件的大小。每个文件将被一个带有.Z扩展名的压缩文件所代替,但文件的属主关系、访问时间和修改时间将保持不变。若是没有指点文件,则接受标准输入的文件进行压缩并送到标准输出。 compress命令格式是: compress [option] [file] 与compress对应的有一个解压缩命令uncompress,其格式以下: uncompress [option] [file] 它使“.Z”的压缩文件恢复。 compress和uncompress命令的选项以下: ◆-c 写到标准输出,不改变文件。 ◆-f 强制压缩,即便文件并不真正减少或.Z文件已经存在,也进行压缩。 ◆-v 显示每个被压缩文件的缩小的百分比。 下面举例说明compress命令的用法: #compress file 上面代码代表将生成压缩文件file.Z代替file,要解压缩输入: #uncompress file.Z 注意,像使用gzip命令同样,使用uncompress命令时必须给出一个带有.Z扩展名的文件名,不然uncompress命令显示出错信息。
欢迎关注本站公众号,获取更多信息