tar c[BDEFhijlnopPTvwzZ@/[0-7]][bf][X...] [blocksize] [tarfile] [size] [exclude-file]... {file | −I include-file | −C directory file}...
tar r[BDEFhijlnTvwzZ@/[0-7]][bf] [blocksize] [tarfile] [size] {file | −I include-file | −C directory file}...
tar t[BFhijlnTvzZ[0-7]][f][X...] [tarfile] [size] [exclude-file]... {file | −I include-file}...
tar u[BDEFhijlnTvwzZ@/[0-7]][bf] [blocksize] [tarfile] [size] file...
tar x[BFhilmnjopTvwzZ@/[0-7]][f][X...] [tarfile] [size] [exclude-file]... [file]...
tar 命令将文件归档到名为 tarfile 的单个文件以及从中提取文件。tarfile 通常是磁带,但也可以是任意文件。tar 的操作受 key 参数控制。key 是一个恰好包含一个函数字母(c、r、t、u 或 x)和零个或多个函数修饰符(字母或数字)的字符串,具体取决于使用的函数字母。key 字符串不包含任何 SPACE 字符。函数修饰符参数在命令行中列出的顺序与对应函数修饰符在 key 字符串中出现的顺序相同。
−I include-file、−C directory file 和 file 参数指定要归档或提取哪些文件或目录。在所有情况下,出现的目录名称指其中的文件和该目录的子目录(以递归方式)。用大括号 ({ }) 括起的参数表明必须指定其中一个参数。
支持下列操作数:
在 directory 上执行 chdir 操作(请参见 cd(1)),并在 file 中执行 c(创建)或 r(替换)操作。file 应使用短的相对路径名称。如果 file 是 “.”,则将所有文件归档到 directory 中。通过此操作数,可以从多个不存在相关的临近公共父目录的目录进行文件归档。
打开含有一个文件列表的 include-file(每行一个文件),将其视同每个文件单独出现在命令行中那样处理。请注意结尾的空格。还应注意开头的空格,因为对于包含的文件中的每一行,整行(新行除外)都用来与要包含的文件的初始字符串匹配。如果还指定了排除的文件(请参见 X 函数修饰符),则其优先级高于所有包含的文件。如果 exclude-file 和 include-file(或者在命令行中)中同时指定了一个文件,则会排除该文件。
要归档(当指定 c、r 或 u 函数时)、提取 (x) 或列出 (t) 的常规文件或目录的路径名称。当 file 是目录的路径名称时,该操作应用于该目录的所有文件并(以递归方式)应用于子目录。
归档文件和未指定 E 标志(请参见“函数修饰符”部分)时,文件名不得超过 256 个字符。另外,必须可以将该名称分开放在父目录名称中,使前缀的长度不超过 155 个字符,名称不超过 100 个字符。如果指定了 E,可以指定长度最多为 PATH_MAX 个字符的名称。
例如,如果不使用 E 标志,则无法归档基名长度超过 100 个字符的文件。如果字符位置 151-156 中某处的目录名称中出现斜杠,则其目录部分为 200 个字符且其基名为 50 个字符的文件可以归档(未使用 E)。
key 参数的函数部分由下面字符之一指定:
创建。从 tarfile 的开头而不是末尾开始写入。
替换。指定 file 在 tarfile 的末尾处写入。用扩展文件头创建的文件必须用扩展文件头来更新(请参见“函数修饰符”下方的 E 标志)。不是用扩展文件头创建的文件无法用扩展文件头进行修改。
目录。每当指定文件出现在 tarfile 中时,就列出其名称。如果未指定 file 参数,tarfile 中所有文件的名称及任何关联的扩展属性都会列出。通过 v 函数修饰符,可以显示指定文件的更多信息。
更新。如果指定的 file 原先不在 tarfile 中,或者它们自上次写入该 tarfile 后进行了修改,则指定文件被写入到 tarfile 的末尾。更新可能会非常慢。在 5.x 系统上创建的 tarfile 无法在 4.x 系统上更新。用扩展文件头创建的文件必须用扩展文件头来更新(请参见“函数修饰符”下方的 E 标志)。不是用扩展文件头创建的文件无法用扩展文件头进行修改。
提取或恢复。指定 file 从 tarfile 中提取出来并写入 tarfile 中相对当前目录指定的目录。使用要提取的文件和目录的相对路径名称。
tar 归档文件中包含的绝对路径名称使用绝对路径名称进行解压缩,即不删除开头的正斜杠 (/)。
缺省情况下,绝对路径名(那些以 / 字符开头的路径名)已删除开头的斜杠,因此应相对于当前目录提取这些文件和目录。
如果与指定文件匹配的目录的内容已写入 tarfile,则会以递归方式提取此目录的内容。如果可能的话,会恢复所有者、修改时间和模式。否则,必须是超级用户才能恢复所有者。字符特殊设备和块特殊设备(由 mknod(1M) 创建)只能由超级用户提取。如果未指定 file 参数,则提取 tarfile 的整个内容。如果 tarfile 包含多个相同名称的文件,每个文件将被写入相应的目录,并覆盖原来的文件。文件名替换通配符不能用来从归档文件中提取文件。而应使用以下形式的命令:
tar xvf ... /dev/rmt/0 `tar tf ... /dev/rmt/0 | \ grep 'pattern' `
当提取使用 r 或 u 函数创建的磁带时,无法正确设置目录修改时间。由于受磁带机的限制(例如没有退格或附加功能),这些相同的函数无法供许多磁带机使用。
当使用 r、u 或 x 函数或 X 函数修饰符时,指定文件必须与 tarfile 中对应的文件完全匹配。例如,要提取 ./ thisfile,您必须指定 ./thisfile 而不是 thisfile。t 函数显示每个文件的归档方式。
以下字符可以与选择所需函数的字母结合使用。
分块因子。当读取或写入原始磁性归档文件时使用(请参见下面的 f)。blocksize 参数指定要包含在 tarfile 上执行的每个读取或写入操作中的 512 字节磁带块数。最小值是 1,缺省值是 20。最大值是可用内存量及有关特定磁带设备的分块要求(有关详细信息,请参见 mtio(7I))的函数。最大值不能超过 INT_MAX/512 (4194303)。
读取磁带归档文件时,将自动检测其实际分块因子,前提是它小于等于名义分块因子(blocksize 参数的值,或缺省值(未指定 b 修饰符时))。如果实际分块因子子大于名义分块因子,则发生读取错误。请参见“示例”部分中的示例 5。
块。强制 tar 执行多次读取(如有必要),以恰好读取足以填入块中的字节数。此函数修饰符使得 tar 可以在整个以太网中使用,因为即使有更多数据送入,管道和套接字也只是返回部分块。当从标准输入 “−” 读取时,此函数修饰符在缺省情况下处于选中状态,以确保 tar 能从短时间读取中恢复。
数据更改警告。与 c、r 或 u 函数字母结合使用。使用 t 或 x 函数字母忽略。如果文件大小在文件归档过程中发生更改,则将此情况作为警告而不是错误处理。警告消息仍在写入,但是退出状态不受影响。
将扩展文件头写入 tarfile。(与 c、r 或 u 函数字母结合使用。使用 t 或 x 函数字母忽略。)在 tarfile 中写入扩展文件头时,修改时间的维护粒度是微秒而不是秒。此外,支持长度不超过 PATH_MAX 个字符且不使用 E 就无法归档的文件名和超过 8GB 的文件大小。当归档更大的文件和/或名称更长的文件或其 UID/GID 超过 2097151 时,或者如果要求使用微秒时间粒度时,需要使用 E 标志。
文件。使用 tarfile 参数作为 tarfile 的名称。如果指定 f 则不会搜索 /etc/default/tar。如果忽略 f,tar 将使用TAPE 环境变量(如设置)指示的设备。否则,tar 使用 /etc/default/tar 中定义的缺省值。与 archiveN 字符串匹配的数字用作输出设备(使用文件中指定的块和大小设置)。例如,
tar -c 2/tmp/*
将输出写入到在 /etc/default/tar 中指定为 archive2 的设备。
如果 tarfile 的名称是 “−”,tar 会相应地写入标准输出或从标准输入读取。tar 可用作管道的头部或尾部。tar 还可用来通过以下命令移动分层结构:
example% cd fromdir; tar cf − .| (cd todir; tar xfBp −)
如果使用一个 F 参数,tar 可排除所有名为 SCCS 的目录并从 tarfile 中排除 RCS。如果使用两个参数 FF,tar 可排除名为 SCCS 和 RCS 的所有目录、以 .o 作为后缀的所有文件及所有名为 errs、core 和 a.out 的文件。
像处理普通文件或目录那样跟踪符号链接。通常,tar 不跟踪符号链接。
忽略目录校验和错误。
仅限 c 模式。使用 bzip2 对生成的归档文件进行压缩。在提取或列表模式下,此选项被忽略。读取归档文件时,本实现自动识别 bzip2 压缩类型。升级/替换首先解压缩,然后应用相同的机制自动压缩归档文件。
链接。如果无法解析所有指向被归档文件的链接,则输出错误消息。如果未指定 l,则不打印错误消息。
修改。文件的修改时间是其提取时间。此函数修饰符仅对 x 函数有效。
所读取的文件是非磁带设备。由于 tar 能够随机查找归档文件,因此归档文件的读取速度较快。
所有权。将运行程序的用户(而非 tarfile 中的用户)的用户和组标识符指定给提取的文件。这是非 root 用户的缺省行为。如果未设置 o 函数标识符且用户是 root 用户,则提取的文件采用 tarfile 中文件的组和用户标识符(有关更多信息,请参见 chown(1))。o 函数修饰符仅对 x 函数有效。
将指定文件恢复到其原始模式和 ACL(如果适用),并忽略现在的 umask(1)。如果以超级用户身份使用指定的 x 函数字母进行调用,则此行为是缺省行为。如果还提取超级用户、SETUID 和粘性信息,则使用文件的原始所有者和权限而不是以 root 用户身份来恢复这些文件。当此函数修饰符与 c 函数结合使用时,ACL 在 tarfile 文件中创建时可生成其他信息。当带有 ACL 的 tarfile 使用以前版本的 tar 提取时,会发生错误。
创建归档文件时,禁止在归档文件中的目录条目中添加尾随 /。
提取归档文件时,应保留路径名。缺省情况下,当提取归档文件时,绝对路径名中(以 / 字符开头的那些路径名)会删除开头的斜杠。同时,tar 拒绝提取路径名包含双点 (..) 的归档文件条目。
此选项禁止这些行为。
仅当系统配置有 Trusted Extensions 时,此修饰符才可用。
当此修饰符与函数字母 c、r 或 u 结合用来创建、替换或更新 tarfile 时,每个归档文件和目录关联的敏感标签将存储在 tarfile 中。
指定 T 将隐式指定函数修饰符 p。
当与函数字母 x 结合用来提取 tarfile 时,tar 程序将验证归档文件中指定的文件敏感标签是否等于目标目录的敏感标签。如果不相等,则不会恢复文件。此操作必须从全局区域进行调用。如果归档文件有一个相对路径名,则会将其恢复到有相同标签的对应目录(如果可用的话)中。此过程通过以下方式完成:即将标签等于该文件的区域的根路径名添加到当前的目标目录。如果不存在这样的区域,则不会恢复文件。
Trusted Solaris 8 对提取有标签的归档文件提供有限支持。仅解释敏感标签和多级别目录的设置。会不经提示直接忽略特权设置和审计属性标志。如果有相同标签的区域可用,多级别目录设置(包括指向单级别目录的符号链接)会映射到区域相关的路径名。此支持的目的在于方便起始目录的迁移。体系结构差异能阻止将任意有标签的文件从 Trusted Solaris 8 提取到 Trusted Extensions 中相同的路径名。除非文件的归档标签与目标标签匹配,否则无法提取文件。
详细模式。输出开头是该函数字母的每个文件的名称。通过 t 函数,v 可提供关于 tarfile 条目的更多信息。该列表与 ls(1) 命令的 –l 选项生成的格式相似。
条件。输出要采用的操作和文件名称,然后等待用户的确认。如果响应是肯定的,则执行操作;否则不执行操作。此函数修饰符不能与 t 函数结合使用。
排除。使用函数 c、x 或 t 时,可以使用 exclude-file 参数作为包含要从 tarfile 排除的文件(或目录)相对路径名列表的文件。请注意结尾的空格。同时应注意前导空格,因为对于排除文件的每一行而言,整行(新行除外)都会用来与要排除文件的初始字符串进行匹配。排除文件中的行会进行完全匹配,所以如果 tar 正在备份相对路径名时,像 “/var” 这样的条目不会排除 /var 目录。该条目应在这些情况下读取 “./var”。tar 命令不会扩展排除文件中的 shell 元字符,所以指定像 “*.o” 这样的条目对于排除所有名称以 “.o” 为后缀的文件不会起作用。如果要排除复杂的文件列表,排除文件应通过某些方式生成,如具有相应条件的 find(1) 命令。
可以使用多个 X 参数,其中每个参数一个 exclude-file。如果同时指定了包含文件(请参见 −I include-file 操作数),则排除文件优先于所有包含文件。如果 exclude-file 和 include-file(或者在命令行中)中同时指定了一个文件,则会排除该文件。
仅限 c 模式。使用 gzip 对生成的归档文件进行压缩。在提取或列表模式下,会忽略此选项。读取归档文件时,本实现自动识别 gzip 压缩类型。升级/替换首先解压缩,然后应用相同的机制自动压缩归档文件。
仅限 c 模式。使用 compress 对生成的归档文件进行压缩。请参见 compress(1)。在提取或列表模式下,此选项被忽略。读取归档文件时,本实现自动识别 compress 压缩类型。升级/替换首先解压缩,然后应用相同的机制自动压缩归档文件。
在归档文件中包括扩展属性。缺省情况下,tar 不会在归档文件中放入扩展属性。tar 通过此标志寻找要放入归档文件中文件的扩展属性,并将其添加到归档文件。扩展属性以特殊文件的形式加入归档文件,并采用特殊的类型标签。当此修饰符与 x 函数结合使用时,会从磁带中同时提取扩展属性和普通文件数据。只能作为常规文件提取操作的一部分从归档中提取扩展属性文件。显式提取属性记录的尝试将被忽略。
在归档文件中包括扩展系统属性。缺省情况下,tar 不会在归档文件中放入扩展系统属性。tar 通过此标志寻找要放入归档文件中文件的扩展系统属性,并将其添加到归档文件。扩展系统属性以特殊文件的形式加入归档文件,并采用特殊的类型标签。当此修饰符与 x 函数结合使用时,会从磁带中同时提取扩展系统属性和普通文件数据。只能作为常规文件提取操作的一部分从归档中提取扩展系统属性文件。显式提取属性记录的尝试将被忽略。
选择备用驱动器用来挂载磁带。在 /etc/default/tar 中指定缺省条目。如果未指定数字或 f 函数修饰符,/etc/default/tar 中带数字 “0” 的条目将作为缺省值。
有关 tar 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)。
当从管道或套接字读取时,自动确定实际分块因子可能会被骗过(请参见下面的 B 函数)。
1/4 英寸流磁带有一个 512 字节块的固有分块因子。它可以使用任何分块因子读取或写入。
此函数修饰符可用于磁盘文件和块特殊设备等设备中的归档文件,但主要用于磁带设备。
有关 tar 文件头格式的信息,请参见 archives.h(3HEAD)。
下面是使用 tar 在驱动器 /dev/rmt/0 挂载的磁带中创建起始目录归档文件的示例:
example% cd example% tar cvf /dev/rmt/0 . messages from tar
c 函数字母表示创建归档文件。v 函数修饰符输出解释 tar 当前处理的消息。f 函数修饰符表示正在指定 tarfile(本示例中是 /dev/rmt/0)。命令行末尾的点 (.) 表示当前目录并且是 f 函数修饰符的参数。
使用以下命令显示 tarfile 的目录:
example% tar tvf /dev/rmt/0
POSIX 语言环境的输出如下所示:
rw−r−−r−− 1677/40 2123 Nov 7 18:15 1985 ./test.c ... example%
这些列具有以下含义:
列 1 是对 ./test.c 的访问权限
列 2 是 ./test.c 的用户 ID/组 ID
列 3 是 ./test.c 的大小(以字节为单位)
列 4 是 ./test.c 的修改日期。当 LC_TIME 类别未设为 POSIX 语言环境时,可以使用不同的格式和日期顺序字段。
列 5 是 ./test.c 的名称。
要从归档文件中提取文件,请执行以下操作:
example% tar xvf /dev/rmt/0 messages from tar example%
如果一个磁带上有多个归档文件,在每个文件与后一个文件之间用 EOF 标记隔开。要使 tar 从内含多个归档文件的磁带中读取第一和第二个归档文件,磁带设备名称的非倒带版本必须与 f 函数修饰符结合使用,如下所示:
example% tar xvfp /dev/rmt/0n read first archive from tape messages from tar example% tar xvfp /dev/rmt/0n read second archive from tape messages from tar example%
请注意,在一些较早的版本中,上述情况无法正常使用,需使用 mt(1) 在 tar 调用中间进行干预。要模拟旧的行为,可使用包含指示 BSD 行为的字母 b 的非倒带设备名称。请参见 mtio(7I) 手册页的“关闭操作”部分。
示例 2 从 /usr/include 和 /etc 将文件归档到缺省磁带机 0要将文件从 /usr/include 和 /etc 归档到缺省磁带设备 0:
example% tar c -C /usr include -C /etc .
所得 tarfile 的目录将生成如下输出:
include/ include/a.out.h and all the other files in /usr/include ... ./chown and all the other files in /etc
要提取 include 目录中的所有文件:
example% tar xv include x include/, 0 bytes, 0 tape blocks \ and all files under include ...示例 3 在网络中传输文件
下面是一个使用 tar 在网络中传输文件的示例。首先介绍如何从本地计算机 (example) 将文件归档到远程系统 (host) 的磁带中:
example% tar cvfb − 20 files| \ ssh host dd of=/dev/rmt/0 obs=20b messages from tar example%
在上面的示例中,我们使用 c 关键字母创建一个 tarfile,使用 v 函数修饰符指示从 tar 提供 verbose 输出,使用 f 函数修饰符指定输出 tarfile 的名称(标准输出是 tarfile 出现的位置,用 `−' 符号表示),并使用 b 函数修饰符指定块大小 (20)。如果要更改块大小,必须同时更改 tar 命令和 dd 命令上的块大小参数。
示例 4 将文件从远程系统上的磁带中检索回到本地系统下面是使用 tar 将文件从远程系统上的磁带中检索回到本地系统的示例:
example% ssh -n host dd if=/dev/rmt/0 bs=20b | \ tar xvBfb − 20 files messages from tar example%
在上面的示例中,我们用 x 关键字母从 tarfile 提取文件,使用 v 函数修饰符指示从 tar 提供 verbose 输出,告诉 tar 它正使用 B 函数修饰符从管道读取文件,使用 f 函数修饰符指定输入 tarfile 的名称(标准输入是 tarfile 出现的位置,用 “−” 符号表示),并使用 b 函数修饰符指定块大小 (20)。
示例 5 创建起始目录的归档文件以下示例介绍如何使用实际分块因子 19 在 /dev/rmt/0 上创建起始目录的归档文件:
example% tar cvfb /dev/rmt/0 19 $HOME
要不使用 b 函数修饰符识别此归档文件的实际分块因子:
example% tar tvf /dev/rmt/0 tar: blocksize = 19 ...
要使用较大的名义分块因子识别此归档文件的实际分块因子:
example% tar tvf /dev/rmt/0 30 tar: blocksize = 19 ...
尝试使用一个太小的名义分块因子识别此归档文件的实际分块因子:
example% tar tvf /dev/rmt/0 10 tar: tape read error示例 6 创建压缩归档文件
以下示例使用 bzip 创建压缩归档文件:
example% tar cjf tarfile /tmp/*
压缩文件名是 tarfile.bz2。
在此情况下,如果改用以下命令序列,将创建相同的压缩归档文件:
example% tar cf tarfile /tmp/* example% bzip2 tarfile
但是,会取消中间文件的创建和删除操作。虽然函数修饰符 z 和 Z 表现相似,但却分别使用 gzip 和 compress。
以下示例使用 compress 创建压缩归档文件:
example% tar cZf tarfile /tmp/*
压缩文件名是 tarfile.Z。
以下示例使用 gzip 创建压缩归档文件:
example% tar czf tarfile /tmp/*
压缩文件名是 tarfile.gz。
示例 7 从压缩归档文件中提取文件以下示例从压缩归档文件中提取文件:对于使用 bzip2 压缩模式压缩的归档文件:
example% tar xvf tarfile.bz2 example% tar xvfj tarfile.bz2 example% bzcat tarfile.bz2 | tar xvf -
对于使用 compress 压缩模式压缩的归档文件:
example% tar xvf tarfile.Z example% tar xvfZ tarfile.Z example% zcat tarfile.Z | tar xvf -
对于使用 gzip 压缩模式压缩的归档文件:
example% tar xvf tarfile.gz example% tar xvfz tarfile.gz example% gzcat tarfile.gz | tar xvf -
缺省情况下在 /tmp 中创建临时文件。否则,tar 使用 TMPDIR 指定的目录。
有关影响 tar 执行的以下环境变量的描述,请参见 environ(5):LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_TIME、TZ 和 NLSPATH。
肯定的回答使用为用户语言环境中 LC_MESSAGES 类别的 yesexpr 关键字定义的扩展正则表达式进行处理。LC_COLLATE 类别中指定的语言环境定义为 yesexpr 定义的表达式中使用的范围、等效类和多字符整理元素的行为。LC_CTYPE 中指定的语言环境确定文本数据字符字节序列解释的语言环境,以及为 yesexpr 定义的表达式中使用的字符类的行为。请参见 locale(5)。
将返回以下退出值:
成功完成。
出现错误。
/dev/rmt/[0-7][b][n]
/dev/rmt/[0-7]l[b][n]
/dev/rmt/[0-7]m[b][n]
/dev/rmt/[0-7]h[b][n]
/dev/rmt/[0-7]u[b][n]
/dev/rmt/[0-7]c[b][n]
/etc/default/tar
/etc/default/tar 的设置如下所示:
archive0=/dev/rmt/0 archive1=/dev/rmt/0n archive2=/dev/rmt/1 archive3=/dev/rmt/1n archive4=/dev/rmt/0 archive5=/dev/rmt/0n archive6=/dev/rmt/1 archive7=/dev/rmt/1n
有关下列属性的说明,请参见 attributes(5):
|
ar(1)、basename(1)、cd(1)、chown(1)、compress(1)、cpio(1)、csh(1)、dirname(1)、find(1)、ls(1)、mt(1)、pax(1)、setfacl(1)、umask(1)、mknod(1M)、archives.h(3HEAD)、attributes(5)、environ(5)、fsattr(5)、largefile(5)、mtio(7I)
如果有错误的关键字符和磁带读/写错误以及出现内存不足以存放链接表的问题,将输出诊断消息。
无法访问第 n 次出现的文件。
会强行处理磁带错误。
tar 归档格式允许在归档文件头中存储的 UID 和 GID 最大为 2097151。UID 和 GID 大于该值的文件使用值为 60001 的 UID 和 GID 进行归档。
如果归档文件创建时包含这样的文件:其名称通过运行于多个语言环境的进程创建,则创建归档文件和从归档文件中提取文件时,均应使用采用全 8 位代码集的单个语言环境(例如 en_US 语言环境)。
r 函数字母和 u 函数字母均不能使用四分之一英寸归档磁带,因为此类磁带机无法退格。
由于 tar 没有选项,因此,不需要使用通常在其他实用程序中用来终止选项识别功能的标准 “−−” 参数。如果使用,它仅能作为第一个参数被识别,然后被忽略。
由于 −C directory file 和 −I include-file 是多参数操作数,因此可使用以下任何一种方式来归档或提取名为 −C 或 −I 的文件。
使用在命令行中包含 / 字符的文件操作数来指定它们(例如 /home/joe/−C 或 ./−I)。
使用 −I include-file 在包含文件中加入它们。
指定文件驻留的目录:
-C directory -C
或
-C directory -I
指定文件驻留的整个目录:
-C directory .