pax.1

PAX(1)

PAX(1)

FreeBSD General Commands Manual

PAX(1)

pax

读取和写入文件存档并复制目录层次结构

pax [-cdnvzO] [-f archive] [-s replstr] ... [-U user] ... [-G group] ... [-T [from_date] [,to_date]] ... [pattern ...] pax -r [-cdiknuvzDOYZ] [-f archive] [-o options] ... [-p string] ... [-s replstr] ... [-E limit] [-U user] ... [-G group] ... [-T [from_date] [,to_date]] ... [pattern ...] pax -w [-dituvzHLOPX] [-b blocksize] [[-a] [-f archive]] [-x format] [-s replstr] ... [-o options] ... [-U user] ... [-G group] ... [-B bytes] [-T [from_date] [,to_date] [/[c][m]]] ... [file ...] pax -r -w [-diklntuvDHLOPXYZ] [-p string] ... [-s replstr] ... [-U user] ... [-G group] ... [-T [from_date] [,to_date] [/[c][m]]] ... [file ...] directory

pax 实用程序将读取、写入和列出存档文件的成员,并将复制目录层次结构。 这些操作独立于特定的存档格式,并支持多种不同的存档格式。 可以在 -x 选项的描述下找到支持的存档格式列表。

-r-w 选项的存在指定 pax 将在以下哪种功能模式下运行: list 、 read 、 writecopy

列表。 将从 standard input 读取的存档文件成员的目录写入 standard output ,其路径名匹配指定的 patterns 。 目录每行包含一个文件名,并使用单行缓冲写入。

-r

读取。 提取从 standard input 读取的归档文件的成员,路径名与指定的 patterns 匹配。 存档格式和阻塞是根据输入自动确定的。 当提取的文件是目录时,将提取以该目录为根的整个文件层次结构。 所有提取的文件都是相对于当前文件层次结构创建的。 在 -p 选项下更详细地讨论了提取文件的所有权、访问和修改时间以及文件模式的设置。

-w

写。 使用指定的归档格式将包含 file 操作数的归档写入 standard output 。 当未指定 file 操作数时,将从 standard input 中读取每行一个要复制的文件列表。 当 file 操作数也是目录时,将包含以该目录为根的整个文件层次结构。

-r -w

复制。 将 file 操作数复制到目标 directory 。 当没有指定 file 操作数时,从 standard input 中读取每行一个要复制的文件列表。 当 file 操作数也是目录时,将包括以该目录为根的整个文件层次结构。 copy 的效果就像复制的文件被写入存档文件然后随后被提取,除了原始文件和复制的文件之间可能存在硬链接(请参见下面的 -l 选项)。

警告: 目标 directory 不能是 file 操作数之一或以 file 操作数之一为根的文件层次结构的成员。 在这些条件下 copy 的结果是不可预测的。

readlist 操作期间处理损坏的存档时, pax- 将尝试从媒体缺陷中恢复,并将搜索存档以定位和处理尽可能多的存档成员(有关错误处理的更多详细信息,请参见 -E 选项)。

directory 操作数指定目标目录路径名。 如果 directory 操作数不存在,或者用户不可写,或者不是目录类型, pax 将以非零退出状态退出。

pattern 操作数用于选择归档成员的一个或多个路径名。 归档成员是使用 fnmatch(3) 描述的模式匹配表示法选择的。 当未提供 pattern 操作数时,将选择归档的所有成员。 当 pattern 与目录匹配时,将选择以该目录为根的整个文件层次结构。 当 pattern 操作数未选择至少一个存档成员时, pax 会将这些 pattern 操作数写入诊断消息中的 standard error ,然后以非零退出状态退出。

file 操作数指定要复制或归档的文件的路径名。 file 操作数未选择至少一个存档成员时, pax 会将这些 file 操作数路径名写入诊断消息中的 standard error ,然后以非零退出状态退出。

支持以下选项:

-r

standard input 读取归档文件并提取指定 files 。 如果需要任何中间目录来提取存档成员,则将创建这些目录,就像调用 mkdir(2) 时使用 S_IRWXU 、 S_IRWXGS_IRWXO 的按位 OR 作为模式参数一样。 当所选存档格式支持链接文件的规范并且在提取存档时无法链接这些文件时, pax 将向 standard error 写入诊断消息,并在操作完成时以非零退出状态退出。

-w

以指定的归档格式将文件写入 standard output 。 当没有指定 file 操作数时, standard input 将读取路径名列表,每行一个,没有任何前导或尾随 ⟨blanks⟩ 。

-a

将 files 附加到先前写入的存档的末尾。 如果未使用 -x 选项指定存档格式,则将选择存档中当前使用的格式。 任何以不同于存档中已使用格式的格式附加到存档的尝试都将导致 pax- 立即以非零退出状态退出。 开始写入的存档卷中使用的阻塞大小将继续用于该存档卷的其余部分。

警告: 许多存储设备不支持执行附加操作所需的操作。 任何尝试附加到存储在此类设备上的存档都可能会损坏存档或产生其他不可预知的结果。 特别是磁带驱动器更可能不支持附加操作。 存储在常规文件系统文件或磁盘设备中的存档通常支持追加操作。

-b blocksize

writing 存档时,每次写入存档文件时,以十进制正整数字节数阻止输出。 blocksize 必须是 512 字节的倍数,最大为 64512 字节。 大于 32256 字节的 blocksize 违反 POSIX 标准,并且不能移植到所有系统。 blocksize 可以以 kb 结尾,以分别指定乘以 1024 (1K) 或 512。 一对 blocksizes 可以用 x 分隔以表示产品。 特定的存档设备可能会对其支持的阻塞大小施加额外的限制。 如果未指定阻塞,则默认 blocksize 取决于所使用的特定存档格式(请参阅 -x 选项)。

-c

匹配 except pattern 和 file 操作数指定的所有文件或存档成员。

-d

导致目录类型的文件被复制或存档,或目录类型的存档成员被提取,仅匹配目录文件或存档成员,而不匹配以目录为根的文件层次结构。

-f archive

将 archive 指定为输入或输出归档的路径名,覆盖默认的 standard input (用于 listread) 或 standard output (用于 write )。 单个存档可以跨越多个文件和不同的存档设备。 需要时, pax 将提示输入存档中下一个卷的文件或设备的路径名。

-i

以交互方式重命名文件或存档成员。 对于匹配 pattern 操作数的每个归档成员或匹配 file 操作数的每个文件, pax 将提示 /dev/tty 提供文件名、文件模式和修改时间。 然后 pax 实用程序将从 /dev/tty 读取一行。 如果此行为空,则跳过文件或存档成员。 如果此行包含单个句点,则处理文件或存档成员而不修改其名称。 否则,其名称将替换为该行的内容。 如果在读取响应时遇到 <EOF> 或无法打开 /dev/tty 进行读取和写入, pax 实用程序将立即以非零退出状态退出。

-k

不要覆盖现有文件。

-l

链接文件。 (字母 ell)。 在 copy 模式 (-r -w) 中,尽可能在源文件层次结构和目标文件层次结构之间建立硬链接。

-n

选择与每个 pattern 操作数匹配的第一个归档成员。 每个 pattern 匹配的存档成员不超过一个。当类型目录的成员匹配时,以该目录为根的文件层次结构也匹配(除非还指定了 -d )。

-o options

修改用于提取或写入归档文件的算法的信息,该算法特定于 -x 指定的归档格式。 通常, options 采用以下形式: name=value

-p string

指定一个或多个文件特征选项(权限)。 string 选项参数是一个字符串,指定提取时要保留或丢弃的文件特征。 该字符串由规范字符 a 、 e 、 m 、 op 组成。 可以在同一个字符串中连接多个特征,并且可以指定多个 -p 选项。 规范字符的含义如下:

a

不要保留文件访问时间。默认情况下,尽可能保留文件访问时间。

e

‘保留一切’ 、用户 ID、组 ID、文件模式位、文件访问时间和文件修改时间。 这旨在由具有所有适当权限的 root 用户使用,以便在存档中记录文件时保留文件的所有方面。 e 标志是 op 标志的总和。

m

不保留文件修改时间。 默认情况下,尽可能保留文件修改时间。

o

保留用户 ID 和组 ID。

p

‘保留’ 文件模式位。 这旨在供具有常规权限的 user 使用,他们希望保留文件的所有方面而不是所有权。 默认情况下会保留文件时间,但提供了另外两个标志来禁用此功能并改用提取时间。

在前面的列表中, ‘preserve’ 表示存储在存档中的属性被赋予提取的文件,受调用进程的许可。 否则,提取文件的属性被确定为正常文件创建操作的一部分。 如果既没有指定 e 也没有指定 o 规范字符,或者由于任何原因没有保留用户 ID 和组 ID, pax 将不会设置文件模式的 S_ISUID (setuid) 和 S_ISGID (setgid) 位。 果这些项目中的任何一项因任何原因保存失败, pax 将向 standard error 写入诊断消息。 未能保留这些项目将影响最终的退出状态,但不会导致提取的文件被删除。 如果任何字符串选项参数中的文件特征字母重复或相互冲突,则最后给出的字母将优先。 例如,如果指定了

`-p` eme

,则仍会保留文件修改时间。

pax 不理解 chflags(1) 设置的文件标志,但是 tar(1) 和 dump(8) 会保留这些标志。

-s replstr

使用 ed(1) 实用程序正则表达式的语法,根据替换表达式 replstr 修改由 pattern 或 file 操作数指定的文件或存档成员名称。 这些正则表达式的格式是:

/old/new/[gp]

与 ed(1) 一样, old 是一个基本的正则表达式, new 可以包含一个 (&)符号、 \n (其中 n 是一个数字)反向引用或子表达式匹配。 old 字符串也可能包含 <newline> 字符。 任何非空字符都可以用作分隔符(此处显示 /)。可以指定多个 -s 表达式。 表达式按照它们在命令行中指定的顺序应用,以第一个成功的替换结束。 可选的尾随 g 继续将替换表达式应用于路径名子字符串,该子字符串以最后一次成功替换结束后的第一个字符开头。 第一次不成功的替换将停止 g 选项的操作。 可选的尾随 p 将导致成功替换的最终结果以以下格式写入 standard error

<original pathname> >> <new pathname>

替代空字符串的文件或存档成员名称不会被选中,将被跳过。

-t

pax 读取或访问的任何文件或目录的访问时间重置为与 pax 读取或访问之前相同。

-u

忽略比现有文件或同名存档成员更早的文件(文件修改时间更短)。 在 read 过程中,如果归档成员比文件新,则将提取与文件系统中的文件同名的归档成员。 在 write 过程中,与存档成员同名的文件系统成员如果比存档成员更新,则将被写入存档。 在 copy 期间,目标层次结构中的文件将替换为源层次结构中的文件,或者如果源层次结构中的文件较新,则由指向源层次结构中文件的链接替换。

-v

list 操作期间,使用带有 -l 选项的 ls(1) 实用程序的格式生成详细的目录。 对于表示到存档前一个成员的硬链接的路径名,输出具有以下格式:

<ls -l listing> == <link name>

对于表示符号链接的路径名,输出格式为:

<ls -l listing> => <link name>

其中 <ls -l listing> 是 ls(1) 实用程序在与 -l 选项一起使用时指定的输出格式。 否则,对于所有其他操作模式 (read 、 writecopy), 只要在该文件或存档成员上开始处理,就会写入路径名并将其刷新为 standard error ,而无需尾随 <newline> 。 尾随 <newline> 不缓冲,仅在文件被读取或写入后写入。

-x format

指定输出存档格式,默认格式为 ustar 。 pax 实用程序当前支持以下格式:

cpio

IEEE Std 1003.2 (“POSIX.2”) 标准中指定的扩展 cpio 交换格式。 此格式的默认块大小为 5120 字节。 可能被这种格式截断的文件的 inode 和设备信息(用于检测这种格式的文件硬链接)由 pax 检测并修复。

bcpio

旧的二进制 cpio 格式。此格式的默认块大小为 5120 字节。 这种格式不是很便携,当有其他格式可用时不应该使用。 可能被这种格式截断的文件的 inode 和设备信息(用于检测这种格式的文件硬链接)由 pax 检测并修复。

sv4cpio

System V 发行版 4 cpio。 此格式的默认块大小为 5120 字节。可能被这种格式截断的文件的 inode 和设备信息(用于检测这种格式的文件硬链接)由 pax 检测并修复。

sv4crc

带有文件 crc 校验和的 System V 发行版 4 cpio。 此格式的默认块大小为 5120 字节。 可能被这种格式截断的文件的 inode 和设备信息(用于检测这种格式的文件硬链接)由 pax 检测并修复。

tar

4.3BSD 中的旧 BSD tar 格式。 此格式的默认块大小为 10240 字节。 以这种格式存储的路径名长度必须为 100 个字符或更少。 只会归档 regular 文件、 hard links 、 soft linksdirectories (不支持其他文件系统类型)。 为了向后兼容甚至更旧的 tar 格式,可以在编写存档时使用 -o 选项来省略目录的存储。 此选项采用以下形式:

`-o` `write_opt=nodir`

ustar

IEEE Std 1003.2 (“POSIX.2”) 标准中指定的扩展 tar 交换格式。 此格式的默认块大小为 10240 字节。以这种格式存储的路径名的长度必须为 255 个字符或更少。 目录部分最多 155 个字符,每个路径组件必须少于 100 个字符。

pax 实用程序将检测并报告由于任何特定存档格式限制而无法存储或提取的任何文件。 单独的存档格式可能会对使用施加额外的限制。 典型的存档格式限制包括(但不限于):文件路径名长度、文件大小、链接路径名长度和文件类型。

-z

在写入(读取)时使用 gzip(1) 压缩(解压缩)存档。与 -a 不兼容。

-B bytes

将写入单个归档卷的字节数限制为 bytes 。 bytes 限制可以以 m 、 kb 结尾,以分别指定乘以 1048576 (1M)、1024 (1K) 或 512。 一对 bytes 限制可以用 x 分隔来表示一个产品。

请注意,指定的大小是针对未压缩的 pax 图像本身的。 如果还使用了 -z 选项,则生成的文件可能包含更少的 bytes, 具体取决于存档内容的可压缩性。 如果需要可预测大小的压缩卷,请参阅 zip(1) 。

警告: 仅当将存档写入支持基于最后(或最大)写入偏移量的文件结束读取条件的设备(例如常规文件或磁带驱动器)时,才使用此选项。 不建议将此选项与软盘或硬盘一起使用。

-D

此选项与 -u 选项相同,只是检查的是文件 inode 更改时间而不是文件修改时间。 文件 inode 更改时间可用于选择其 inode 信息(例如,uid、gid 等)比目标 directory 中的文件副本更新的文件。

-E limit

当试图读取有缺陷的存档时,限制连续读取错误的数量为 limit 。 使用正 limit 时, pax 将尝试从存档读取错误中恢复,并从存档中存储的下一个文件开始继续处理。 limit 为 0 将导致 pax 在存档卷上检测到第一个读取错误后停止操作。 NONE 的 limit 将导致 pax 尝试永远从读取错误中恢复。 默认 limit 是少量的正数重试。

警告: 在使用这个选项和 NONE 时应该非常小心,因为 pax 可能会在一个有严重缺陷的存档中陷入无限循环。

-G group

根据 group 名选择一个文件,或者当以 # 开头时,一个数字 gid。 # 。 可以提供多个 -G 选项,并在第一次匹配时停止检查。

-H

在执行物理文件系统遍历时仅遵循命令行符号链接。

-L

按照所有符号链接执行逻辑文件系统遍历。

-O

强制归档为一卷。 如果卷过早结束, pax 将不会提示输入新卷。 此选项对于无法由人工执行错误恢复的自动化任务非常有用。

-P

不跟随符号链接,执行物理文件系统遍历。 这是默认模式。

-T [from_date][,to_date][/[c][m]]

允许根据从 from_date 到 to_date (包括日期)的指定时间范围内的文件修改或inode更改时间来选择文件。 如果只提供了 from_date ,则选择修改或 inode 更改时间等于或更年轻的所有文件。 如果只提供了一个 to_date ,那么所有修改或 inode 更改时间等于或更早的文件都将被选中。 当 from_date 等于 to_date 时,只会选择修改或 inode 更改时间正好是该时间的文件。

pax 处于 writecopy 模式时,可选的尾随字段 [c][m] 可用于确定在比较中使用哪个文件时间(inode 更改、文件修改或两者)。 如果两者均未指定,则默认仅使用文件修改时间。 m 指定文件修改时间的比较(文件最后一次写入的时间)。 c 指定了 inode 更改时间的比较(文件 inode 上次更改的时间;例如,所有者、组、模式等的更改)。 当同时指定 c 和 m 时,将比较修改时间和 inode 更改时间。 inode 更改时间比较在选择属性最近更改的文件或选择最近创建且修改时间重置为较旧时间的文件时很有用(就像从存档中提取文件并保留修改时间时发生的情况一样)。 当 pax 用于创建基于时间的增量归档时,使用两个文件时间进行时间比较很有用(只有在指定时间范围内更改的文件才会被归档)。

一个时间范围由六个不同的字段组成,每个字段必须包含两位数字。 格式为:

[yy[mm[dd[hh]]]]mm[.ss]

其中 yy 是年份的最后两位,第一个 mm 是月份(从 01 到 12), dd 是月份中的某天(从 01 到 31), hh 是一天中的小时(从 00 到 23 ),第二个 mm 是分钟(从 00 到 59), ss 是秒(从 00 到 59)。 分钟字段 mm 是必需的,而其他字段是可选的,必须按以下顺序添加:

`hh`, `dd`, `mm`, `yy 。`

ss 字段可以独立于其他字段添加。 时间范围是相对于当前时间的,所以

`-T` 1234/cm

将选择今天或之后的 12:34 PM 修改或 inode 更改时间的所有文件。 可以提供多个 -T 时间范围,并在第一次匹配时停止检查。

-U user

根据 user 名选择文件,或者以 # 开头时,选择数字 uid。 # 。 可以提供多个 -U 选项,并在第一个匹配项时停止检查。

-X

遍历由路径名指定的文件层次结构时,不要下降到具有不同设备 ID 的目录。 有关设备 ID 的更多信息,请参阅 stat(2) 中描述的 st_dev 字段。

-Y

此选项与 -D 选项相同,只是使用所有文件名修改完成后创建的路径名检查 inode 更改时间。

-Z

此选项与 -u 选项相同,只是使用所有文件名修改完成后创建的路径名检查修改时间。

对文件或存档成员的名称进行操作的选项 (-c -、 -i -、 -n -、 -s -、 -u -、 -v -、 -D -、 -G -、 -T -、 -U -、 -Y-Z) 交互如下。

read 操作期间提取文件时,归档成员被 ‘selected’, 仅基于用户指定的模式操作数,这些操作数由 -c -、 -n -、 -u -、 -D -、 -G -、 -T -、 -U 选项修改。 然后任何 -s-i 选项将按该顺序修改这些选定文件的名称。 然后将根据最终路径名应用 -Y-Z 选项。最后, -v 选项将写入这些修改产生的名称。

write 操作期间归档文件或在 copy 操作期间复制文件时,归档成员被 ‘selected’, 仅基于用户指定的路径名,这些路径名由 -n -、 -u -、 -D -、 -G -、 -T-U 选项( -D 选项仅在复制操作期间适用)。 然后任何 -s-i 选项将按该顺序修改这些选定文件的名称。 然后在 copy 操作期间,将根据最终路径名应用 -Y-Z 选项。最后, -v 选项将写入这些修改产生的名称。

-u-D 选项中的一个或两个与 -n 选项一起指定时,除非文件比与之比较的文件新,否则不会认为文件已被选中。

pax 实用程序将以下列值之一退出:

0

所有文件均已成功处理。

1

发生错误。

命令:

pax -w -f /dev/sa0 .

将当前目录的内容复制到设备 /dev/sa0 。

命令:

pax -v -f filename

给出存储在 filename 中的存档的详细目录。

以下命令:

mkdir /tmp/to

cd /tmp/from

pax -rw . /tmp/to

会将整个 /tmp/from 从目录层次结构复制到 /tmp/to 。

命令:

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

读取存档 a.pax, 所有文件都以 ``/usr'' 为根目录到相对于当前目录提取的存档中。

命令:

pax -rw -i . dest_dir

可用于交互选择要从当前目录复制到 dest_dir 的文件。

命令:

pax -r -pe -U root -G bin -f a.pax

将从归档 a.pax 中提取所有文件,这些文件由 rootbin 拥有,并将保留所有文件权限。

命令:

pax -r -w -v -Y -Z home /backup

将仅更新(并列出)目标目录 /backup 中的文件,这些文件比源文件树 home 中的同名文件更旧( inode 更改或文件修改时间更短)。

每当 pax 在读取存档时无法创建文件或链接,或者在写入存档时无法找到文件,或者在指定 -p 选项时无法保留用户 ID、组 ID 或文件模式时,都会将诊断消息写入将返回 standard error 和非零退出状态,但处理将继续。 在 pax 无法创建文件链接的情况下, pax 将不会创建该文件的第二个副本。

如果从档案中提取文件被信号或错误提前终止, pax 可能只提取了用户想要的部分文件。 另外,提取的文件和目录的文件模式可能有不正确的文件位,修改和访问时间可能有误。

如果归档的创建因信号或错误而过早终止,则 pax 可能仅创建了部分归档,这可能违反特定的归档格式规范。

如果在进行 copy 时, pax 检测到文件将要覆盖自身,则不会复制该文件,则会将诊断消息写入 standard error ,并且当 pax 完成时,它将以非零退出状态退出。

cpio(1) 、 tar(1)

pax 实用程序是 IEEE Std 1003.2 (“POSIX.2”) 标准的超集。 选项 -z -、 -B -、 -D -、 -E -、 -G -、 -H -、 -L -、 -O -、 -P -、 -T -、 -U -、 -Y -、 -Z, 归档格式 bcpio 、 sv4cpio 、 sv4crc 、 tar, 以及 list 和 read 操作期间有缺陷的存档处理是对 POSIX 标准的扩展。

pax 实用程序出现在 4.4BSD 中。

加州大学圣地亚哥分校的 Keith Muller

pax 实用程序无法识别多字节字符。

由 chflags(1) 设置的文件标志不会被 pax 保留。 chflags(1) 的 BUGS 部分有一个不知道标志的实用程序列表。

December 29, 2018

FreeBSD 13.1-RELEASE

最后更新于

FreeBSD 中文社区