cpio - 将文件复制进/复制出归档
cpio -i [-bBcdfkmPrsStuvV6@/] [-C bufsize] [-E file] [-H header] [-I [-M message]] [-R id] [pattern]...
cpio -o [-aABcLPvV@/] [-C bufsize] [-H header] [-O file [-M message]]
cpio -p [-adlLmPuvV@/] [-R id] directory
cpio 命令将文件复制进/复制出 cpio 归档。cpio 归档可以跨多个卷。通过 –i、–o 和 –p 选项选择要执行的操作。下面的列表描述了每个操作。这些操作是互斥的。
cpio –i (copy in) 从标准输入提取文件,标准输入采用的是前面某个 cpio –o 命令的产物。只会选择其名称与 pattern 之一匹配的文件。有关 pattern 的更多信息,请参见 sh(1) 和 OPERANDS。提取的文件将根据下述选项有条件地复制到当前目录树中。文件的权限是前面的 cpio -o 命令的权限。The owner and group are the same as the current user, unless the current user has the {PRIV_FILE_CHOWN_SELF} privilege.See chown(2).如果确实具有该特权,则所有者和用户与从前面的 cpio -o 命令获得的结果相同。请注意,如果 cpio –i 尝试创建的文件已存在并且该现有文件同龄或者更年轻(更新),则 cpio 会输出一条警告消息并且不会替换该文件。–u 选项可用来无条件地覆盖现有文件。
cpio –o (copy out) 从标准输入读取文件路径名列表并将这些文件连同路径名和状态信息以 cpio 归档的形式复制到标准输出。输出将被缺省填充到一个 8192 字节边界中或者填充到用户指定的块大小(采用 –B 或 –C 选项)或者在必要时填充到依赖于设备的某个块大小(例如使用 CTC 磁带时)。
cpio –p (pass) 从标准输入读取文件路径名列表并根据下述选项有条件地将这些文件复制到目标目录树中。
如果源文件的底层文件系统支持检测由 pathconf(2) 报告的孔,该文件是一个稀疏文件,并且目标文件是可检索的,则稀疏文件中的孔将保留为传递模式,否则将以零来填充孔。
cpio 接受四字节的字。
如果向字符设备进行写入时 (–o) 或者从字符设备进行读取时 (–i),cpio 到达了介质的末尾,并且没有使用 –O 和 –I 选项,则 cpio 将输出以下消息:
To continue, type device/file name when ready.
要继续,您必须更换介质并键入字符特殊设备名,然后按 RETURN。
支持以下选项:
(copy in) 从标准输入读取归档并有条件地提取其中包含的文件,然后将这些文件放置到当前目录树中。
(copy out) 从标准输入中读取文件路径名列表并将这些文件以 cpio 归档的形式复制到标准输出中。
(pass) 从标准输入中读取文件路径名列表并有条件地将这些文件复制到目标目录树中。
以下选项可以按任何顺序附加到 –i、–o 或 –p 选项之后。
读取由一个空字符(而非换行)终止的文件名列表,以便可以归档其名称包含 NEWLINES 的文件。将 find 与 –print0 选项一起使用是生成这样的文件名列表的一种方法。
此选项可以在 copy-out 和 copy-pass 模式中使用。
在复制输入文件后重置输入文件的访问时间,使 cpio 的访问不可见。当指定了 cpio –pla 时不会重置链接的文件的访问时间。
将文件附加到归档。–A 选项需要 –O 选项。仅对是文件的归档或者位于硬盘分区上的归档有效。对在归档的现有部分中链接的文件的影响不可预测。
反转每个字内字节的顺序。只能与 –i 选项一起使用。
阻止向/从记录输入/输出 5120 字节。当未使用此选项和 –C 选项时,缺省的缓冲区大小为 8192 字节。–B 不适用于 –p (pass) 选项。
以 ASCII 字符形式读取或写入标头信息以实现可移植性。没有与此标头格式相关的 UID 或 GID 限制。在基于 SVR4 的计算机之间使用此选项,或者在未知计算机之间使用 –H odc 选项。–c 选项表示使用扩展的设备编号,这只在基于 SVR4 的系统上受支持。在 SunOS 4 或 Interactive UNIX 和 Oracle Solaris 11.4 之间传输文件时,使用 –H odc。
阻止向/从记录输入/输出 bufsize 字节,bufsize 将由一个正整数替换。当未使用此选项和 –B 选项时,缺省的缓冲区大小为 8192 字节。–C 不适用于 –p (pass) 选项。
根据需要创建目录。
指定包含要从归档中提取的文件名列表(一行一个文件名)的一个输入文件 (file)。
复制进所有文件,但 pattern 中的文件除外。有关 pattern 的说明,请参见“操作数”部分。
读取或写入 header 格式的标头信息。当原始和目标计算机属于不同的类型时,请始终使用此选项或 –c 选项。此选项与 –c 和 –6 选项互斥。
适用于 header 的有效值为:
bar 标头和格式。Used only with the –i option (read only).
具有扩展设备编号和一个附加的每文件校验和的 ASCII 标头。没有与此标头格式相关的 UID 或 GID 限制。
具有小设备编号的 ASCII 标头。这是 IEEE/P1003 数据交换标准 cpio 标头和格式。它具有任何标头格式的最大范围的可移植性。它是用于在遵守 POSIX 的系统之间传输文件的正式格式(请参见 standards(7))。请使用此格式与 SunOS 4 和 Interactive UNIX 进行通信。此标头格式允许将最大为 262143 的 UID 和 GID 存储在标头中。
tar 标头和格式。这是旧式的 tar 标头格式,允许将最大为 2097151 的 UID 和 GID 存储在标头中。提供它只是为了读取传统归档文件,即与选项 –i 一起使用。
同时指定此归档格式和选项 –o 等效于指定 “ustar” 格式:输出归档为 ustar 格式,并且必须使用 –H ustar 进行读取。
IEEE/P1003 数据交换标准 tar 标头和格式。此标头格式允许将最大为 2097151 的 UID 和 GID 存储在标头中。
其 UID 和 GID 大于上述限制的文件将以 UID 和 GID 60001 进行归档。To transfer a large file (8 Gb - 1 byte), the header format can be tar|TAR, ustar|USTAR, or odc only.
将 file 的内容读取为输入归档,而不是标准输入。如果 file 是一个字符特殊设备,并且已完全读取了当前介质,请更换介质并按 RETURN 以继续读取下一介质。此选项仅可与 –i 选项一起使用。
尝试跳过可能会遇到的已损坏文件和 I/O 错误。如果您要从已损坏的或乱序的介质复制文件,则此选项允许您仅读取标头良好的那些文件。For cpio archives that contain other cpio archives, if an error is encountered, cpio can terminate prematurely. cpio finds the next good header, which can be one for a smaller archive, and terminate when the smaller archive's trailer is encountered.只能与 –i 选项一起使用。
在 pass 模式中,请尽可能在源和目标之间创建硬链接。如果还指定了 –L 选项,则硬链接指向由符号链接引用的文件。否则,硬链接指向符号链接本身。只能与 –p 选项一起使用。
跟随符号链接。如果遇到了指向目录的符号链接,则会使用链接的名称归档链接引用的目录。否则,将使用链接的名称归档链接引用的文件。
保留以前的文件修改时间。此选项对正在复制的目录不起作用。
定义当切换介质时要使用的 message。当使用 –O 或 –I 选项并指定了一个字符特殊设备时,您可以使用此选项来定义当到达了介质的末尾时要输出的消息。可以在 message 中放置一个 %d 以输出需要继续使用的下一个介质的序号。
将 cpio 的输出定向到 file 而不是标准输出。如果 file 是一个字符特殊设备并且当前介质已满,请更换介质并键入一个回车符以继续使用下一个介质。只能与 –o 选项一起使用。
Preserves ACLs.如果为输出使用了此选项,则会将现有的 ACL 连同其他属性(扩展属性除外)一起写入到标准输出。ACL 将被创建为具有特殊文件类型的特殊文件。如果为输入使用了此选项,则会从标准输入中提取现有的 ACL 连同其他属性。此选项可以识别特殊文件类型。请注意,如果以前版本的 cpio 提取具有 ACL 的 cpio 归档,则会发生错误。此选项不应当与 –c 选项一起使用,因为可能不是所有系统都提供了 ACL 支持,因此不可移植。可使用 ASCII 标头实现可移植性。
Interactively renames files.如果用户单独键入了一个回车符,则会跳过文件。If the user types a “.”, the original pathname is retained.不可与 cpio –p 一起使用。
重新向用户 ID 分配每个文件的所有权和组信息。(ID 必须是 passwd 数据库中的一个有效的登录 ID。)This option is valid only when id is the invoking user or when the command is run with all the privileges available in the current zone.请参见“附注”部分。
交换每半个字内的字节。
交换每个字内的半个字。
列显包含输入内容的表。如果内容表中的任何文件具有扩展属性,则还会列出这些扩展属性。不会创建文件。–t 和 –V 是互斥的。
无条件地进行复制。通常,较旧的文件不会被同名的较新文件替换,但是较旧的目录会更新为较新的目录。
详细模式。列显文件和扩展属性名的列表。当与 –t 选项一起使用时,内容表看起来像 ls –l 命令的输出(请参见 ls(1))。
特别详细。为读取或写入的每个文件列显一个点。非常适用于在不输出所有文件名的情况下让用户确信 cpio 正在工作。
处理 UNIX 系统第六版归档格式的文件。只能与 –i 选项一起使用。此选项与 –c 和 –H 选项互斥。
在归档中包括扩展属性。缺省情况下,cpio 不会将扩展属性放置在归档中。使用此标志时,cpio 会在文件上查找要放置在归档中的扩展属性并且像常规文件一样将其添加到归档中。扩展属性文件将作为具有特殊文件类型的特殊文件添加到归档中。当 –@ 标志与 –i 或 –p 一起使用时,它指示 cpio 将扩展属性数据与常规文件数据一起恢复。只能作为常规文件提取操作的一部分从归档中提取扩展属性文件。显式提取属性记录的尝试将被忽略。
在归档中包括系统属性。缺省情况下,cpio 不会将系统属性放置在归档中。使用此标志时,cpio 会在文件上查找要放置在归档中的系统属性并且像常规文件一样将其添加到归档中。扩展属性文件将作为具有特殊文件类型的特殊文件添加到归档中。当 –/ 标志与 –i 或 –p 一起使用时,它指示 cpio 将扩展系统属性数据与常规文件数据一起恢复。只能作为常规文件提取操作的一部分从归档中提取扩展系统属性文件。显式提取属性记录的尝试将被忽略。
支持下列操作数:
要用作 cpio –p 的目标的现有目录的路径名。
一些表达式,其使用的模式匹配表示法与 shell 用于文件名模式匹配的表示法(请参见 sh(1))类似(类似于正则表达式)。系统定义了以下元字符:
匹配任何字符串,包括空字符串。
匹配任何单个字符。
匹配其中包围的任意一个字符。A pair of characters separated by ‘-’ matches any symbol between the pair (inclusive), as defined by the system default collating sequence.If the first character following the opening ‘[’ is a ‘!’, the results are unspecified.
!(叹号)的意思为不是。例如,!abc* 模式将排除以 abc 开头的所有文件。
在 pattern 中,元字符 ?、* 和 [ . . .] 匹配斜杠 (/) 字符,反斜杠 (\) 是一个转义字符。可以指定 pattern 的多个实例,并且如果未指定 pattern,则 pattern 的缺省值为 *(即选择所有文件)。
每个模式都必须括在双引号中。否则,可能会使用当前目录中某个文件的名称。
以下示例显示了 cpio 的三种用法。
示例 1 Using standard inputexample% ls | cpio -oc > ../newfile
When standard input is directed through a pipe to cpio –o, as in the example above, it groups the files so they can be directed (>) to a single file (../newfile).The –c option ensures that the file is portable to other machines (as would the –H option).您可以使用 find(1), echo(1), cat(1) 等等(而非 ls(1))来将名称列表定向到 cpio。您可以将输出定向到设备而非文件。
示例 2 将文件提取到目录中example% cat newfile | cpio -icd "memo/a1" "memo/b*"
在此示例中,cpio –i 使用 cpio –o 的输出文件(用 cat 命令通过管道定向的),提取与模式(memo/a1、memo/b*)匹配的那些文件,根据需要在当前目录下创建目录(–d 选项),并将文件放置到合适的目录中。如果输入文件创建有可移植的标头,请使用 –c 选项。如果没有指定模式,则会将 newfile 中的所有文件放置到目录中。
示例 3 将文件复制或链接到另一目录example% find . -depth -print | cpio -pdlmv newdir
在此示例中,cpio –p 接受通过管道定向到它的文件名并将这些文件复制或链接到(–l 选项)另一目录(newdir)。–d 选项指示根据需要创建目录。–m 选项指示保留修改时间。(使用 find(1) 的 –depth 选项为 cpio 生成路径名非常重要。这将消除 cpio 试图在只读目录下创建文件时可能会出现的问题。)目标目录 newdir 必须存在。
请注意,当您将 cpio 与 find 一起使用时,如果将 –L 选项与 cpio 一起使用,则必须将 –follow 选项与 find 一起使用,反之亦然。否则,将会出现非预期的结果。
对于多卷盘归档,请卸载旧卷,挂载新卷,然后通过键入下一个设备的名称(可能与第一个卷盘相同)继续使用下一个磁带。要停止,请键入一个 RETURN,cpio 将终止。
See environ(7) for descriptions of the following environment variables that affect the execution of cpio: LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_TIME, TZ, and NLSPATH.
缺省情况下,cpio 在 /var/tmp 中创建其临时文件。否则,它将使用 TMPDIR 指定的目录。
将返回以下退出值:
成功完成。
出现错误。
有关下列属性的说明,请参见 attributes(7):
|
sh(1), ar(1), cat(1), echo(1), find(1), ls(1), pax(1), tar(1), chown(2), archives.h(3HEAD), attributes(7), environ(7), fsattr(7), privileges(7), standards(7)
cpio 归档中允许的最大路径名长度是由所涉及的标头类型确定的。下表显示了每个受支持归档标头类型的正确值。
|
当指定了命令行选项 “–o –H tar” 时,所创建的归档是 USTAR 类型的。这意味着使用命令行选项 “–i –H tar” 读取此同一归档是错误的。应当使用命令行选项 “–i –H ustar” 读取归档。选项 “–i –H tar” 引用较旧的 tar 归档格式。
如果文件的 UID 或 GID 太大,选定的标头格式无法将其容纳,则会输出一条错误消息。可使用 –H crc 或 –c 创建允许所有 UID 或 GID 值的归档。
The {PRIV_SYS_DEVICES} privilege is required to copy special files.
块是以 512 字节为单位报告的。
如果文件具有 000 权限,包含 0 个字符以上的数据,并且用户不是 root,则不会保存或恢复该文件。
When cpio is invoked in Copy In or Pass Mode by a user with {PRIV_FILE_CHOWN_SELF} privilege, or is writing to a filesystem where {_POSIX_CHOWN_RESTRICTED} is not in effect (effectively granting this privilege to all users where not overridden), extracted or copied files can end up with owners and groups determined by those of the original archived files, which can differ from the invoking user's.这可能不是用户想要的结果。如果您指定了用户的 id,如果需要,可以使用 –R 选项来保留文件所有权。
存储在标头 (/usr/include/archives.h) 中的 inode 编号是一个无符号短整数(2 个字节)。这将 inode 编号的范围限制为从 0 到 65535。硬链接的文件必须位于此 inode 范围内。在来自不同供应商的计算机之间移动 cpio 归档时,这可能是个问题。
当将文件从磁带检索或复制到硬盘时,必须使用与之前将文件从硬盘复制到磁带时使用的分块因子相同的分块因子。因此,必须指定 –B 或 –C 选项。
在 –p 和 –o 处理期间,cpio 会将 stdin 上提供的文件列表缓存到一个临时文件中。
对于大文件,应当使用新的 pax(1) 格式以及支持该格式的某个命令(例如 tar)。cpio 命令不再是当前 POSIX 标准的一部分并且已过时,建议使用 pax。