Go to main content

手册页部分 1:用户命令

退出打印视图

更新时间: 2018年8月8日 星期三
 
 

pax(1)

名称

pax - 可移植归档交换

用法概要

pax [-cdnv] [-H | -L] [-f archive] [-o options]... 
     [-s replstr]... [pattern]...
pax -r [-cdiknuv@/] [-H | -L] [-f archive] [-o options]... 
     [-p string]... [-s replstr]... [pattern]...
pax -w [-dituvX@/] [-H | -L] [-b blocksize] [-a] 
     [-f archive] [-o options]... [-s replstr]... 
     [-x format] [file]...
pax -r -w [-diklntuvX@/] [-H | -L] [-o options]... 
     [-p string]... [-s replstr]... [file]... directory

描述

pax 读取、写入,写入归档文件的成员列表并复制目录分层结构。支持各种归档格式。请参见 –x format 选项。

操作模式

要采取的操作取决于是否存在 –r–w 选项。这四个 –r–w 组合是指以下四种操作模式:listreadwritecopy 模式,分别对应于“用法概要”中显示的四种形式。

list

list 模式下,即,既未指定 –r 又未指定 –w 时,pax 会将从标准输入(路径名与指定的模式匹配)读取的归档文件成员名称写入标准输出。如果指定的文件包含扩展属性,还会列出这些扩展属性。如果指定的文件类型是目录,还会列出根目录为该文件的文件分层结构。

read

read 模式下,即指定 –r 但未指定 –w 时,pax 会提取从标准输入(路径名与指定的模式匹配)读取的归档文件成员。如果提取的文件类型是目录,还会提取根目录为该文件的文件分层结构。提取的文件创建用于执行路径名解析,并将在其中调用 pax 的目录作为当前工作目录。

如果在某个目录已经存在的情况下尝试提取该目录,则不会视为错误。如果在某个 FIFO 已经存在的情况下尝试提取该 FIFO,则不会视为错误。

恢复的文件的所有权、访问和修改时间以及文件模式在 –p 选项下进行介绍。

write

write 模式下,即指定 –w 但未指定 –r 时,pax 会以某种归档格式将 file 操作数的内容写入标准输出。如果未指定任何 file 操作数,将从标准输入中读取要复制的文件列表(每行一个)。类型为目录的文件包含根目录为该文件的文件分层结构中的所有文件。

copy

copy 模式下,即同时指定 –r–wpax 会将 file 操作数复制到目标目录。

如果未指定任何 file 操作数,将从标准输入中读取要复制的文件列表(每行一个)。类型为目录的文件包含根目录为该文件的文件分层结构中的所有文件。

copy 的作用与将复制的文件写入归档文件而后再提取一样,只是原始文件与复制的文件之间能够包含硬链接。如果目标目录是要复制的其中一个文件的子目录,则结果不确定。如果 directory 不存在、不可由用户写入或者不是目录,则会出现错误。

readcopy 模式下,如果需要使用中间目录提取某个归档成员,则 pax 执行与使用以下参数调用 mkdir(2) 函数等效的操作:

  • 将中间目录用作 path 参数。

  • 777rwx(读取、写入和执行权限)的八进制值用作 mode 参数(请参见 chmod(1))。

如果指定的任何 patternfile 操作数与至少一个文件或归档成员不匹配,pax 会将不匹配的每个操作数的诊断消息写入标准错误,并在退出时返回非零退出状态。

输入时自动检测支持的归档格式。缺省输出归档格式为 tar(1)

单个归档能够跨多个文件。pax 负责确定下一个要读取或写入的文件。

如果选择的归档格式支持链接的文件规范,但在提取归档时不能链接这些文件,则会出现错误(除非要链接的文件为符号链接,而系统无法为符号链接创建硬链接)。在这种情况下,需要为符号链接创建单独的副本。表示文件的归档中各名称中的任意名称均可用于选择要提取的文件。对于未存储每个名称均可用于创建硬链接的文件内容的归档格式,如果在此 pax 会话期间未提取包含数据的文件,则从原始文件恢复的数据或与文件名一起显示的诊断消息均可用于提取这些数据。在遍历目录中,pax 可检测死循环,即进入一个先前访问过的目录,该目录是所访问的上一文件的祖先。当检测到死循环时,pax 会将诊断消息写入标准错误,然后终止。

选项

支持以下选项:

–a

将文件附加到归档末尾。此选项不适用于某些归档设备,如 1/4 英寸流磁带和 8 毫米磁带。

–b blocksize

阻止以每次写入十进制正整数字节的频率向归档文件输出。设备和归档格式能够对分块施加限制。分块由输入自动确定。可移植应用程序指定的 blocksize 值不得大于 32256。创建归档时使用的缺省分块取决于归档格式。请参见下文中的 –x 选项。

–c

匹配所有文件或归档成员(由 patternfile 操作数指定的文件或归档成员除外)。

–d

导致复制或归档目录类型的文件,或者提取或列出目录类型的归档成员,以便仅匹配文件或归档成员本身,而不是根目录为该文件的文件分层结构。

–f archive

指定输入或输出归档的路径名,覆盖缺省标准输入(listread 模式)或标准输出(write 模式)。

–H

如果已在命令行上指定引用目录类型文件的符号链接,pax 会使用链接名称作为文件分层结构的根目录来归档以该链接引用的文件为根的文件分层结构。否则,如果命令行上指定了 pax 通常能够归档的引用任何其他文件类型的文件的符号链接,则 pax 会使用链接名称归档该链接引用的文件。缺省行为是归档符号链接本身。

–i

以交互方式重命名文件或归档成员。对于与 pattern 操作数匹配的各归档成员或与 file 操作数匹配的文件,会将提示写入文件 /dev/tty。提示包含文件名或归档成员名。然后从 /dev/tty 读取行。如果此行为空,则跳过对应的文件或归档成员。如果此行包含单个句点,则无需修改其名称即可处理文件或归档成员。否则,使用该行的内容替换其名称。如果在读取响应时遇到文件结尾或不能打开 /dev/tty 执行读取和写入,pax 将立即退出并返回非零退出状态。

提取已在提取期间重命名的文件的硬链接的结果不确定。

–k

防止覆盖现有文件。

–l

链接文件。在 copy 模式下,尽量在源文件分层结构和目标文件分层结构之间创建硬链接。如果与 –H–L 一起指定,当遇到符号链接时,在目标文件分层结构中创建的硬链接将指向符号链接引用的文件。如果在既未指定 –H 也未指定 –L 的情况下指定,当遇到符号链接时,实现会创建一个指向源文件分层结构中的符号链接的硬链接,或将符号链接复制到目标文件分层结构。

–L

如果已在命令行上指定或在遍历文件分层结构期间遇到引用目录类型文件的符号链接,pax 会使用链接名称作为文件分层结构的根目录来归档以该链接引用的文件为根的文件分层结构。否则,如果命令行上指定或在遍历文件分层结构期间遇到 pax 通常能够归档的引用任何其他文件类型的文件的符号链接,则 pax 会使用链接名称归档该链接引用的文件。缺省行为是归档符号链接本身。

–n

选择与每个 pattern 操作数匹配的第一个归档成员。每种模式只与一个归档成员匹配,但目录类型的成员仍可与根目录为该文件的文件分层结构匹配。

–o options

向实现提供信息以修改用于提取或写入文件的算法。选项值由以下格式的一个或多个关键字(以逗号分隔)组成:

keyword[[:]=value][,keyword[[:]=value], ...]

某些关键字仅适用于特定的文件格式,通过每项说明分别指示。使用不适用于正在处理的文件格式的关键字会产生不确定的结果。

options 参数中的关键字必须是表示有效可移植文件名的字符串。

关键字不一定是文件名,只有遵循与可移植文件名相同的字符编写规则的关键字才是文件名。

关键字前面可带有空格。value 字段包含零个或多个字符。在 value 中,应用程序的前面可带有任意文本逗号和反斜杠,反斜杠将被忽略,但会保留逗号作为 value 的一部分。逗号作为最后一个字符,或者逗号后面紧跟空格作为最后的字符,则在 options 中将被忽略。可以指定多个 –o 选项。如果提供给多个这类 –o 选项的关键字发生冲突,则出现在命令行序列后端的关键字和值优先,将忽略前端的关键字和值且不显示任何提示。指示的文件格式支持以下 options 关键字值:

delete=pattern

此关键字仅适用于 –x pax 格式。在 writecopy 模式下使用时,将省略扩展标头记录的 pax,该命令负责生成与字符串模式匹配的任意关键字。在 readlist 模式下使用时,pax 会忽略与扩展标头记录中的字符串模式匹配的任意关键字。在这两种情况下,使用模式匹配表示法进行匹配。例如:

-o delete=security.*

将禁止与安全性相关的信息。

指定多个 –o delete=pattern 选项时,模式可以累加。pax 生成的扩展标头记录中将省略与指定的字符串模式匹配的所有关键字。

exthdr.name=string

此关键字仅适用于 –x pax 格式。此关键字允许用户控制写入扩展标头 ustar 头块的名称。名称为执行以下字符替换后 string 的内容:

%d

文件的目录名称等同于转换的路径名的 dirname 实用程序结果。

%f

文件的文件名等同于转换的路径名的 basename 实用程序结果。

%p

pax 进程的进程 ID。

%%

'%' 字符。

string 中的任何其他 '%' 字符均会产生不确定的结果。

如果未指定 –o exthdr.name=stringpax 将使用以下缺省值:

%d/PaxHeaders.%p/%f
globexthdr.name=string

此关键字仅适用于 –x pax 格式。在 writecopy 模式下与相应的选项一起使用时,pax 会创建带有 ustar 头块(以前版本的 pax 将其视为常规文件)的全局扩展标头记录。此关键字允许用户控制写入全局扩展标头记录 ustar 头块的名称。名称为执行以下字符替换后 string 的内容:

%n

表示归档的全局扩展标头记录序列号的整数以 1 开头。

%p

pax 进程的进程 ID。

%%

'%' 字符。

string 中的任何其他 '%' 字符均会产生不确定的结果。

如果未指定 –o globexthdr.name=stringpax 将使用以下缺省值:

$TMPDIR/GlobalHead.%p.%n

其中 $TMPDIR 表示 TMPDIR 环境变量的值。如果未设置 TMPDIR,pax 将使用 /tmp

invalid=action

此关键字仅适用于 –x pax 格式。此关键字允许用户控制在遇到以下扩展标头记录值问题时 pax 采取的操作:在 readcopy 模式下,扩展标头记录值在目标分层结构中无效;或在 list 模式下,不能将扩展标头记录值写入实现的代码集和当前语言环境。以下是 pax 识别的无效值:

  • readcopy 模式下,包含字符编码的文件名或链接名称在目标分层结构中无效。例如,该名称能够包含嵌入的 NUL

  • readcopy 模式下,允许目标分层结构中使用长度大于最大长度的文件名称或链接名称作为路径名组件或完整路径名。

  • list 模式下,不能向实现的代码集和当前语言环境写入任何字符串值(文件名、链接名称、用户名等)。

支持 action 参数的以下互斥值:

binary

在写入模式下,pax 将为每个文件生成一个 hdrcharset=BINARY 扩展标头记录,且该扩展标头记录中含有文件名、链接名称、组名称、所有者名称或任何其他无法转换为 UTF-8 代码集的字段,以允许归档包含具有未编码的扩展标头记录值的文件。在读取或复制模式下,无论是否会覆盖具有有效名称的现有文件,pax 都将使用标头中指定的值而不进行转换。在 list 模式下,pax 的行为方式与 bypass 操作相同。

bypass

readcopy 模式下,pax 将绕过该文件,从而保持目标分层结构不变。在 list 模式下,pax 将写入针对该文件请求的所有有效值,但未指定写入有效值的方法。

rename

readcopy 模式下,pax 在执行时会假定 –i 选项对文件名或链接名称值无效的每个文件均有效,从而允许用户以交互方式提供替换名称。在 list 模式下, pax 的行为方式与 bypass 操作相同。

UTF-8

在读取、复制或列表模式下使用时,如果扩展标头记录中的文件名、链接名称、所有者名称或任何其他字段不能从 pax UTF-8 代码集格式转换为实现的代码集和当前语言环境,pax 将对名称使用实际 UTF-8 编码。如果 hdrcharset 扩展标头记录对此文件有效,则应使用该记录指定的字符集而非 UTF-8。如果 hdrcharset=BINARY 扩展标头记录对此文件有效,则不应执行任何转换。

write

readcopy 模式下,无论是否能够覆盖具有有效名称的现有文件,pax 均将写入文件并转换名称。在 list 模式下, pax 的行为方式与 bypass 操作相同。

如果未指定 –o invalid= 选项,pax 在执行时会假定指定了 –o invalid=bypass–o invalid= action 允许的任何现有文件覆盖操作均会受到权限 (–p) 和修改时间 (–u) 限制的影响,如果同时指定 –k 选项,则将被禁止。

linkdata

此关键字仅适用于 –x pax 格式。在 write 模式下,pax 会将文件内容写入归档,即使该文件只是内容已被写入归档的某个文件的硬链接也是如此。

listopt=format

此关键字用于指定在指定 –v 选项(list 模式)时生成的目录的输出格式。(请参见下文的列表模式格式规范。)为避免混淆,listopt=format 将是 –o 选项参数中的唯一或最后一个 keyword=value 对。选项参数提示的所有字符均将被视为格式字符串的一部分。指定多个 –o listopt= format 选项时,格式字符串将被视为单个串联字符串(按命令行顺序计算)。

times

此关键字仅适用于 –x pax–x xustar 格式。在写入或复制模式下使用时,pax 将包括每个文件的 atimemtime 扩展标头记录。

除这些关键字外,如果指定 –x pax 格式,还能够采用以下两种模式之一在 –o 选项参数中使用任何关键字和值(包括实现扩展):

keyword=value

writecopy 模式下使用时,将在归档的开头包含这些关键字/值对作为 typeflag g 全局扩展标头记录。在 readlist 模式下使用时,这些关键字/值对在执行时会假定其位于归档开头作为 typeflag g 全局扩展标头记录。

keyword:=value

writecopy 模式下使用时,这些关键字/值对将作为记录包含在每个文件的 typeflag x 扩展标头开头。这等效于等号格式,只是不会创建任何 typeflag g 全局扩展标头记录。在 readlist 模式下使用时,这些关键字/值对在执行时会假定已作为记录包含在每个扩展标头末尾。因此,将覆盖所有同名的全局或文件特定的扩展标头记录关键字。例如,在以下命令中:

pax -r -o "
gname:=mygroup,
" <archive

组名称强制为新值,供所有文件从归档中读取。

–p string

指定一个或多个文件特征选项(特权)。string 选项参数必须是字符串,指定在提取时保留还是放弃文件特征。该字符串由指定字符 a emop 组成。能够在同一字符串中串联多个特征,并且能够指定多个 –p 选项。指定字符的含义如下所示:

a

不保留文件访问时间。

e

保留用户 ID、组 ID、文件模式位、访问时间和修改时间。

m

不保留文件修改时间。

o

保留用户 ID 和组 ID。

p

保留文件模式位。

在前面的列表中,preserve 指示已为提取的文件提供存储在归档中的属性,这会受到调用进程的权限影响。否则,该属性将作为常规文件创建操作的一部分确定。除非使用 –p 选项指定或未存储在归档中,否则将保留文件的访问时间和修改时间。未保留的所有属性均将作为常规文件创建操作的一部分确定。

如果既未指定 e 也未指定 o 指定字符,或者出于任何原因未保留用户 ID 和组 ID,pax 不会设置文件模式的 setuidsetgid 位。

如果出于任何原因上述任何项目保留失败,pax 会将诊断消息写入标准错误。无法保留这些项目将影响最终退出状态,但不会导致删除提取的文件。

如果任何 string 选项参数的文件特征关键字彼此重复或相互冲突,则最后给出的关键字优先。例如,如果指定 –p eme,将保留文件修改时间。

–r

从标准输入读取归档文件。

–s replstr

使用正则表达式语法 regex(7),根据替换表达式 replstr(基于 ed(1) s(替换)实用程序)修改由 patternfile 操作数指定的文件名或归档成员名称。“地址”和“行”概念在 pax 命令上下文中无意义,不得提供。该格式为:

-s /old/new/ [gp]

与在 ed 中相同,其中 old 是基本正则表达式,new 可以包含和符号 (&)、\n 后向引用,而 n 是数字或子表达式匹配。old 字符串也允许包含换行符。

任何非空字符均可用作分隔符(此处显示 /)。可以指定多个 –s 表达式。表达式按指定顺序应用,并以第一次成功替换终止。可选结尾 g 定义参见 ed 命令。可选结尾 p 会导致将成功替换写入标准错误。读取和写入归档时将忽略替换空字符串的文件名或归档成员名称。

–t

从文件系统读取文件时,如果用户具备 utime() 执行读取操作所需的权限,则将读取每个文件的访问时间设置为之前 pax 读取该文件的访问时间。

–u

忽略早于先前已存在的同名文件或归档成员(文件修改时间更早)的文件。

read 模式

提取与文件系统中的文件同名的归档成员(如果归档成员比文件更新)。

write 模式

取代与文件系统中的文件同名的归档文件成员(如果文件比归档成员更新)。如果还指定了 –a,则通过附加到归档来实现。否则,未指定通过归档内部实际替换还是附加到归档来实现。

copy 模式

目标分层结构的文件会替换为源分层结构的文件或源分层结构文件的链接(如果源分层结构的文件更新)。

–v

list 模式下,生成详细目录(请参见标准输出)。否则,会将归档成员路径名和扩展属性写入标准错误(请参见标准错误)。

–w

以指定的归档格式将文件写入标准输出。

–x format

指定输出归档格式。pax 实用程序识别以下格式:

cpio

扩展的 cpio(1) 交换格式。请参见 IEEE Std 1003.1–2001。此字符特殊归档文件格式的缺省 blocksize5120。实现支持所有小于或等于 32256 且为 512 倍数的 blocksize 值。

此归档格式允许在归档中存储 UID 和 GID 最大为 262143 的文件。UID 和 GID 大于该值的文件使用值为 60001 的 UID 和 GID 进行归档。

pax

pax 交换格式。请参见 IEEE Std 1003.1–2001。此字符特殊归档文件格式的缺省 blocksize5120。实现支持所有小于或等于 32256 且为 512 倍数的 blocksize 值。

类似于 ustar。还允许归档和提取以下文件:大小大于 8GB;UID、GID、devmajordevminor 值大于 2097151;路径(包括文件名)大于 255 个字符;或者 linkname 大于 100 个字符。

ustar

扩展的 tar(1) 交换格式。请参见 IEEE 1003.1(1990) 规范。此字符特殊归档文件格式的缺省 blocksize10240。实现支持所有小于或等于 32256 且为 512 倍数的 blocksize 值。

此归档格式允许在归档中存储 UID 和 GID 最大为 2097151 的文件。UID 和 GID 大于该值的文件使用值为 60001 的 UID 和 GID 进行归档。

xustar

类似于 ustar。还允许归档和提取以下文件:大小大于 8GB;UID、GID、devmajordevminor 值大于 2097151;路径(包括文件名)大于 255 个字符;或者 linkname 大于 100 个字符。如果要提取归档的归档程序不能处理较大的值,则不应使用此选项。

以与现有归档格式不同的格式附加到归档文件的任何尝试均会导致 pax 立即退出,并返回非零退出状态。

copy 模式下,如果未指定 –x 格式,pax 的行为方式如同指定了 –x pax 一样。

–X

遍历按路径名指定的文件分层结构时,pax 不会深入到设备 ID 不同的目录(st_dev,请参见 stat(2))。

–@

将扩展属性包含在归档中。缺省情况下,pax 不会在归档中放入扩展属性。

遍历按路径名指定的文件分层结构时,pax 将深入到带有扩展属性的任何文件的属性目录。扩展属性作为特殊文件进入归档。

文件提取期间使用此标志时,还会提取与正在提取的文件关联的任何扩展属性。只能作为常规文件提取操作的一部分从归档中提取扩展属性文件。显式提取属性记录的尝试将被忽略。

–/

将扩展系统属性包含在归档中。缺省情况下,pax 不会在归档中放入扩展系统属性。

遍历按路径名指定的文件分层结构时,pax 将深入到带有扩展属性的任何文件的属性目录。扩展属性作为特殊文件进入归档。文件提取期间使用此标志时,还会提取与正在提取的文件关联的任何扩展属性。只能作为常规文件提取操作的一部分从归档中提取扩展属性文件。显式提取属性记录的尝试将被忽略。

指定多个 –H–L 互斥选项不会被视为错误。指定的最后一个选项将决定实用程序的行为。

对文件或归档成员(–c–i–n–s–u–v)的名称执行操作的选项按如下方式进行交互。

read 模式下,基于用户指定的 pattern 操作数(已由 –c–n–u 选项修改)选择归档成员。然后,所有 –s–i 选项均将按此顺序修改选定文件的名称。–v 选项写入这些修改生成的名称。

write 模式下,基于用户指定的路径名(已由 –n–u 选项修改)选择文件。然后,所有 –s–i 选项均将按此顺序修改这些选定文件的名称。–v 选项写入这些修改生成的名称。

如果指定 –u–n 选项,除非文件比与其比较的文件更新,否则 pax 不会将文件视为选定状态。

列表模式格式规范

list 模式(带有 –o listopt=format 选项)下,将对每个选定文件应用格式参数。pax 会将换行符附加到每个选定文件的 listopt 输出。format 参数用作格式字符串,但下述情况例外。(有关前五种例外,请参见 printf(1)。)

  1. 在任何非转换规范标志的上下文中,格式字符串中的空格字符都被视为复制到输出的普通字符。

  2. 格式字符串中的 ' ' 字符将被视为 ' ' 字符,而不会视为空格。

  3. formats(7) 手册页 (\\, \a, \b, \f, \n, \r, \t, \v) 中所述的转义序列外,还有 \ddd,其中 ddd 是一位、两位或三位八进制数字,并写为以八进制数字指定的数值的一个字节。

  4. du 转换说明符输出的前后不可带有非格式操作数指定的空白字符。

  5. o 转换说明符输出的前面不可带有非格式操作数指定的零。

  6. 序列 (keyword) 可以出现在格式转换说明符之前。转换参数通过 keyword 的值定义。支持以下关键字(请参见 IEEE Std 1003.1–2001):

    • ustar 头块 面向八位字节的 cpio 归档条目中的任意字段名称条目。除 cpio c_ mode 字段值要求的格式外,实现还支持不带前导 c_cpio 关键字。

    • 针对 pax 扩展标头中的扩展标头定义的任意关键字。

    • 作为 pax 扩展标头中定义的扩展标头的实现定义扩展提供的任意关键字。

    例如,序列 "%(charset)s" 是扩展标头的字符集名称的字符串值。

    关键字转换参数的结果是适用标头字段或扩展标头的值,不带任何结尾 NUL

    作为转换参数使用的所有关键字值均将从 UTF -8 编码转换为适用于本地文件系统、用户数据库等(如果适用)的字符集。

  7. 另一种转换说明符字符 T 用于指定时间格式。T 转换说明符字符前面可带有序列 (keyword=subformat),其中 subformat 是由 date 操作数定义的日期格式。缺省 keywordmtime,而缺省 subformat 是:

    %b %e %H:%M %Y
  8. 另一种转换说明符字符 M 用于指定 ls 标准输出中定义的文件模式字符串。如果省略了 (keyword),则使用 mode 关键字。例如,%.1M 将写入与 ls –l 命令的 entry type 字段对应的单个字符。

  9. 另一种转换说明符字符 D 用于以实现定义的格式为块文件或特殊文件指定(如果适用)设备。如果不适用,则指定 (keyword),此转换等效于 %(keyword)u。如果不适用,则省略 (keyword),此转换等效于空格。

  10. 另一种转换说明符字符 F 用于指定路径名。F 转换字符前面可带有以逗号分隔的关键字序列:

    (keyword[,keyword] ... )

    串联所有非空关键字的值,各值之间以 '/' 分隔。如果定义了关键字 path,则缺省值为 (path)。否则,缺省值为 (prefix,name)。

  11. 另一种转换说明符字符 L 用于指定符号链接扩展。如果当前文件是符号链接,则 %L 扩展为:

    "%s -> %s", value of keyword, contents of link

    否则,%L 转换规范等效于 %F

操作数

支持下列操作数:

directory

copy 模式的目标目录路径名。

file

要复制或归档的文件的路径名。

pattern

与归档成员的一个或多个路径名匹配的模式。模式必须遵循 fnmatch(7) 手册页上规定的模式匹配表示法。如果未指定 pattern,则缺省值为选择归档中的所有成员。

输出

下面对输出格式进行了讨论:

标准输出

write 模式下,如果未指定 –f,标准输出为根据下文所述的格式之一格式化的归档。有关支持格式的列表,请参见 –x format

list 模式下,如果已指定 –o listopt=format 选项,会使用列表模式格式规范下所述的格式将选定的归档成员写入标准输出。在 list 模式(不带 –o listopt=format 选项)下,则使用以下格式将选定的归档成员的目录写入标准输出:

"%s\n", pathname

如果在 list 模式下指定 –v 选项,则使用以下格式将选定的归档成员的目录写入标准输出:

  • 对于表示之前归档成员的硬链接的路径名:

    "%s == %s\n", <ls -l listing, linkname
  • 对于所有其他路径名:

    "%s\n", <ls -l listing>

    其中 <ls –l listing> 是由 ls 命令使用 –l 选项指定的格式。以此格式写入路径名时,未指定为信息不正确的底层归档格式字段写入哪些内容,但会写入以空白字符分隔的字段的正确编号。

list 模式下,缓冲标准输出时一次不能超过一行。

标准错误

如果在 readwritecopy 模式下指定 –vpax 会使用以下格式将其处理的路径名写入标准错误输出。

"%s\n", pathname

只要开始处理文件或归档成员,这些路径名就会立即写入并刷新到标准错误。结尾换行符(不缓冲)将在读取或写入文件时写入。

如果指定 –s 选项,替换字符串包含结尾 p,则会使用以下格式将替换写入标准错误:

"%s >> %s\n", <original pathname>, <new pathname>

pax 的所有运行模式下,有关输入归档格式和卷号、文件数量、块、卷和介质部分的未指定格式可选消息及其他诊断消息均可写入标准错误。

在标准输出和标准错误的所有格式下,均未指定写入路径名或链接名称的不可输出字符的方式。

pax 处于 read 模式或 list 模式下时,使用 –x pax 归档格式,扩展标头记录中的文件名、链接名称、所有者名称或任何其他字段均不能从 pax UTF-8 代码集格式转换为实现的代码集和当前语言环境,pax 会将诊断消息写入标准错误,按照 –o invalid=选项所述的方法处理文件,然后继续处理归档中的下一个文件。

输出文件

read 模式下,提取的输出文件类型是归档文件。在 copy 模式下,复制的输出文件类型是正在复制的文件类型。在上述两种模式的任一模式下,仅当所有权限 (–p)、修改时间 (–u) 和无效值 (–o invalid=) 测试均允许覆盖时,才会覆盖目标分层结构中的现有文件。在 write 模式下,由 –f 选项参数指定的输出文件是根据 IEEE Std 1003.1–2001 的规范之一格式化的文件。

错误

如果 pax 不能在读取归档时创建文件或链接,不能在写入归档时查找文件,或者不能在指定 –p 选项时保留用户 ID、组 ID 或文件模式,则向标准错误写入诊断消息并返回非零退出状态,但会继续处理。在 pax 不能为文件创建链接的情况下,缺省情况下,pax 不会为文件创建第二个副本。

如果因信号或错误而过早终止从归档提取文件,pax 只能部分提取文件,或者如果未指定 –n 选项,则可能已经提取与用户指定的文件同名的文件,但该文件并非用户所需的文件。此外,提取的目录的文件模式还可能包含读取、写入、执行掩码集的其他位,以及不正确的修改时间和访问时间。

用法

–p(特权)选项设计用于协调历史 tar(1)cpio(1) 实现之间的差异。特别要指出的是,两种实用程序以截然相反的方式使用 –m–p 选项还提供一致的方式来扩展能够处理未来文件属性的方式,如增强的安全系统或高性能文件。虽然看似复杂,其实最常使用两种模式:

–p e

全部保留。此模式由具有所有相应特权的历史超级用户使用,以便在将文件记录到归档时保留文件的各方面信息。e 标志是 op 及其他与实现相关的属性的总和。

–p p

保留文件模式位。此模式由具有常规特权并希望保留除所有权以外的文件信息的用户使用。缺省情况下保留文件时间,但会提供两个其他标志以禁用这些标志并使用提取时间。

每行一个路径名的标准输入格式排除包含换行符的路径名。虽然此类路径名违反可移植文件名准则,但可以存在并且其存在能够禁止在 shell 脚本中使用 pax。此问题继承自历史归档程序。通过在命令行而非标准输入上列出文件名参数能够避免该问题。

几乎可以肯定的是,pax 需要相应的特权才能完成各个部分。具体而言,创建块特殊类型或字符特殊类型文件、恢复文件访问时间(除非文件由用户所有(–t 选项)),或者保留文件所有者、组和模式(–p 选项)可能均需要相应的特权。

read 模式下,实现允许在归档包含多个同名成员时覆盖文件。如果第一个版本的文件不允许被覆盖,则此操作可能会失败。

使用 –x xustar–x –pax 归档格式时,如果底层文件系统报告正在归档的文件包含漏洞,Solaris pax 实用程序将在归档文件时报告扩展标头记录中存在漏洞。如果此扩展标头报告与归档中的某个文件关联,则每当从归档中提取该文件时均会重新产生这些漏洞。请参见 lseek(2) 中的 SEEK_DATASEEK_HOLE whence 值。在所有其他情况下,归档中发现的任何 NUL (\0) 字符串均将在提取时被写入文件。

标准输入

write 模式下,仅当未指定 file 操作数时才使用标准输入。它是包含路径名列表(每行一个)且不带前导或结尾空格的文本文件。在 listread 模式下,如果未指定 –f,则标准输入为归档文件。否则,不使用标准输入。

输入文件

archive 选项参数指定的输入文件(或者从此处读取归档时的标准输入)是根据下文所述的格式之一格式化的文件。请参见扩展说明。文件 /dev/tty 用于写入提示符和读取响应。

示例

示例 1 复制当前目录的内容

以下命令:

example% pax -w -f /dev/rmt/1m .

将当前目录的内容复制到磁带机 1 介质密度。这假定历史 System V 设备命名过程。该历史 BSD 设备名称将为 /dev/rmt9

示例 2 复制目录分层结构

以下命令:

example% mkdir newdir
example% pax -rw olddir newdir

olddir 目录分层结构复制到 newdir

示例 3 读取相对于当前目录提取的归档

以下命令:

example% pax -r -s ',^//*usr//*,,' -f a.pax

读取归档 a.pax(所有文件的根目录均为相对于当前目录提取的归档中的 /usr)。

示例 4 覆盖缺省输出说明

使用选项:

-o listopt="%M %(atime)T %(size)D %(name)s"

覆盖标准输出中的缺省输出说明,而后写入:

-rw-rw- - - Jan 12 15:53 2003 1492 /usr/foo/bar

使用选项:

-o listopt='%L\t%(size)D\n%.7' \
-o listopt='(name)s\n%(atime)T\n%T'

覆盖标准输出中的缺省输出说明,而后写入:

usr/foo/bar -> /tmp             1492
/usr/foo
Jan 12 15:53 1991
Jan 31 15:53 2003

环境变量

有关影响 pax 执行的以下环境变量的说明,请参见 environ(7):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、LC_TIME 和 NLSPATH。

LC_COLLATE

确定 pattern 操作数模式匹配表达式、–s 选项基本正则表达式和为 LC_MESSAGES 类别的 yesexpr 语言环境关键字定义的扩展正则表达式中使用的范围、等效类和多字符整理元素的行为的语言环境。

TMPDIR

确定提供部分缺省全局扩展标头记录文件的路径名,参见“选项”部分对 –o globexthdr= 关键字的介绍。

TZ

确定指定 –v 选项时用于计算日期和时间字符串的时区。如果 TZ 未设置或为空,则使用不确定的缺省时区。

退出状态

将返回以下退出值:

0

所有文件都已成功处理。

>0

出现错误。

扩展描述

pax 交换格式

–xpax 格式生成的 pax 归档磁带或文件包含一系列块。归档的物理布局与 ustar 交换格式中所述的 ustar 格式完全相同。归档的每个文件均通过以下序列表示:

  • 带有扩展标头记录的可选头块。此头块的形式为 27403,typeflag 值为 xg。扩展标头记录将作为此头块的数据。

  • 描述文件的头块。前面的可选扩展标头中的任何字段将覆盖该文件头块中的关联字段。

  • 包含文件内容的零个或多个块。

归档文件末尾包含两个以二进制零填充的 512 字节块,解释为归档结束指示符。

以下是 pax 格式归档中带有全局扩展标头记录和两个实际文件的示例归档示意图。在该示例中,归档中的第二个文件前面不带任何扩展标头,假定因为其无需扩展属性。

说明
全局扩展标头
ustar 标头 [typeflag=g]
全局扩展标头数据
文件 1:包含扩展标头
ustar 标头 [typeflag=x]
扩展标头数据
[typeflag=0]
文件 1 的 ustar 标头数据
文件 2:不含扩展标头
ustar 标头 [typeflag=0]
文件 2 的数据
归档结束指示符
二进制零块
二进制零块

pax 头块

pax 头块与 ustar 交换格式中所述的 ustar 头块完全相同,只是额外定义了两个 typeflag 值:

g

表示归档中以下文件的全局扩展标头记录。这些扩展标头记录的格式如 pax 扩展标头中所述。每个值均会影响未在其各自的扩展标头记录中覆盖相应值的所有后续文件,直到另一个全局扩展标头记录到达并为该字段提供另一个值为止。typeflag g 全局标头不应与交换介质一起使用,这样可能会在传输归档的过程中导致部分数据丢失。

x

表示归档中以下文件的扩展标头记录(包含其各自的 ustar 头块)。这些扩展标头记录的格式如 pax 扩展标头中所述。

对于这两种类型,size 字段是以八位字节表示的扩展标头记录大小。头块中的其他字段对此版本的 pax 无意义。但是,如果此归档由 pax 遵循以前版本的 ISO POSIX-2:1993 标准 读取,则头块字段用于创建常规文件(包含扩展标头记录作为数据)。因此,应选择头块字段值以对此常规文件进行合理的文件访问。

它与 ustar 头块的进一步区别在于可包含 typeflag 1(数字一)(硬链接)的文件数据块,这意味着 size 字段能够大于零。由 pax –o linkdata 创建的归档包括这些带有硬链接的数据块。

pax 扩展标头

由于该格式的限制,pax 扩展标头包含不适用于 ustar 头块的值:需要不同于 ISO/IEC 646: 1991 标准中所述的字符编码的字段、表示未在 ustar 标头中描述的文件属性的字段,以及格式或长度不符合 ustar 标头要求的字段。扩展标头值会将属性添加到指定的一个或多个文件,或者覆盖指定头块中的值,如以下关键字列表中所示。请参见 typeflag g 头块的说明。

一个扩展标头可包含一个或多个记录,每个扩展标头的构建方法如下所示:

"%d %s=%s\n", length, keyword, value

扩展标头记录根据 ISO/IEC 10646-1: 2000 标准 (UTF-8) 进行编码。lengthBLANK、等号 (=) 和 NEWLINE 仅限于可移植字符集,与使用 UTF-8 进行编码一样。keywordvalue 可为任何 UTF-8 字符。length 是以八位字节表示的扩展标头记录的十进制长度,包括结尾 NEWLINE。如果 hdrcharset 扩展标头对某个文件有效,则应使用 hdrcharset 扩展标头记录所指定的字符集对任何 gnamelinkpathpathuname 扩展标头记录的值字段进行编码;否则,应使用 UTF-8 对值字段进行编码。应使用 UTF-8 对 POSIX.1-2008 所指定的所有其他关键字的值字段进行编码。

keyword 是作为实现扩展提供的以下列表或关键字的条目之一。保留完全由小写字母、数字和句点组成的关键字以实现未来标准化。关键字不包括等号。

在以下列表中,使用 file(s)block(s) 表示法确认关键字会影响 typeflag x 扩展标头后的指定单个文件,也可能影响 typeflag g 后的多个文件。在写入或复制模式下包含记录的 pax 列表的任何要求,均仅在未使用 –o 选项提供此类记录时应用。在复制模式下使用时,pax 的行为方式如同已使用适用的扩展标头记录创建归档然后进行提取一样。

atime

指定文件的文件访问时间与文件 stat 结构 st_atime 成员的值相等,如 stat(2) 函数所述。如果进程具备执行操作所需的相应特权,将恢复访问时间 (atime)。value 的格式如 pax 扩展标头文件时间中所述。

charset

字符集名称用于编码指定文件的数据。下表中定义的这些条目用于引用已知标准;发起方和接收方可就其他名称进行协商。

value
正式标准
ISO-IR 646 1990
ISO/IEC646:1990
ISO-IR 8859 1 1998
ISO/IEC8859–1:1998
ISO-IR 8859 2 1999
ISO/IEC 8859–2:1999
ISO-IR 8859 3 1999
ISO/IEC 8859–3:1999
ISO-IR 8859 4 1999
ISO/IEC8859–4:1998
ISO-IR 8859 5 1999
ISO/IEC8859–5–1999
ISO-IR 8859 6 1999
ISO/IEC8859–6–1999
ISO-IR 8859 7 1987
ISO/IEC8859–7:1987
ISO-IR 8859 8 1999
ISO/IEC8859–8:1999
ISO-IR 8859 9 1999
ISO/IEC8859–9:1999
ISO-IR 8859 10 1998
ISO/IEC8859–10:1999
ISO-IR 8859 13 1998
ISO/IEC8859–13:1998
ISO-IR 8859 14 1998
ISO/IEC8859–14:1998
ISO-IR 8859 15 1999
ISO/IEC8859–15:1999
ISO-IR 10646 2000
ISO/IEC 10646:2000
ISO-IR 10646 2000 UTF-8
ISO/IEC 10646,UTF-8 编码
BINARY

该编码包含在扩展标头中仅用于提供信息;按照 IEEE Std 1003.1-200x 中描述的方式使用 pax 时,不会将文件数据转换为任何其他编码。BINARY 条目指示未编码的二进制数据。在写入或复制模式下使用时,由实现定义 pax 是否包括文件的 charset 扩展标头记录。

comment

用作注释的一系列字符。pax 将忽略 value 字段中的所有字符。

gid

拥有文件的组的组 ID,使用 ISO/IEC 646: 1991 标准中的数字以十进制数字表示。此记录将覆盖指定头块中的 gid 字段。在写入或复制模式下使用时,pax 包括组 ID 大于 2097151(八进制 7777777)的每个文件的 gid 扩展标头记录。

gname

文件组的格式为组数据库中的组名称。此记录会覆盖指定头块中的 gidgname 字段,以及任何 gid 扩展标头记录。在读取、复制或列表模式下使用时,pax 会将名称从标头记录的 UTF-8 编码转换为适用于接收系统组数据库的字符集。如果任何 UTF-8 字符不能转换,并且未指定 –o invalid=UTF-8 选项,结果将由实现定义。在写入或复制模式下使用时,pax 包括组名称不能完全通过可移植字符集的字母和数字表示的每个文件的 gname 扩展标头记录。

hdrcharset

用于对 gnamelinkpathpath 和 uname pax 扩展标头记录的值字段进行编码的字符集的名称。以下条目定义用于指代已知标准。发起方和接收方可就其他名称进行协商。

value
Formal Standard
ISO-IR106462000UTF-8
ISO/IEC 10646, UTF-8 encoding
BINARY
None

如果未指定任何 hdrcharset 扩展标头记录,则用于对扩展标头记录中的所有值进行编码的缺省字符集必须是 ISO/IEC 10646-1:2000 标准 UTF-8 编码。

linkpath

正在为先前归档的另一个文件(任意类型)创建的链接的路径名。此记录将覆盖指定 ustar 头块中的 linkname 字段。指定 ustar 头块确定创建的链接类型。如果指定头块的 typeflag 为 1,则为硬链接。如果 typeflag 为 2,则为符号链接,而 linkpath 值是符号链接的内容。pax 将链接名称(符号链接的内容)从 UTF-8 编码转换为适用于本地文件系统的字符集。在写入或复制模式下使用时,pax 包括路径名不能完全通过 NULL 以外的可移植字符集成员表示的每个链接的 linkpath 扩展标头记录。

mtime

正在为先前归档的另一个文件(任意类型)创建的链接的路径名。此记录将覆盖指定 ustar 头块中的 linkname 字段。指定 ustar 头块确定创建的链接类型。如果指定头块的 typeflag1,则为硬链接。如果 typeflag2,则为符号链接,而 linkpath 值是符号链接的内容。pax 将链接名称(符号链接的内容)从 UTF-8 编码转换为适用于本地文件系统的字符集。在写入或复制模式下使用时,pax 包括路径名不能完全通过 NULL 以外的可移植字符集成员表示的每个链接的 linkpath 扩展标头记录。

path

指定文件的路径名。此记录将覆盖指定头块中的名称和 prefix 字段。pax 会将文件的路径名从 UTF-8 编码转换为适用于本地文件系统的字符集。在写入或复制模式下使用时,pax 包括路径名不能完全通过 NULL 以外的可移植字符集成员表示的每个文件的路径扩展标头记录。

realtime.any

保留带有 realtime 前缀的关键字以实现未来标准化。

security.any

保留带有 security 前缀的关键字以实现未来标准化。

size

以八位字节表示的文件大小,使用 ISO/IEC 646: 1991 标准中的数字以十进制数字表示。此记录将覆盖指定头块中的 size 字段。在写入或复制模式下使用时,pax 包括 size 值大于 8589934591(八进制 77777777777)的每个文件的大小扩展标头记录。

uid

文件所有者的用户 ID,使用 ISO/IEC 646:1991 标准中的数字以十进制数字表示。此记录将覆盖以下头块中的 uid 字段。在写入或复制模式下使用时, pax 包括所有者 ID 大于 2097151(八进制 7777777) 的每个文件的 uid 扩展标头记录。

uname

指定文件所有者的格式为用户数据库中的用户名。此记录会覆盖指定头块中的 uiduname 字段,以及任何 uid 扩展标头记录。在读取、复制或列表模式下使用时,pax 会将名称从标头记录的 UTF-8 编码转换为适用于接收系统用户数据库的字符集。如果任何 UTF-8 字符不能转换,并且未指定 –o invalid= UTF-8 选项,结果将由实现定义。在写入或复制模式下使用时,pax 包括用户名不能完全通过可移植字符集的字母和数字表示的每个文件的 uname 扩展标头记录。

如果 value 字段的长度为零,将删除先前输入同名扩展标头值或全局扩展标头值的所有头块字段。

如果扩展标头记录(或 –o 选项参数)中的关键字覆盖或删除 ustar 头块中的对应字段,pax 将忽略该头块字段的内容。

ustar 头块字段不同,NULLs 不限定值;值字段中的所有字符均将视为该字段的数据。

pax 扩展标头关键字优先级

本节介绍选择要应用于归档文件的各种标头记录和字段及命令行选项所依据的优先级。在读取或列表模式下使用 pax 时,将按以下序列确定文件属性:

  1. 如果使用 –o delete=keyword-prefix,将按照步骤 7(如果适用)确定受影响的属性,否则忽略受影响的属性。

  2. 如果使用 –o keyword:=,则忽略受影响的属性。

  3. 如果使用 –o keyword:=value,则为受影响的属性指定值。

  4. 如果包含 typeflag x 扩展标头记录,则为受影响的属性指定值。扩展标头记录发生冲突时,则最后在标头中提供的扩展标头记录优先。

  5. 如果使用 –o keyword=value,则为受影响的属性指定值。

  6. 如果包含 typeflag g 全局扩展标头记录,则为受影响的属性指定值。全局扩展标头记录发生冲突时,则最后在标头中提供的全局扩展标头记录优先。

  7. 否则,通过 ustar 头块确定属性。

pax 扩展标头文件时间

如果不能在 ustar 交换格式中所述的 ustar 标头逻辑记录中确切表示文件的修改时间,pax 将在写入或复制模式下为每个文件写入 mtime 记录。如果时间超出 ustar 范围,或者底层实现的文件系统支持非整数时间粒度且时间并非整数,可能会发生这种情况。所有这些时间记录的格式均以自新纪元算起的时间十进制表示(以秒为单位)。如果存在句点式 (.) 小数点字符,小数点右侧的数字表示次秒计时粒度单位,其中第一个数字是指十分之一秒,后续的每个数字均为前一个数字的十分之一。在读取或复制模式下,pax 会将文件的时间截断为最大不超过输入标头文件时间的值。在写入或复制模式下,如果能够将时间确切表示为十进制数字,pax 将输出确切时间;否则,如果该文件提取自底层实现支持相同时间粒度的系统,将仅生成足够的数字以便恢复该时间。

ustar 交换格式

ustar 归档磁带或文件包含一系列逻辑记录。每个逻辑记录均为 512 八位字节的固定大小逻辑记录。虽然可考虑将此格式存储到 9 磁轨行业标准 12.7 毫米(0.5 英寸)磁带,但也不排除其他类型的可移动介质。每种文件归档都由描述该文件的标头逻辑记录表示,后跟零个或多个逻辑记录以提供文件内容。归档文件末尾包含两个以二进制零填充的 512 八位字节逻辑记录,解释为归档结束指示符。

逻辑记录可按物理 I/O 操作进行分组,如 –bblocksize–x ustar 选项下所述。每组逻辑记录均可通过单项操作(等效于 write(2) 函数)写入。在磁带上,该写入的结果是单个磁带物理块。最后一个物理块通常是完整大小,两个零逻辑记录后的逻辑记录可包含未定义的数据。

标头逻辑记录的构造如下表所示。所有长度和偏移均以十进制表示。

表 1  ustar 头块
字段名称
八位字节偏移
长度(以八位字节为单位)
name
0
100
mode
100
8
uid
108
8
gid
116
8
size
124
12
mtime
136
12
chksum
148
8
typeflag
156
1
linkname
157
100
magic
257
6
version
263
2
uname
265
32
gname
297
32
devmajor
329
8
devminor
337
8
prefix
345
155

标头逻辑记录中的所有字符均以 ISO/IEC 646: 1991 标准的编码字符集表示。为最大限度地提高实现间的可移植性,应从以八位字节(带有最高有效位零)显示的可移植文件名字符集表示的字符中选择名称。如果实现支持在文件、用户和组名称中使用斜杠外部字符和可移植文件名字符集,则会出于交换目的为这些字符提供一个或多个实现定义编码。

pax 永远不会在不能使用 IEEE Std 1003.1-200x 中所述的过程进行访问的本地系统上创建文件名。如果发现介质上的某个文件名会成为无效文件名,则通过实现定义该文件的数据是否存储在文件分层结构中以及以什么名称存储。只要生成错误指示将忽略文件,pax 即可选择忽略这些文件。标头逻辑记录中的每个字段是连续的,即不使用任何填充。

标头逻辑记录中的每个字段是连续的。不使用任何填充。归档介质上的每个字符以连续方式存储。

字段 magicunamegname 是字符串,每个字段均以空字符结尾。字段 namelinknameprefix 是以空字符结尾的字符串,仅当数组中的所有字符均包含非空字符(包括最后一个字符)时除外。version 字段是两个八位字节数(包括字符 00(零零))。typeflag 包含一个字符。所有其他字段是前导零填充八进制数字(使用 ISO/IEC 646:1991 标准 IRV 数字)。每个数字字段以一个或多个空字符空格结尾。

归档介质上的每个字符以连续方式存储。字段 magicunamegname 是字符串,每个字段均以 NULL 字符结尾。

namelinknameprefix 是以空字符结尾的字符串,仅当数组中的所有字符均包含非空字符(包括最后一个字符)时除外。version 字段是两个八位字节数(包括字符 00(零零))。typeflag 包含单个字符。所有其他字段是前导零填充八进制数字(使用 ISO/IEC 646:1991 标准 IRV 数字)。每个数字字段以一个或多个空格或空字符结尾。

nameprefix 字段生成文件路径名。如果 prefix 并非空字符串(第一个字符不为 NULL),则通过串联 prefix (最多到第一个 NULL 字符)、斜杠字符和名称组成新路径名;否则,将单独使用名称。无论哪种情况,名称均在第一个 NULL 字符位置终止。如果 prefixNULL 开头,则忽略该字符。通过这种方式,能够支持最多包含 256 个字符的路径名。如果路径名与提供的空间不符,pax 会将错误通知给用户,并且不会存储文件标头或介质数据的任何部分。

linkname 字段不使用 prefix 生成路径名。因此,linkname 限制为 100 个字符。如果名称与提供的空间不符,pax 会将错误通知给用户,并且不会尝试在介质上存储链接。mode 字段提供 12 个以 ISO/IEC 646: 1991 标准八进制数字表示法编码的位。编码位表示 ustar mode 字段中的以下值:

位值
IEE Std 1003.1–2001 位
说明
04000
S_ISUID
执行时设置 UID
02000
S_ISGID
执行时设置 GID
01000
reserved
保留供未来标准化
00400
S_IRUSR
读取文件所有者类的权限
00200
S_IWUSR
写入文件所有者类的权限
00100
S_IXUSR
执行/搜索文件所有者类的权限
00040
S_IRGRP
读取文件组类的权限
00020
S_IWGRP
写入文件组类的权限
00010
S_IXGRP
执行/搜索文件组类的权限
00004
S_IROTH
读取文件其他类的权限
00002
S_IWOTH
写入文件其他类的权限
00001
S_IXOTH
执行/搜索文件其他类的权限

需要相应特权才能设置其中某个模式位且从归档恢复文件的用户不具备相应特权时,则忽略用户不具备相应特权的模式位。某些归档格式的模式位在 IEEE Std 1003.1-200x 卷中的其他位置没有提及。如果实现不支持这些位,则可予以忽略。

uidgid 字段分别是文件的所有者和组的用户和组 ID。

size 字段是文件大小(以八位字节为单位)。如果设置 typeflag 字段将文件指定为类型 1(链接)或 2(符号链接),则 size 字段将被指定为零。如果设置 typeflag 字段将文件指定为类型 5(目录),将按照相应记录类型定义的方式解释 size 字段。不会存储类型 1、2 或 5 的数据逻辑记录。如果将 typeflag 字段设置为 3(字符特殊文件)、4(块特殊文件)或 6 (FIFO),卷 IEEE Std 1003.1-200x 将不指定 size 字段的含义,也不会在介质上存储任何数据逻辑记录。此外,对于类型 6,读取时将忽略 size 字段。如果将 typeflag 字段设置为任何其他值,标头后写入的逻辑记录数为 (size+511)/512,忽略除法运算结果中的所有小数。

mtime 字段是归档文件时的文件修改时间。该字段是从 stat() 函数获取的修改时间八进制值的 ISO/IEC 646: 1991 标准表示形式。

chksum 字段是对标头逻辑记录中的所有八位字节简单求和得出的八进制值的 ISO/IEC 646: 1991 标准 IRV 表示形式。标头中的每个八位字节均被视为无符号值。这些值将添加为无符号整数,初始化为零,精度不小于 17 位。计算校验和时,按照将 chksum 字段全部指定为空格的方式进行处理。

typeflag 字段指定归档文件的类型。如果某个特定实现不识别该类型,或用户不具备创建该类型的相应特权,在定义该文件类型对 size 字段有效的情况下,提取文件时会假定其为常规文件,这可能会导致数据逻辑记录被写入介质。如果转换为常规文件,pax 将生成错误指示已进行转换。所有 typeflag 字段均以 ISO/IEC 646: 1991 标准 IRV 进行编码:

0

表示常规文件。为实现向后兼容,从归档提取文件时,应将二进制零 ('\0') 的 typeflag 值的含义识别为常规文件。以此版本归档文件格式写入的归档使用 ISO/IEC 646: 1991 标准 IRV '0' 的 typeflag 值创建常规文件。

1

表示链接到先前归档的任意类型的另一个文件的文件。此类文件通过具有相同设备和文件序列号的每个文件进行标识。链接名称在 linkname 字段中指定并标识 NULL 字符结束符(如果该名称的长度小于 100 八位字节)。

2

表示符号链接。符号链接的内容存储在 linkname 字段中。

3,4

分别表示字符特殊文件和块特殊文件。在这种情况下,devmajordevminor 字段包含定义设备的信息,卷 IEEE Std 1003.1-200x 未指定字段格式。实现可将设备规范映射到其各自的逻辑规范,也可忽略该条目。

5

指定目录或子目录。在基于目录进行磁盘分配的系统上,size 字段包含目录可承受的最大八位字节数(可舍入到最近的磁盘块分配单位)。size 字段为零指示不存在此类限制。不支持通过这种方式进行限制的系统应忽略 size 字段。

6

指定 FIFO 特殊文件。FIFO 文件归档会归档是否存在此文件及其内容。

7

保留以表示与实现的某种高性能属性关联的文件。不带此类扩展的实现应将此文件视为常规文件(类型 0)。

A-Z

字母 AZ(包含两者)专为定制实现保留。所有其他值则为将来版本的 IEEE Std 1003.1-200x 保留。

SUN.devmajor

pax 扩展标头关键字的 Solaris 扩展名。指定文件的主设备号。

在写入或复制模式下使用且指定 xustarpax 格式(请参见 -x format)时,pax 将包含主设备号过大无法适应 8 八位字节限制的每个文件的 SUN.devmajor 扩展标头记录。

SUN.devminor

pax 扩展标头关键字的 Solaris 扩展名。指定文件的次要设备号。

在写入或复制模式下使用且指定 xustarpax 格式(请参见 -x format)时,pax 将包含次要设备号过大无法适应 8 八位字节限制的每个文件的 SUN.devminor 扩展标头记录。

SUN.holesdata

pax 扩展标头关键字的 Solaris 扩展名。为稀疏文件指定数据和漏洞对。

在写入或复制模式下且指定 xustarpax 格式时(请参见 -x format),如果底层文件系统支持检测存在漏洞的文件(请参见 fpathconf(2)),并报告正在归档的文件中至少有一个漏洞,pax 将包含 SUN.holesdate 扩展标头记录。value 由两个或更多以下格式的连续条目组成:

SPACEdata_offsetSPACEhole_offset

其中数据偏移和漏洞偏移是将 SEEK_DATASEEK_HOLE 分别传递给 lseek(2) 返回的长值。例如,以下条目是一个文件(数据偏移:0、24576 和 49152 字节;漏洞偏移:8192、32768 和 49159: 49 SUN.holesdata= 0 8192 24576 32768 49152 49159 字节)扩展标头的 SUN.holesdata 条目示例。

49 SUN.holesdata= 0 8192 24576 32768 49152 49159

在读取或复制模式下提取文件时,如果在文件的扩展标头中发现 SUN.holesdata = 对,则使用此数据恢复文件并标识漏洞。例如,对于上面示例中提供的 SUN.holesdata,0 到 8192 字节作为数据存储,漏洞一直持续至下一数据位置 (24576),24576 至 32768 字节作为数据恢复,依此类推。

X

指定 xustar 格式(请参见 -x format)扩展标头的 Solaris 定制 typeflag 实现。typeflag 'x' 扩展标头被视为 ustar typeflag 'x' 扩展标头。

E

指定扩展属性标头的 Solaris 定制 typeflag 实现。请参见 fsattr(7)。

尝试使用 ustar 交换格式归档套接字将生成诊断消息。其他文件类型的处理由实现定义。

magic 字段是以该归档格式输出此归档的规范。如果此字段包含 ustar(显示的 ISO/IEC 646: 1991 标准 IRV 的五个字符,后跟有 NULL),unamegname 字段分别包含 ISO/IEC 646: 1991 标准 IRV 表示形式的文件所有者和组(如有必要,请截断适应空间)。通过保护保留版本的特权实用程序恢复文件时,将扫描用户和组数据库以查找这些名称。如果找到,将使用这些文件中包含的用户和组 ID,而不是 uidgid 字段中包含的值。

cpio 交换格式

面向八位字节的 cpio 归档格式是一系列条目,每个条目由标头(描述文件)、文件名和文件内容组成。

归档可记录为一系列固定大小的八位字节块。使用此分块只是为了使物理 I/O 更有效。最后一组块始终为完整大小。

对于面向八位字节的 cpio 归档格式,各条目信息的顺序由下表指示和描述:面向八位字节的 cpio 归档条目。有关其他详细信息,请参见 cpio.h 标头。

标头字段名称
长度(以八位字节为单位)
解释为
c_magic
6
八进制数
c_dev
6
八进制数
c_ino
6
八进制数
c_mode
6
八进制数
c_uid
6
八进制数
c_gid
6
八进制数
c_nlink
6
八进制数
c_rdev
6
八进制数
c_mtime
11
八进制数
c_namesize
6
八进制数
c_filesize
11
八进制数
文件名字段名称
长度
解释为
c_name
c_namesize
路径名字符串
文件名字段名称
长度
解释为
c_filedata
c_filesize
数据

cpio 标头

对于归档中的每个文件,标头仍按照先前写入的方式定义。标头字段的信息将写入为 ISO/IEC 646: 1991 标准字符(解释为八进制数)流。通过在数字的最高有效位一侧附加 ISO/IEC 646: 1991 标准 IRV 零,将八进制数扩展为必要的长度。结果将首先写入八位字节流的最高有效位。字段解释如下:

c_magic

通过包含标识值 "070707" 将归档标识为可传输归档。

c_dev,c_ino

包含在归档中唯一标识文件的值(即没有文件包含同一对 c_devc_ino 值,除非两者链接到同一个文件)。值以未指定的方式确定。

c_mode

包含下表中定义的文件类型和访问权限。

遵循卷 IEEE Std 1003.1-200x 的系统上支持目录、FIFO、系统链接和常规文件;保留先前定义的其他值以确保与现有系统兼容。能够支持其他文件类型。不应将此类文件写入专为传输到其他系统而设计的归档。

文件权限名称
指示
C_IRUSR
000400
所有者
C_IWUSR
000200
所有者
C_IXUSR
000100
所有者
C_IRGRP
000040
CW_IWFGP
000020
CW_IXGRP
000010
CW_IROTH
000004
其他
CW_IWOTH
000002
其他
CW_IXOTH
000001
其他
CW_ISUID
004000
设置 uid
W_ISGID
002000
设置 gid
W_ISVTX
001000
保留
文件类型名称
指示
C_ISDIR
040000
目录
C_ISFIFO
010000
FIFO
C_ISREG
0100000
常规文件
C_ISLNK
0120000
符号链接
C_ISBLK
060000
块特殊文件
C_ISCHR
020000
字符特殊文件
C_ISSOCK
0140000
套接字
C_ISCTG
0110000
保留
c_uid

包含所有者的用户 ID。

c_gid

包含组的组 ID

c_nlink

包含数字(大于或等于引用文件的归档中的链接数)。如果使用 –a 选项附加到 cpio 归档,则在计算归档附加部分的 c_nlink 值时,pax 无需计入归档现有部分的文件。如果向归档附加具有相同 c_dev c-ino 值的其他文件,则也无需更改归档现有部分的 c_nlink 值。

c_rdev

包含字符特殊文件或块特殊文件的实现定义信息。

c_mtime

包含自创建归档起文件的最新修改时间。

c_namesize

包含路径名长度,包括结尾的空字符。

c_filesize

包含文件长度(以八位字节为单位)。此长度是指紧跟标头结构的数据部分。

cpio 文件名

c_name 字段包含文件的路径名。此字段的长度(以八位字节为单位)是 c_namesize 值。如果发现介质上的某个文件名会成为无效路径名,则通过实现定义该文件的数据是否存储在文件分层结构中以及以什么名称存储。所有字符均以 ISO/IEC 646: 1991 标准 IRV 表示。为最大限度地提高实现间的可移植性,应从以八位字节(带有最高有效位零)显示的可移植文件名字符集表示的字符中选择名称。如果实现支持在文件、用户和组名称中使用可移植文件名字符集外部字符,则会出于交换目的为这些字符提供一个或多个实现定义编码。 pax 不会在不能通过卷 IEEE Std 1003.1-200x 中所述的过程进行访问的本地系统上创建文件名。如果发现介质上的某个文件名会成为无效文件名,则通过实现定义该文件的数据是否存储在本地文件系统中以及以什么名称存储。只要生成错误指示将忽略文件,pax 即可选择忽略这些文件。

cpio 文件数据

c_name 后面是 c_filesize 八位字节数据。以基于文件的方式解释此类数据。如果 c_filesize 为零,则 c_filedata 中不包含任何数据。从归档中恢复时:

  • 如果用户不具备创建指定类型文件的相应特权,pax 将忽略该条目并将错误消息写入标准错误。

  • 只有常规文件具有要恢复的数据。假定常规文件符合用户可能对格式读取实用程序施加的任何选择条件,则恢复此类数据。

  • 如果用户不具备设置某个特定 mode 标志的相应特权,则忽略该标志。某些归档格式的 mode 标志在 IEEE Std 1003.1-200x 卷中没有提及。如果实现不支持这些标志,则可予以忽略。

cpio 特殊条目

FIFO 特殊文件、目录和尾部将被记录,且 c_filesize 等于零。对于其他特殊文件,卷 IEEE Std 1003.1-200x 中未指定 c_filesize。归档中下一个文件条目的标头将直接写在其前面的文件条目的最后一个八位字节后。表示文件名尾部的标头指示归档末尾;此类标头后的归档的最后一个块中的八位字节内容不确定。

属性

有关下列属性的说明,请参见 attributes(7)

属性类型
属性值
可用性
system/core-os
接口稳定性
Committed(已确定)
标准
请参见 standards(7)

另请参见

chmod(1)cpio(1)ed(1)printf(1)tar(1)lseek(2)mkdir(2)stat(2)write(2)archives.h(3HEAD)attributes(7)environ(7)fnmatch(7)formats(7)、fsattr(7)、regex(7)、standards(7)

IEEE Std 1003.1-200xISO/IEC 646: 1991ISO POSIX-2:1993 标准