1、命令简介
pax:用于归档(archive)和提取(extract)文件的命令行工具。它在类Unix系统(包括Linux)上可用,并提供了一种更现代的替代方法来处理归档文件,例如tar。
2、命令语法
pax [-0cdOnvz] .Bk -words [-f archive] .Ek .Bk -words [-s replstr] ... .Ek .Bk -words [-U user] ... .Ek .Bk -words [-G group] ... .Ek .Bk -words [ -T [from_date] [,to_date] ] ... .Ek [pattern ...] pax -r [-cdiknuvzDOYZ] .Bk -words [-f archive] .Ek .Bk -words [-o options] ... .Ek .Bk -words [-p string] ... .Ek .Bk -words [-s replstr] ... .Ek [-E limit] .Bk -words [-U user] ... .Ek .Bk -words [-G group] ... .Ek .Bk -words [ -T [from_date] [,to_date] ] ... .Ek [pattern ...] pax -w [-0dituvzHLOPX] .Bk -words [-b blocksize] .Ek [ [-a] [-f archive] ] .Bk -words [-x format] .Ek .Bk -words [-s replstr] ... .Ek .Bk -words [-o options] ... .Ek .Bk -words [-U user] ... .Ek .Bk -words [-G group] ... .Ek .Bk -words [-B bytes] .Ek .Bk -words [ -T [from_date] [,to_date] [/[c][m]] ] ... .Ek [file ...] pax -r -w [-0diklntuvDHLOPXYZ] .Bk -words [-p string] ... .Ek .Bk -words [-s replstr] ... .Ek .Bk -words [-U user] ... .Ek .Bk -words [-G group] ... .Ek .Bk -words [ -T [from_date] [,to_date] [/[c][m]] ] ... .Ek [file ...] directory
3、命令描述
pax 可以读取、写入和列出归档文件的成员,并复制目录结构。pax 的操作与具体的归档格式无关,支持各种不同的归档格式。在 -x
选项的描述下可以找到支持的归档格式列表。
-r
和 -w
选项的存在指定了 pax 将在以下哪种功能模式下运行:列出、读取、写入和复制。
标签 | 描述 |
| 列表。pax将从标准输入写入匹配指定模式的归档文件的成员目录。 目录包含每行一个文件名,并使用单行缓冲写入。 |
-r | 读取。pax从标准输入提取归档文件的成员, 匹配指定的模式。归档格式和阻塞会自动确定。 当提取的文件是目录时, 它会提取以该目录为根的整个文件层次结构。 提取的文件都相对于当前文件层次结构创建。 有关提取文件的所有权、 访问和修改时间以及文件模式的设置,请参阅-p选项下的详细信息。 |
-w | 写入。pax使用指定的归档格式将包含文件操作数的归档写入标准输出。 如果没有指定文件操作数,则从标准输入读取每行一个文件的复制列表。 如果文件操作数也是目录,则将包括以该目录为根的整个文件层次结构。 |
-r -w | 复制。pax将文件操作数复制到目标目录。如果没有指定文件操作数, 则从标准输入读取每行一个文件的复制列表。如果文件操作数也是目录, 则将包括以该目录为根的整个文件层次结构。 复制效果类似于将复制的文件写入归档文件, 然后随后提取它们, 除了原始文件和复制文件之间可能存在硬链接(请参阅下面的-l选项)。 |
Warning | 目标目录不得是文件操作数之一, 也不得是文件操作数之一所在的文件层次结构的一部分。 在这些条件下复制会产生不可预测的结果。 |
4、命令选项
在读取或列出操作期间处理损坏的归档文件时,pax将尝试从媒体缺陷中恢复,并搜索归档以查找和处理尽可能多的归档成员(有关错误处理的更多详细信息,请参阅-E选项)。
目录操作数指定了目标目录路径名。如果目录操作数不存在,或者不可写入用户,或者不是目录类型,pax将以非零退出状态退出。
模式操作数用于选择一个或多个归档成员的路径名。可以使用fnmatch(3)描述的模式匹配符号选择归档成员。当未提供模式操作数时,将选择归档的所有成员。当模式匹配一个目录时,将选择以该目录为根的整个文件层次结构。当模式操作数未选择至少一个归档成员时,pax将在标准错误中写入这些模式操作数,并以非零退出状态退出。
文件操作数指定要复制或存档的文件的路径名。当文件操作数未选择至少一个归档成员时,pax将在标准错误中写入这些文件操作数路径名,并以非零退出状态退出。
以下是选项:
选项 | 描述 |
-r | 从标准输入读取归档文件并提取指定文件。 如果在提取归档成员时需要中间目录, 将以位运算 OR S_IRWXU、S_IRWXG 和 S_IRWXO 作为模式参数调用mkdir(2) 来创建这些目录。 当所选的归档格式支持链接文件的指定 且这些文件在提取归档时无法链接时, pax将在操作完成时向标准错误 写入诊断消息并以非零退出状态退出。 |
-w | 使用指定的归档格式将文件写入标准输出。 如果没有指定文件操作数, 则从标准输入读取文件列表, 每行一个文件路径,没有前导或尾随空白字符。 |
-a | 将文件追加到先前写入的归档的末尾。 如果未使用-x选项指定归档格式, 则将选择归档中当前正在使用的格式。 任何尝试追加到与归档中已使用的格式 不同的格式的归档 将导致pax立即以非零退出状态退出。 许多存储设备无法支持执行追加操作, 特别是磁带驱动器更不太可能支持追加操作。 通常,存储在常规文件系统文件 或磁盘设备上的归档将支持追加操作。 |
-0 | 使用NUL('\0')字符作为路径名终止符, 而不是换行符('\n')。 这仅适用于从标准输入读取的写入 和复制模式中的路径名, 以及在列表模式下写入标准输出的路径名。 预计将与find(1)中的-print0功能 或xargs(1)中的-0标志一起使用。 |
-b | 在写入归档时,将输出块化为每次写入归档文件的正十进制整数字节数。 块大小必须是512字节的倍数, 最大为64512字节。大于32256字节的归档 违反了POSIX标准,可能不会在所有系统上移植。块大小可以以'k'或'b'结尾, 以指定乘以1024(1K)或512, 或者可以使用'x'将一对块大小分开, 以表示一个乘积。特定的归档设备 可能对其支持的块大小有附加限制。 当未指定块时, 默认块大小取决于 正在使用的具体归档格式(请参阅-x选项)。 |
-c | 匹配所有文件或归档成员, 除了由模式和文件操作数指定的那些。 |
-d | 导致被复制或归档的类型为目录的文件, 或被提取的类型为目录的归档成员, 仅匹配目录文件或归档成员 而不匹配根目录处的文件层次结构。 |
-f | 将归档视为输入或输出归档的路径名 ,覆盖默认的标准输入(用于列出和读取) 或标准输出(用于写入)。 单个归档可以跨越多个文件和不同的归档设备。 必要时,pax将提示输入下一个归档卷中的文件 或设备的路径名。 |
-i | 交互式地重命名文件或归档成员。 对于每个与模式操作数匹配的归档成员 或每个与文件操作数匹配的文件, pax将提示/dev/tty,提供文件的名称、 文件模式和修改时间。 然后,pax将从/dev/tty读取一行。 如果此行为空,则跳过文件或归档成员。 如果此行由一个单独的句点组成 ,则以不修改其名称的方式处理文件 或归档成员。否则,其名称将替换为该行的内容。如果在读取响应时遇到EOF 或无法打开/dev/tty以进行读取和写入, 则pax将立即以非零退出状态退出。 |
-k | 不要覆盖现有文件。 |
-l | 在复制模式(-r-w)中创建源 和目标文件层次结构之间的硬链接(尽可能)。 |
-n | 选择与每个模式操作数匹配的第一个归档成员。 每个模式最多匹配一个归档成员。 当匹配类型为目录的成员时, 也会匹配以该目录为根的文件层次结构 (除非还指定了-d)。 |
-o | 用于修改特定于由-x指定的归档格式的提取 或写入归档文件的算法的信息。 通常,选项采用以下形式:name=value。 |
-p | 指定一个或多个文件特性选项(特权)。 字符串选项参数是一个字符串, 用于指定要在提取时保留或丢弃的文件特性。 该字符串由规范字符a、e、m、o和p组成。 可以在同一字符串内连接多个特性, 并可以指定多个-p选项。规范字符的含义如下: |
在上面的列表中,'preserve' 表示存储在归档中的属性将赋予提取的文件,但受调用进程的权限限制。否则,提取文件的属性将作为正常文件创建操作的一部分确定。如果未指定e或o规范字符,或者由于任何原因未保留用户ID和组ID,pax将不会设置文件模式的S_ISUID(setuid)和S_ISGID(setgid)位。如果由于任何原因未能保留这些项目,pax将向标准错误写入诊断消息。未能保留这些项目将影响最终的退出状态,但不会导致提取的文件被删除。如果字符串选项参数中的文件特性字母重复或彼此冲突,则最后给定的选项将优先。例如,如果指定了
-p eme
仍会保留文件的修改时间。
选项 | 描述 |
-s replstr | 根据替换表达式replstr修改由模式 或文件操作数指定的文件或归档成员名称, 使用ed(1)实用程序正则表达式的语法。 正则表达式的格式如下:/old/new/[gp]。 old是一个基本正则表达式, new可以包含引用符('&')、'\n' (其中n是数字)的反向引用或子表达式匹配。 old字符串也可以包含换行字符。 可以使用任何非空字符作为分隔符 (此处显示'/')。可以指定多个-s表达式。 这些表达式按照在命令行上指定的顺序应用, 以第一个成功的替换结束。 可选的尾随g继续将替换表达式应用于 从上一次成功替换结束后的第一个字符 开始的路径名子字符串。 第一个不成功的替换停止g选项的操作。 可选的尾随p将导致成功 替换的最终结果以以下格式写入标准错误输出: >> 。 替换为空字符串的文件或归档成员名称 将不被选择并将被跳过。 |
-t | 将pax读取或访问的任何文件 或目录的访问时间重置为读取 或访问之前的时间。 |
-u | 忽略比现有文件或具有相同名称的归档成员更老(具有较旧的文件修改时间)的文件。 在读取期间, 如果归档成员的修改时间比文件系统中的文件新,则将提取具有相同名称的归档成员。 在写入期间,如果文件系统成员的名称 与归档成员的名称相同且新于归档成员, 则将写入归档。在复制期间, 目标层次结构中的文件将被源层次结构中的文件 或源层次结构中的文件链接取代, 如果源层次结构中的文件较新,则将被链接。 |
-v | 在列表操作期间,使用ls(1)实用程序的-l选项格式 生成详细的目录内容表。 对于表示对归档中先前成员的硬链接的路径名, 输出的格式为: == <链接名称>。 对于表示符号链接的路径名,输出的格式为: => <链接名称>, 其中是与ls(1)实用程序 一起使用-l选项时指定的输出格式。 否则,在所有其他操作模式 (读取、写入和复制)中, 路径名将在处理该文件或归档成员时 立即写入标准错误输出, 并且没有尾随换行符。尾随换行符不会被缓冲, 只有在文件已被读取或写入后才会被写入。 |
-x格式 | 指定输出归档格式,默认格式为ustar。pax目前支持以下格式: |
选项 | 描述 |
cpio | 在-p1003.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 | BSD4.3中发现的旧的BSD tar格式。 该格式的默认块大小为10240字节。 此格式存储的路径名必须在100个字符或更少的长度内 (包括尾随字符,这意味着文件名最多可以有99个字符的长度)。 仅存档正常文件、硬链接、符号链接和目录 (不支持其他文件系统类型)。 为了向后兼容更早的tar格式, 可以在写入归档时使用-o选项以省略目录的存储。 此选项采用以下形式:-o write_opt=nodir |
ustar | 在-p1003.2标准中指定的扩展tar交换格式。 该格式的默认块大小为10240字节。 此格式存储的文件名必须在100个字符或更少的长度内 (包括尾随字符,这意味着文件名最多可以有99个字符的长度)。 此格式存储的路径名(目录名+文件名) 必须在250个字符或更少的长度内。 |
pax 将会检测并报告由于特定归档格式的限制而无法存储或提取的任何文件。各个归档格式可能会对使用施加额外的限制。典型的归档格式限制包括(但不限于):文件路径名长度、文件大小、链接路径名长度以及文件类型。
选项 | 描述 |
-z | 使用gzip(1)在写入(读取)时压缩(解压缩)存档。与-a不兼容。 |
-B bytes | 将写入单个存档卷的字节数限制为bytes。 bytes限制可以以'm'、'k'或'b'结尾, 分别表示乘以1048576 (1M)、1024 (1K) 或 512。 两个bytes限制可以用'x'分隔,表示乘积。 警告 :只有在写入支持基于最后(或最大) 写入偏移的文件结束读取条件的设备 (如常规文件或磁带驱动器)时才使用此选项。 不建议将此选项用于软盘或硬盘。 |
-D | 该选项与-u选项相同, 但是检查的是文件inode更改时间, 而不是文件修改时间。 文件inode更改时间可用于选择其inode信息 (例如,UID、GID等)比目标目录中的文件副本更新的文件。 |
-E limit | 限制尝试读取有缺陷的存档时连续读取错误的次数为limit。 对于正值限制,pax将尝试从存档读取错误中恢复, 并从存档中的下一个文件开始继续处理。限制为0时, pax将在检测到存档卷的第一个读取错误后停止操作。 限制为NONE时,pax将永远尝试从读取错误中恢复。 默认限制是小的正数重试次数。 警告 :使用NONE选项时应非常小心, 因为pax可能会在非常有缺陷的存档上陷入无限循环。 |
-G group | 根据其组名或以#开头的数字gid选择文件。 可以使用‘\’来转义#。可以提供多个-G选项, 检查在第一个匹配时停止。 |
-H | 在执行物理文件系统遍历时,只遵循命令行符号链接。 |
-L | 遵循所有符号链接执行逻辑文件系统遍历。 |
-O | 强制存档为单卷。如果卷提前结束,pax不会提示新的卷。 这个选项在无法由人类进行错误恢复的自动化任务中很有用。 |
-P | 不遵循符号链接,执行物理文件系统遍历。这是默认模式。 |
-T | 允许根据文件修改或inode更改时间在from_date 到to_date的指定时间范围内选择文件(日期包括在内)。 如果只提供了from_date, 则选择所有修改或inode更改时间等于或更新的文件。 如果只提供了to_date, 则选择所有修改或inode更改时间等于或较早的文件。 当from_date等于to_date时, 只选择修改或inode更改时间完全为那个时间的文件。 当pax处于写入或复制模式时, 可选的尾随字段[c][m]可用于确定文件时间(节点更改、 文件修改或两者都用)在比较中使用哪个。 如果两者都没有指定, 默认使用文件修改时间。 m指定文件修改时间的比较(文件最后写入的时间)。 c指定inode更改时间的比较(文件inode最后更改的时间; 例如,所有者、组、模式的更改等)。当c和m都指定时, 将同时比较修改和inode更改时间。 使用两个文件时间进行比较在pax用于创建基于时间的增量存档时 很有用(只有在指定时间范围内更改的文件才会被存档)。 时间范围由六个不同的字段组成, 每个字段必须包含两位数字。格式为: [[[[[cc]yy]mm]dd]HH]MM[.SS] 。其中cc是年份的前两位数字(世纪), yy是年份的后两位数字,第一个mm是月份(从01到12), dd是月份的天数(从01到31),HH是一天中的小时(从00到23), MM是分钟(从00到59),SS是秒(从00到59)。 分钟字段MM是必需的,而其他字段是可选的, 并且必须按以下顺序添加:HH、dd、mm、yy、cc。S S字段可以独立于其他字段添加。 时间范围是相对于当前时间的,所以 -T 1234/cm 将选择所有修改或inode更改时间为今天下午12:34或更晚的文件。 可以提供多个-T时间范围,并在第一个匹配时停止检查。 |
-U user | 根据其用户名或以#开头的数字UID选择文件。 可以使用‘\’来转义#。可以提供多个-U选项, 检查在第一个匹配时停止。 |
-X | 当遍历由路径名指定的文件层次结构时, 不要进入具有不同设备ID的目录。有关设备ID的更多信息, 请参见stat(2)中描述的st_dev字段。 |
-Y | 该选项与-D选项相同, 只是使用在完成所有文件名修改后创建的路径名检查节点更改时间。 |
-Z | 该选项与-u选项相同, 只是使用在完成所有文件名修改后创建的路径名检查修改时间。 |
操作文件或归档成员名称的选项(-c、-i、-n、-s、-u、-v、-D、-G、-T、-U、-Y 和 -Z)之间的交互如下。
在读取操作期间提取文件时,归档成员仅基于用户指定的模式操作数而进行'选择',并根据 -c、-n、-u、-D、-G、-T、-U 选项进行修改。然后,任何 -s 和 -i 选项将按照这些选定文件的顺序进行修改。然后,将基于最终路径名应用 -Y 和 -Z 选项。最后,-v 选项将写入这些修改后的名称。
在写操作期间归档文件或在复制操作期间复制文件时,归档成员仅基于用户指定的路径名进行'选择',并根据 -n、-u、-D、-G、-T 和 -U 选项进行修改(-D 选项仅在复制操作期间应用)。然后,任何 -s 和 -i 选项将按照这些选定文件的顺序进行修改。然后,在复制操作期间,将基于最终路径名应用 -Y 和 -Z 选项。最后,-v 选项将写入这些修改后的名称。
当指定 -u 或 -D 中的一个或两个选项以及 -n 选项时,只有文件比与其进行比较的文件更新才会被视为选定。
5、使用示例
1)将当前目录的内容复制到设备/dev/rst0
$ pax -w -f /dev/rst0
2)显示存储在文件filename中的归档的详细目录
$ pax -v -f filename
3)将复制整个olddir目录层次结构到newdir
$ mkdir newdir; cd olddir; pax -rw . newdir
4)读取归档a.pax,其中所有文件都以/usr为根,并将提取的归档相对于当前目录
$ pax -r -s ’,^//usr//,,’ -f a.pax
5)可用于交互式选择要从当前目录复制到dest_dir的文件
$ pax -rw -i . dest_dir
6)从归档a.pax中提取所有由root所有且属于bin组的文件,并保留所有文件权限
$ pax -r -pe -U root -G bin -f a.pax
7)仅更新(并列出)目标目录/backup中比源文件树home中的同名文件更旧(inode更改时间或文件修改时间较早)的文件
$ pax -r -w -v -Y -Z home /backup