手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

cpio(1)

名称

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 选项选择要执行的操作。下面的列表描述了每个操作。这些操作是互斥的。

Copy In 模式

cpio –i (copy in) 从标准输入提取文件,标准输入采用的是前面某个 cpio –o 命令的产物。只会选择其名称与 pattern 之一匹配的文件。有关 pattern 的更多信息,请参见 sh(1) 和 OPERANDS。提取的文件将根据下述选项有条件地复制到当前目录树中。文件的权限是前面的 cpio -o 命令的权限。所有者和组与当前用户相同,除非当前用户具有 {PRIV_FILE_CHOWN_SELF} 特权。请参见 chown(2)。如果确实具有该特权,则所有者和用户与从前面的 cpio -o 命令获得的结果相同。请注意,如果 cpio –i 尝试创建的文件已存在并且该现有文件同龄或者更年轻(更新),则 cpio 会输出一条警告消息并且不会替换该文件。–u 选项可用来无条件地覆盖现有文件。

Copy Out 模式

cpio –o (copy out) 从标准输入读取文件路径名列表并将这些文件连同路径名和状态信息以 cpio 归档的形式复制到标准输出。输出将被缺省填充到一个 8192 字节边界中或者填充到用户指定的块大小(采用 –B–C 选项)或者在必要时填充到依赖于设备的某个块大小(例如使用 CTC 磁带时)。

Pass 模式

cpio –p (pass) 从标准输入读取文件路径名列表并根据下述选项有条件地将这些文件复制到目标目录树中。

如果源文件的底层文件系统支持检测由 pathconf(2) 报告的孔,该文件是一个稀疏文件,并且目标文件是可检索的,则稀疏文件中的孔将保留为传递模式,否则将以零来填充孔。

cpio 接受四字节的字。

如果向字符设备进行写入时 (–o) 或者从字符设备进行读取时 (–i),cpio 到达了介质的末尾,并且没有使用 –O–I 选项,则 cpio 将输出以下消息:

To continue, type device/file name when ready.

要继续,您必须更换介质并键入字符特殊设备名,然后按 RETURN。

选项

支持以下选项:

–i

(copy in) 从标准输入读取归档并有条件地提取其中包含的文件,然后将这些文件放置到当前目录树中。

–o

(copy out) 从标准输入中读取文件路径名列表并将这些文件以 cpio 归档的形式复制到标准输出中。

–p

(pass) 从标准输入中读取文件路径名列表并有条件地将这些文件复制到目标目录树中。

以下选项可以按任何顺序附加到 –i–o–p 选项之后。

–0

读取由一个空字符(而非 NEWLINE)终止的文件名列表,以便可以归档其名称包含 NEWLINES 的文件。将 find–print0 选项一起使用是生成这样的文件名列表的一种方法。

此选项可以在 copy-out 和 copy-pass 模式中使用。

–a

在复制输入文件后重置输入文件的访问时间,使 cpio 的访问不可见。当指定了 cpio –pla 时不会重置链接的文件的访问时间。

–A

将文件附加到归档。–A 选项需要 –O 选项。仅对是文件的归档或者位于硬盘分区上的归档有效。对在归档的现有部分中链接的文件的影响不可预测。

–b

反转每个字内字节的顺序。只能与 –i 选项一起使用。

–B

阻止向/从记录输入/输出 5120 字节。当未使用此选项和 –C 选项时,缺省的缓冲区大小为 8192 字节。–B 不适用于 –p (pass) 选项。

–c

以 ASCII 字符形式读取或写入标头信息以实现可移植性。没有与此标头格式相关的 UID 或 GID 限制。在基于 SVR4 的计算机之间使用此选项,或者在未知计算机之间使用 –H odc 选项。–c 选项表示使用扩展的设备编号,这只在基于 SVR4 的系统上受支持。当在 SunOS 4 或 Interactive UNIX 与 Solaris 2.6 操作环境或兼容版本之间传输文件时,请使用 –H odc

–C bufsize

阻止向/从记录输入/输出 bufsize 字节,bufsize 将由一个正整数替换。当未使用此选项和 –B 选项时,缺省的缓冲区大小为 8192 字节。–C 不适用于 –p (pass) 选项。

–d

根据需要创建目录。

–E file

指定包含要从归档中提取的文件名列表(一行一个文件名)的一个输入文件 (file)。

–f

复制进所有文件,但 pattern 中的文件除外。有关 pattern 的说明,请参见“操作数”部分。

–H header

读取或写入 header 格式的标头信息。当原始和目标计算机属于不同的类型时,请始终使用此选项或 –c 选项。此选项与 –c–6 选项互斥。

适用于 header 的有效值为:

bar

bar 标头和格式。只能与 –i 选项一起使用(只读)。

crc | CRC

具有扩展设备编号和一个附加的每文件校验和的 ASCII 标头。没有与此标头格式相关的 UID 或 GID 限制。

odc

具有小设备编号的 ASCII 标头。这是 IEEE/P1003 数据交换标准 cpio 标头和格式。它具有任何标头格式的最大范围的可移植性。它是用于在遵守 POSIX 的系统之间传输文件的正式格式(请参见 standards(5))。请使用此格式与 SunOS 4 和 Interactive UNIX 进行通信。此标头格式允许将最大为 262143 的 UID 和 GID 存储在标头中。

tar | TAR

tar 标头和格式。这是旧式的 tar 标头格式,允许将最大为 2097151 的 UID 和 GID 存储在标头中。提供它只是为了读取传统归档文件,即与选项 –i 一起使用。

同时指定此归档格式和选项 –o 等效于指定 “ustar” 格式:输出归档为 ustar 格式,并且必须使用 –H ustar 进行读取。

ustar | USTAR

IEEE/P1003 数据交换标准 tar 标头和格式。此标头格式允许将最大为 2097151 的 UID 和 GID 存储在标头中。

其 UID 和 GID 大于上述限制的文件将以 UID 和 GID 60001 进行归档。要传输大文件(8 Gb — 1 字节),则标头格式只能为 tar|TARustar|USTARodc

–I file

file 的内容读取为输入归档,而不是标准输入。如果 file 是一个字符特殊设备,并且已完全读取了当前介质,请更换介质并按 RETURN 以继续读取下一介质。此选项仅可与 –i 选项一起使用。

–k

尝试跳过可能会遇到的已损坏文件和 I/O 错误。如果您要从已损坏的或乱序的介质复制文件,则此选项允许您仅读取标头良好的那些文件。对于包含其他 cpio 归档的 cpio 归档,如果遇到了错误,cpio 可以提前终止。cpio 将查找下一个良好的标头(这可能是一个较小归档的标头)并且在到达较小归档的尾部时终止。只能与 –i 选项一起使用。

–l

在 pass 模式中,请尽可能在源和目标之间创建硬链接。如果还指定了 –L 选项,则硬链接指向由符号链接引用的文件。否则,硬链接指向符号链接本身。只能与 –p 选项一起使用。

–L

跟随符号链接。如果遇到了指向目录的符号链接,则会使用链接的名称归档链接引用的目录。否则,将使用链接的名称归档链接引用的文件。

–m

保留以前的文件修改时间。此选项对正在复制的目录不起作用。

–M message

定义当切换介质时要使用的 message。当使用 –O–I 选项并指定了一个字符特殊设备时,您可以使用此选项来定义当到达了介质的末尾时要输出的消息。可以在 message 中放置一个 %d 以输出需要继续使用的下一个介质的序号。

–O file

cpio 的输出定向到 file 而不是标准输出。如果 file 是一个字符特殊设备并且当前介质已满,请更换介质并键入一个回车符以继续使用下一个介质。只能与 –o 选项一起使用。

–P

保留 ACL。如果为输出使用了此选项,则会将现有的 ACL 连同其他属性(扩展属性除外)一起写入到标准输出。ACL 将被创建为具有特殊文件类型的特殊文件。如果为输入使用了此选项,则会从标准输入中提取现有的 ACL 连同其他属性。此选项可以识别特殊文件类型。请注意,如果以前版本的 cpio 提取具有 ACL 的 cpio 归档,则会发生错误。此选项不应当与 –c 选项一起使用,因为可能不是所有系统都提供了 ACL 支持,因此不可移植。可使用 ASCII 标头实现可移植性。

–r

以交互方式重命名文件。如果用户单独键入了一个回车符,则会跳过文件。如果用户键入了一个 ``.'',则会保留原始路径名。不可与 cpio –p 一起使用。

–R id

重新向用户 ID 分配每个文件的所有权和组信息。(ID 必须是 passwd 数据库中的一个有效的登录 ID。)只有当该 id 是调用用户或超级用户时,此选项才有效。请参见“附注”部分。

–s

交换每半个字内的字节。

–S

交换每个字内的半个字。

–t

输出包含输入内容的表。如果内容表中的任何文件具有扩展属性,则还会列出这些扩展属性。不会创建文件。–t–V 是互斥的。

–u

无条件地进行复制。通常,较旧的文件不会被同名的较新文件替换,但是较旧的目录会更新为较新的目录。

–v

详细模式。输出文件和扩展属性名的列表。当与 –t 选项一起使用时,内容表看起来像 ls –l 命令的输出(请参见 ls(1))。

–V

特别详细。为读取或写入的每个文件输出一个点。非常适用于在不输出所有文件名的情况下让用户确信 cpio 正在工作。

–6

处理 UNIX 系统第六版归档格式的文件。只能与 –i 选项一起使用。此选项与 –c–H 选项互斥。

–@

在归档中包括扩展属性。缺省情况下,cpio 不会将扩展属性放置在归档中。使用此标志时,cpio 会在文件上查找要放置在归档中的扩展属性并且像常规文件一样将其添加到归档中。扩展属性文件将作为具有特殊文件类型的特殊文件添加到归档中。当 –@ 标志与 –i–p 一起使用时,它指示 cpio 将扩展属性数据与常规文件数据一起恢复。只能作为常规文件提取操作的一部分从归档中提取扩展属性文件。显式提取属性记录的尝试将被忽略。

–/

在归档中包括系统属性。缺省情况下,cpio 不会将系统属性放置在归档中。使用此标志时,cpio 会在文件上查找要放置在归档中的系统属性并且像常规文件一样将其添加到归档中。扩展属性文件将作为具有特殊文件类型的特殊文件添加到归档中。当 –/ 标志与 –i–p 一起使用时,它指示 cpio 将扩展系统属性数据与常规文件数据一起恢复。只能作为常规文件提取操作的一部分从归档中提取扩展系统属性文件。显式提取属性记录的尝试将被忽略。

操作数

支持下列操作数:

directory

要用作 cpio –p 的目标的现有目录的路径名。

pattern

一些表达式,其使用的模式匹配表示法与 shell 用于文件名模式匹配的表示法(请参见 sh(1))类似(类似于正则表达式)。系统定义了以下元字符:

*

匹配任何字符串,包括空字符串。

?

匹配任何单个字符。

[...]

匹配其中包围的任意一个字符。由 `−' 分隔的字符对将匹配该对之间的任何符号(内含),如系统缺省整理序列所定义。如果左 `[' 后的第一个字符是 `!',则结果不确定。

!

!(叹号)的意思为不是。例如,!abc* 模式将排除以 abc 开头的所有文件。

pattern 中,元字符 ?*[ . . .] 匹配斜杠 (/) 字符,反斜杠 (\) 是一个转义字符。可以指定 pattern 的多个实例,并且如果未指定 pattern,则 pattern 的缺省值为 *(即选择所有文件)。

每个模式都必须括在双引号中。否则,可能会使用当前目录中某个文件的名称。

用法

有关 cpio 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)

示例

以下示例显示了 cpio 的三种用法。

示例 1 使用标准输入
example% ls | cpio -oc > ../newfile

如以上示例所示,当通过管道将标准输入定向到 cpio –o 时,它将文件组合到一起,以便它们可以被定向 (>) 到单个文件 (../newfile)。–c 选项确保文件可以移植到其他计算机(与 –H 选项一样)。您可以使用 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/a1memo/b*)匹配的那些文件,根据需要在当前目录下创建目录(–d 选项),并将文件放置到合适的目录中。如果输入文件创建有可移植的标头,请使用 –c 选项。如果没有指定模式,则会将 newfile 中的所有文件放置到目录中。

示例 3 将文件复制或链接到另一目录
example% find . -depth -print | cpio -pdlmv newdir

在此示例中,cpio –p 接受通过管道定向到它的文件名并将这些文件复制或链接到(–l 选项)另一目录(newdir)。–d 选项指示根据需要创建目录。–m 选项指示保留修改时间。(使用 find(1)–depth 选项为 cpio 生成路径名非常重要。这将消除 cpio 试图在只读目录下创建文件时可能会出现的问题。)目标目录 newdir 必须存在。

请注意,当您将 cpiofind 一起使用时,如果将 –L 选项与 cpio 一起使用,则必须将 –follow 选项与 find 一起使用,反之亦然。否则,将会出现非预期的结果。

对于多卷盘归档,请卸载旧卷,挂载新卷,然后通过键入下一个设备的名称(可能与第一个卷盘相同)继续使用下一个磁带。要停止,请键入一个 RETURN,cpio 将终止。

环境变量

有关影响 cpio 执行的以下环境变量的说明,请参见 environ(5):LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_TIME、TZ 和 NLSPATH。

TMPDIR

缺省情况下,cpio/var/tmp 中创建其临时文件。否则,它将使用 TMPDIR 指定的目录。

退出状态

将返回以下退出值:

0

成功完成。

>0

出现错误。

属性

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

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)
接口稳定性
Committed(已确定)

另请参见

ar(1)cat(1)echo(1)find(1)ls(1)pax(1)setfacl(1)sh(1)tar(1)chown(2)archives.h(3HEAD)attributes(5)environ(5)fsattr(5)largefile(5)standards(5)

附注

cpio 归档中允许的最大路径名长度是由所涉及的标头类型确定的。下表显示了每个受支持归档标头类型的正确值。

标头类型
命令行选项
最大路径名长度
BINARY
–o
256
POSIX
–oH odc”
256
ASCII
–oc
1023
CRC
–oH crc”
1023
USTAR
–oH ustar”
255

当指定了命令行选项 “–o –H tar” 时,所创建的归档是 USTAR 类型的。这意味着使用命令行选项 “–i – H tar” 读取此同一归档是错误的。应当使用命令行选项 “–i –H ustar” 读取归档。选项 “–i –H tar” 引用较旧的 tar 归档格式。

如果文件的 UID 或 GID 太大,选定的标头格式无法将其容纳,则会输出一条错误消息。可使用 –H crc–c 创建允许所有 UID 或 GID 值的归档。

只有超级用户可以复制特殊文件。

块是以 512 字节为单位报告的。

如果文件具有 000 权限,包含 0 个字符以上的数据,并且用户不是 root,则不会保存或恢复该文件。

如果 cpio 是具有 {PRIV_FILE_CHOWN_SELF} 特权的用户在 Copy InPass 模式下调用的,特别是在 {_POSIX_CHOWN_RESTRICTED} 没有生效的系统上(有效地向所有用户授予了此特权而未被覆盖时),提取的或复制的文件会具有由原始归档文件的权限确定的所有者和组,而这可能不同于调用用户确定的所有者和组。这可能不是用户想要的结果。如果您指定了用户的 id,如果需要,可以使用 –R 选项来保留文件所有权。

存储在标头 (/usr/include/archives.h) 中的 inode 编号是一个无符号短整数(2 个字节)。这将 inode 编号的范围限制为从 065535。硬链接的文件必须位于此 inode 范围内。在来自不同供应商的计算机之间移动 cpio 归档时,这可能是个问题。

当将文件从磁带检索或复制到硬盘时,必须使用与之前将文件从硬盘复制到磁带时使用的分块因子相同的分块因子。因此,必须指定 –B–C 选项。

–p–o 处理期间,cpio 会将 stdin 上提供的文件列表缓存到一个临时文件中。

对于大文件,应当使用新的 pax(1) 格式以及支持该格式的某个命令(例如 tar)。cpio 命令不再是当前 POSIX 标准的一部分并且已过时,建议使用 pax