首页 > 技术文档 > VMware > Unix 系统压缩和解压缩命令详解
2011
09-10

Unix 系统压缩和解压缩命令详解

  在 windows 下有很多种压缩与解压缩工具,其主要功能是将一目录下的众多文件或子目录打包并压缩成一个文件,便于备份、组织与管理。但是在 unix 系统中,却无此类软件。不过我们可以利用 unix 系统本身的 tar、cpio 和 compress 等命令来做到打包和压缩的效果。

  在 unix 系统中,我们一般是先通过 cpio 或 tar 将多个文件打包成一个文件库后,再用 compress 将文件库压缩来达到目的。下面分别以cpio和tar来说明使用的方法和步骤。 

  一、cpio 命令打包压缩 

  1. 文件或目录打包,打包有如下多种情况:
  a)含子目录打包: 
  # find /usr/lib -print cpio -o >/tmp/temp1.cpio 

  将 /usr/lib 目录下的文件与子目录打包成一个文件库为 /tmp/temp1.cpio。 

  若通过 -o 选项来打包整个目录下的所有文件与子目录,常先利用 find 目录名 -print 来找出所有文件与子目录的名称,通过管道“| ”传给 cpio 打包。 

  b)不含子目录的打包:
  # ls /usr/lib cpio -o > /tmp/temp1.cpio

  将 /usr/lib 目录下的文件(不含子目录下的文件)打包成一个文件库为 /tmp/temp1.cpio 。 

  c)特定文件打包:
  可利用文本搜索命令 grep 与管道配合,可以排除或选择特定类型的文件传给 cpio 打包。
  # ls /usr/lib/*.c cpio -o >/tmp/temp1.cpio
  # ls /usr/lib grep ′\.c$′ cpio -o >/tmp/temp1.cpio 
  意思均为找出 /usr/lib 目录下以 .c 结尾的文件予以打包。 

  # ls /usr/lib grep abcd cpio -o > /tmp/temp1.cpio
  其意为找出 /usr/lib 目录下文件名中含有 abcd 字符的文件予以打包。

  # ls /usr/lib grep -v abcd cpio -o > /tmp/temp1.cpio
  其意为找出/usr/lib目录下文件名中不含 abcd 字符的文件予以打包。-v 选项在 grep 命令中的意思是排除含有字符串的行列。 

  如此,可充分利用 unix 的管道和一些命令的强大功能来实现文件的打包。 

  2. 文件压缩: 
  文件打包完成后,即可用 unix 中的 compress 命令(/usr/bin 下)压缩打包文件。对一般的文本文件,压缩率较高,可达81%。 

  # compress /tmp/temp1.cpio
  其意为将文件库 /tmp/temp1.cpio 压缩为 /u0/temp1.cpio.Z(自动添加 .Z 并删除 /tmp/temp1.cpio )。 

  3. 文件解压:
  # uncompress /tmp/temp1.cpio.Z
  其意为自动还原为 /tmp/temp1.cpio。 

  4. 文件解包展开:
  将按原目录结构解包展开到当前所在目录下。若以相对路径打包的,当解包展开时,也是以相对路径存放展开的文件数据;若以绝对路径打包的,当解包展开时,也是以绝对路径存放展开的文件数据。因此注意若为相对路径,应先进入相应的目录下再展开。
   # cd /u1 
   # cpio -id < /tmp/tmp1.cpio
  意为将 /tmp/temp1.cpio 解压到 /u1 下(这里假设 temp1.cpio 以相对路径压缩)。 

  # cpio -iud < /tmp/temp1.cpio
  若加 u 选项,意为文件若存在将被覆盖,即强制覆盖。 

  # cpio -id < /tmp/temp1.cpio *.c
  意为展开其中的 *.c 文件。 

  5. 文件显示:
  # cpio -it < /tmp/temp1.cpio [*.c]
  其意为显示文件库内的文件名称。 

  二、tar 命令打包压缩

  1. 文件或目录打包:
  # tar -cvf /tmp/temp2.tar /usr/lib 
  将 /usr/lib 目录下的文件与子目录打包成一个文件库为 /tmp/temp2.tar。 

  # tar -cvf /tmp/temp2.tar /usr/lib *.c *.f 
  将 /usr/lib 目录下的 *.c *.f 等文件(不含子目录)打包。注意:如果指定文件如*.c *.f或*.*,则打包时均不含子目录。如果指定为.或*,则含子目录。 

  2. 文件压缩:
  # compress /tmp/temp2.tar
  其意压缩为/tmp/temp2.tar.Z 

  3. 解压文件:
  # uncompress /tmp/temp2.tar.Z
  其意还原为/tmp/temp2.tar

  4. 解包展开:
  # tar -xvf /tmp/temp2.tar 

  若以相对路径打包的,解包时,以相对路径存放展开的文件数据;若以绝对路径打包的,解包时,以绝对路径存放展开的文件数据。若指定展开的文件名,须注意文件的目录路径。 

  5. 文件显示: 
  # tar -tvf /tmp/temp2.tar
  显示文件库内的文件名称。当指定文件名时,亦须注意文件的路径。

  相对来说这两个命令各有优缺点:

  1)tar 速度比 cpio 慢,且不能跨越两份存储媒体,但文件格式几乎在所有的 unix 系统中都能通用,且使用简便。 
  2)cpio 则由于可通过管道功能,使得其打包时的文件选择、排除功能非常强,且能跨越多份媒体,并能备份特殊的系统文件。

最后编辑:
作者:北街
身高八尺,腰围也是八尺!

  1. 申请交换链接。同意的话回复邮件就可以了,即时收取的。

  2. 虽然有点晚了,但阿修罗还是要祝贺博主中秋节快乐!
    o(∩_∩)o…

  3. 你好可以与贵站交换下友情链接吗
    我们的站是 http://www.chengxuyuans.com/ 谢谢
    可以qq或邮箱联系 😛