tar命令详解


http://study.chyangwa.com/IT/AIX/aixcmds5/tar.htm

tar 命令

用途

处理归档。

语法

tar { -c | -r | -t | -u | -x } [ -b Blocks ] [ -B ] [ -d ] [ -F ] [ -h ] [ -i ] [ -L InputList ] [ -l ] [ -m ] [ -N Blocks ][ -o ] [ -p ] [ -s ] [ -v ] [ -w ] [ -Number ] [ -f Archive ] [ -S Blocksb | -S Feet | -S Feet@Density ] [ File | Directory | -C Directory ] ...

描述

 

注意:由于在 tar 命令中对头块空间的限制,当恢复到某些系统时,大于 65,535 的用户号(UID)和组标识号(GID)将毁坏。大小约束只影响所有权和许可权而不对数据造成损害。所有权的毁坏发生在下列系统中:

  • 不使用 unamegname 字段来检查所有权的系统。
  • 与归档系统没有相同的用户和组标识的系统。

注:
  1. ustar 头格式允许文件大到 8 GB。因此,tar 命令支持归档最大 8 GB 的文件。
  2. tar 不保留任何稀疏分配的文件的稀疏属性。任何在恢复前原是稀疏的文件,将按文件大小在文件系统内分配其所有空间。

tar 命令通过将文件写入归档存储介质或将文件从介质中取回,来处理归档。 由 tar 命令使用的文件通过 File 参数来表示。如果 File 参数引用一个目录,则引用该目录并递归引用该目录下全部的文件和目录。

tar 命令在缺省设备(通常是磁带)上寻找归档,除非使用 -f Archive 标志指定另一个设备。当为美国磁带归档程序(USTAR)格式指定大于 100 个字符的路径名称时,请记住路径名称是由一个前缀缓冲区、一个 /(斜杠)和一个名称缓冲区组成的。

前缀缓冲区最大可以有 155 字节,而名称缓冲区最大可以容纳 100 字节。如果路径名称不能用斜杠分割为这两部分,则它不能被归档。这个限制是考虑到 tar 归档头的结构,而且必须为了符合标准和向下兼容而维护该限制。另外,硬链接或符号链接(“链接名称”)的目标长度不能超出 100 字节。

当写到归档时,tar 命令使用一个临时文件(/tmp/tar* 文件),并在内存中维护一个包含多链接文件的表。如果 tar 命令不能创建临时文件,或者没有足够的可用内存来放置链接表,您会接收到错误消息。

tar 命令有两组标志:必需标志和可选标志。必需标志控制 tar 命令的操作,包括 -c、-r、-t、-u 和 -x 标志。要执行 tar 命令至少要选择一个必需标志。选择了必需标志后,您可以选择一个可选标志,但它们对控制 tar 命令都不是必要的。

注:
  1. 当存储设备是一个普通文件或一个块特殊文件时,-u-r 标志可退格。然而,原始磁带设备不支持退格。因此当存储设备是原始磁带时,-u-r 标志进行倒带、打开磁带并再次读取磁带。
  2. 在块磁带上记录的长度是一块,但它们通常比在原始磁带上的密度的一半还少。因此,尽管按块记录原始磁带必须被读取两遍,但磁带运动总量比从块式磁带读取一遍单块记录还少。
  3. 流式磁带设备的结构不支持在磁带最后增加信息。因此,当存储设备是流式磁带时,-u-r 标志不是有效的选项。试图使用这些标志将导致下列错误消息: 

    tar: 更新和替换选项对流式磁带机无效。
  4. 磁带错误无法恢复。
  5. 可以通过更改缺省块大小改善 tar 命令在 IBM 9348 磁带机 12 型上的性能。要更改块大小,请在命令行输入下列命令: 

    chdev -1 <device_name> -a block_size=32k

要了解更多关于使用磁带设备的信息,请参阅 rmt 特殊文件。

标志

tar 命令的标志有两组,必需的和可选的。必须提供至少一个必需标志来控制 tar 命令。

必需标志
-c 创建新的归档,并将由一个或多个 File 参数所指定的文件写入归档的开头。
-r 将由一个或多个 File 参数所指定的文件写入归档的最后。这个标志不是对任何磁带设备都有效,因为有些设备不支持在磁带的最后添加信息。
-t 按照文件在归档中的顺序列出文件。文件可能会多次列出。
-u 只有当文件不在归档中,或写入归档后被修改过,才将这些文件(由一个或多个 File 参数所指定)写入归档的最后。-u 标志不是对任何磁带设备都有效,因为有些磁带设备不支持在磁带的最后添加信息。
-x 从归档中抽取一个或多个 File 参数指定的文件。如果 File 参数是指一个目录, tar 命令递归地从归档中抽取那个目录。 如果您未指定 File 参数,tar 命令从归档中抽取所有的文件。如果归档中包含同一文件的多个副本,最后抽取的副本覆盖所有以前抽取的副本。如果被抽取的文件在系统中不存在,则创建该文件。如果您有适当的许可权,tar 命令用与磁带上的相同所有者和组标识恢复所有文件和目录。如果您没有适当的许可权,将以您的所有者标识和组标识恢复文件和目录。只能请求文件最后出现的版本。
可选标志
-B 输入分块和输出分块强制为每个记录 20 块。使用这个选项,tar 命令可在那些可能未维护分块的通信信道间执行。
-b Blocks 指定每个记录的 512 字节块数量。缺省值和最大值都是 20,这是对磁带记录适当的数目。由于记录间隙大小的原因,用大的分块因子写的磁带可以比每个记录只有一块的磁带保存更多的数据。

当读取磁带时,块大小自动确定(-x-t 功能标志)。归档被 -u-r 功能更新时,使用现有的记录大小。只有当使用 -c 标志创建新的归档时,tar 命令才使用 Blocks 参数指定的值写入归档。

当用 -f 标志输出到普通文件时,您可以使用与磁盘块大小相匹配的分块因子来节省磁盘空间(例如,对于 2048 字节的磁盘块,使用 -b4 标志)。

-C Directory 使 tar 命令向由 Directory 变量指定的目录执行 chdir 子例程。使用 -C 标志允许归档不用相近公共父目录来关联的多个目录,使用简短的相对路径名称。例如,要从 /usr/include 和 /etc 目录中归档文件,可以使用下列命令:

tar  c -C /usr/include File1 File2 -C /etc File3 File4

-C Directory 标志必须在所有其它标志后出现,也可以在给定的文件名列表中出现。

-d 为块文件、特殊字符文件以及先进先出(FIFO)管道进程创建单独条目。通常,tar 命令不会归档这些特殊文件。当使用 -d 标志写入归档时,tar 命令使归档可以用 -x 标志恢复空目录、特殊文件以及先进先出(FIFO)管道进程。

注:
虽然任何人可以归档特殊文件,但只有拥有 root 用户权限的用户可以从归档中抽取特殊文件。
-F 在归档前检查文件类型。源代码控制系统(SCCS),修订控制系统(RCS),名为 core、errs 和 a.out 的文件,以及以 .o(点 o)结束的文件不归档。
-f Archive 使用 Archive 变量表示要读或写的归档。当未指定这个标志,tar 命令使用一个针对特定系统的缺省文件名(格式为 /dev/rmt0)。如果指定的 Archive 变量是 -(减号),tar 命令写入标准输出或从标准输入中读取。如果写入标准输出,您必须使用 -c 标志。
-h 强制 tar 命令监视符号链接,就好象它们是常规文件或目录。通常,tar 命令不监视符号链接。
-i 忽略头校验和的错误。tar 命令在归档中写入一个文件头,它包含每个文件的校验和。如果未指定这个标志,系统通过重新计算校验和来验证头块的内容,并在发生不匹配时,停止并报目录校验和错误。如果指定这个标志,tar 命令将记录错误,然后向前扫描直到查找到一个有效的头块。这就允许从多卷归档的后面的卷中恢复文件,而不需读取前面的卷。
-L InputList :-L 选项的 Inputlist 参数应该总是一个文件名称,该名称列出需要归档的文件和目录。 

同样地,InputList 参数可以是一个保存某文件名称的变量,该文件列出要归档的文件和目录。 

这个选项帮助将列在 InputList 参数中的文件和目录写入归档。 InputList 参数中的目录不被递归。对于包含于 InputList 参数中的目录,tar 命令只将目录写入归档,而不将目录中的文件和子目录写入归档。 

如果额外的文件和目录在命令行中跟在 InputList 参数后,InputList 参数的内容归档在这些文件和目录之后。 这些额外的文件或目录按它们的缺省行为归档,即将它们递归地归档。

-l 对于每个带有链接数大于 1 的文件,而其相应的链接却未归档,写错误消息到标准输出。 例如,如果 file1 和 file2 是用硬链接链接在一起,而只有 file1 存放在归档中,则 -l 标志将发出错误消息。 如果未指定 -l 标志,将不显示错误消息。
-m 使用抽取时间作为修改时间。缺省是保留文件的修改时间。
-N Blocks 当 tar 命令处理流式磁带归档时,允许它使用很大的块的簇。 然而请注意,在输入时,如果用这个标志创建了非常长的块大小, tar 命令将不能自动确定磁带的块大小。 没有 -N Blocks 标志时,tar 命令可以自动确定的最大块大小为 20 块。
-o 提供与旧版本(非 AIX)tar 命令的向下兼容。当使用这个标志进行读取时,被抽取的文件使用运行程序的用户的用户标识和组标识(UID 和 GID),而不是归档中的用户标识和组标识。 这是对于普通用户的缺省行为。
-p 恢复字段到它们的原始方式,忽略现有的用户权限屏蔽位(umask)。 setuid、setgid 和 tacky 位许可权也恢复给拥有 root 用户权限的用户。 这个标志恢复文件到其原始方式,但不恢复目录到其原始方式。
-s 如果 tar 命令未能使用 -s 标志成功尝试链接(常规链接)两个文件,请试着创建符号链接。
-SBlocksb, -S Feet, -S Feet@Density 指定每卷中的 512KB 块的数目(第一种格式),不依赖于磁带分块因子。 您也可以使用第二种格式,用英尺来指定磁带大小,在这种情况下,tar 命令假定一个缺省的 Density 变量。第三种格式允许您指定磁带长度和密度。 英尺被保守地假定为 11 英寸长。 这个标志让您更容易处理多卷磁带归档,这时 tar 命令必须能够确定每卷能放入多少块。

注:
  1. 磁带机在密度能力上有差异。Density 变量计算系统在磁带上可放入的数据量。
  2. 如果使用 1/4 英寸磁带设备,在指定 Feet 变量的值时,一定要考虑磁带设备上的磁道数目。 例如,可以使用 -S Feet@Density 标志来指定一个有 600 英尺磁带和 8000 字节/英寸密度的 4 磁道、1/4 英寸磁带机,如下: 
    -S 2400@8000

    这里,600 英尺乘以 4 磁道等于 2400 英尺。

-v 在处理每个文件时,列出它们的名称。使用 -t 标志,-v 给出磁带条目的更多信息,包括文件大小、上次修改的时间、用户标识(UID)、组标识(GID)和许可权。
-w 显示要进行的操作,跟着是文件名,然后等候用户确认。 如果回答是肯定的,则执行操作。 如果回答不是肯定的,则忽略文件。
-Number 使用 /dev/rmtNumber 文件,而不是缺省值。例如,-2 标志 和 -f/dev/rmt2 文件是相同的。

退出状态

该命令返回下列退出值:

0 成功完成。
>0 有错误发生。

示例

  1. 要将 file1 file2 文件写到缺省磁带机上新的归档中,请输入:
    tar  -c file1 file2
  2. 要从 /dev/rmt2 磁带设备上的归档文件中抽取 /tmp 目录里的全部文件,并以抽取时间作为修改时间,请输入: 

    tar -xm -f/dev/rmt2 /tmp
  3. 要新建一个包含 file1 文件的归档文件,并传递归档文件到 dd 命令,使之被写到 /dev/rmt1 设备,请输入: 

    tar -cvf - file1 | dd of=/dev/rmt1 conv=sync
  4. 要显示当前目录上 out.tar 磁盘归档文件中各文件的名称,请输入: 

    tar -vtf out.tar
  5. 要扩展压缩了的 tar 归档文件,fil.tar.z, 传递文件到 tar 命令,并从扩展了的 tar 归档文件中抽取全部文件,请输入: 

    zcat fil.tar.Z | tar -xvf -
  6. 要使用简短相对路径名称归档 /usr/include/usr/bin 文件的内容,请输入: 

    cd /usr
    tar -cvf/dev/rmt0 -C./include . -C ../bin .

    注:
    当用相对路径名称指定 -C 标志的多个实例,用户必须考虑到先前的 -C 标志请求。
  7. 要在使用 -S 标志时归档到一个 8 毫米设备,请输入: 

    tar -cvf /dev/rmt0 -S 4800000b /usr

    注:
    当归档到 8 毫米设备, 不推荐用 -S Feet 和 -S Feet@Density 标志,因为 8 毫米设备在写入磁带时不使用密度概念。
  8. 要归档所有 C 文件的一个列表(这些文件通过 -L 选项的 InputList 参数被列在文件中),请输入: 
    tar -cvf fl.tar -L fl_list

    这里,fl_list 是一个文件,它包含一个所有 .c 文件的列表。这可以通过以下命令获得: 

    ls *.c > fl_list
  9. 要使用 -L 选项设置变量来归档所有 C 文件的一个列表,请输入: 
    ls *.c > fl_list
    fl=fl_list
    tar -cvf var.tar -L $fl

文件

 

/dev/rmt0 指定缺省磁带设备。
/bin/tar 指定 tar 命令的符号链接。
/usr/bin/tar 包含 tar 命令。
/tmp/tar* 指定临时文件。

注:
在 AIX 3.2 中,整个 /bin 目录是到 /usr/bin 的一个符号链接。

Archives