cpio 命令
用途
把文件复制进出归档存储器及目录。 本文档介绍AIX cpio命令和System Vcpio命令。
语法
cpio '-o [ a ] [ c ] [ -E{强逼|忽略|警示} ] [-g] [ -H hdr][ -U ] [ v ] [ B | C 价值 ] [ -Z ] <文件名 >输出
cpio '-i [ b ] [ c ] [ d ] [ -E{强逼|忽略|警示} ] [ f ] [ -H hdr] [ m ] [ M ] [ r ] [ s ] [ t ] [ -U ] [ u ] [ v ] [ S ] [ 6 ] [ B | C 价值 ] [ -Z ] [ 图案... ] <输入
cpio '-p [ a ] [ d ] [ -E{强逼|忽略|警示} ] [ l ] [ m ] [ M ] [ -U ] [ u ] [ v ] [ -Z ] 目录 <文件名
描述
- 由于 XPG/4 和 POSIX.2 标准的限制,当文件的大小超过 2GB 时 cpio 命令不启用。
- cpio 命令不会保留任何稀疏分配的文件的稀疏性质。 任何在恢复前原本稀疏的文件将在文件系统中根据其大小分配所有空间。
- 您不能对加密文件系统使用 System V cpio 命令。
- 可以通过使用 AIX_STDBUFSZ 环境变量来配置此命令所生成的读写系统调用的 I/O 缓冲区大小。
cpio -o 命令
cpio-o命令从标准输入端读取文件路径名,并将这些文件连同路径名和状态信息一起复制到标准输出端。 避免提供由许多唯一链接的文件组成的 cpio 命令路径名,因为它可能没有足够的内存来跟踪这些文件,并且会丢失链接信息。
cpio -i 命令
cpio-i命令从标准输入端读取由cpio-o命令创建的归档文件,并从中复制名称与Pattern参数匹配的文件。 这些文件被复制进当前目录树中。 您可以列出多个的 Pattern 参数,通过使用 ksh 命令中描述的文件名符号表示法。 注意在这个应用程序中,特殊字符 *(星号),? (问号),和 [...](方括号和省略号)除了在 ksh 命令中描述的使用,还匹配路径名中的 /(斜杠) 。 Pattern 参数的缺省值是 *(星号),即选择输入中所有文件。 在表达式例如 [a-z] 中, 减号意味着根据当前的整理顺序贯穿。
整理顺序可以定义在字符范围内使用的等价类。
cpio -p 命令
cpio -U 命令
对于 AIX 5.3,缺省情况下, cpio 命令将忽略扩展属性。 -U 选项通知 cpio 归档或复原属性 (包括 ACL)。
cpio 归档文件中的扩展属性条目需要新的记录类型。 对于 cpio 归档文件中的 ACL 条目,还需要新的记录类型。
cpio 归档中的每个对象都包含一个 cpio 头,后跟指定对象的数据。
| 字段名称 | 大小(字节数量) | 使用 |
|---|---|---|
| h_magic | 2 | 用于识别报头的幻数。 |
| h_dev | 2 | 包含该文件的目录条目的设备。 |
| h_ino | 2 | 将输入文件识别为文件系统的索引节点号。 |
| h_mode | 2 | 输入文件的方式(如在 mode.h 文件中定义)。 POSIX 标准具有 0130000、0150000 - 0170000 可用于不会传送到其他系统的文件类型。 |
| h_uid | 2 | 输入文件所有者的用户标识。 |
| h_gid | 2 | 输入文件所有者的组标识。 |
| h_nlink | 2 | 连接到输入文件的链接数量。 |
| h_rdev | 2 | 从中取出输入文件的远程设备的标识。 |
| h_mtime | 4 | 数据最后修改的时间。 |
| h_namesize | 2 | 包含 NULL 的路径名的长度。 |
| h_filesize | 4 | 文件长度(以字节计)。 |
| h_name | PATH_MAX | 以 Null 结束的路径名。 |
- ACL 报头
- h_mode 字段设置为 0130000 显示报头描述 ACL。 另外,h_mode 位设置为显示谁可以对 ACL 进行写操作。 cpio 报头中的所有其他字段都设置为用于拥有 ACL 的文件的索引节点。
- 数据
- 数据将为 ACL 本身。 第一个 64 位数据将为 ACL 类型。 紧跟它的将是 ACL 值。
- EA 报头
- h_mode 字段设置为 0150000 显示扩展属性报头。 cpio 报头中的所有字段都设置为用于扩展属性的索引节点。 Except the h_name field is set to <NULL><埃纳梅><NULL>
- 数据:
- 这格式化为描述扩展属性的所有者以及扩展属性的数据。 eaHeader 后跟有扩展属性的所有者的路径名,随后是扩展属性数据。
struct eaHeader { char pathLen[12]; char dataLen[12]; };
参数
| 项 | 描述 |
|---|---|
| 目录 | 指定目录。 |
| <文件名 | 指定文件名列表,cpio 命令用来作为输入。 |
| >输出 | 指定输出设备,例如磁盘或者文件。 要了解更多有关使用磁带设备的信息,请参阅 rmt 特殊文件。 |
| <输入 | 指定输入设备(其中Input是由cpio-o命令创建的输出文件)。 如想获得更多关于使用磁带设备的信息,请参阅 rmt 特殊文件。 |
| 模式 | 指定命令使用的方式(如同 ksh 命令中描述的)。 Pattern 参数的缺省值是 *(星号),即选择 Input 中所有的文件。 |
标志
所有的标志都必须列在一起,中间没有空格。 并非以下所有标志都可以与每个 -o, -i一起使用。 和 -p 标志。
| 项 | 描述 |
|---|---|
| a | 源文件的访问时间重新设置为先前的时间。 |
| 博 | 交换字节和半字。注: 正在处理的文件中如果有奇数个字节或者半字,那么数据会丢失。 |
| B | 执行使用 512 字节的块输入输出到一个记录。注: 使用 B 或 C 选项来抽取或创建磁带归档时,分块因子必须是该磁带设备的物理块大小的倍数。 |
| c | 以 ASCII 字符的形式读写头信息。 如果 cpio 归档是使用 c 标志创建的, 它必须使用 c 标志来抽取。 |
| C 值 | 执行由 Value 参数定义的 512 字节的倍数个字节到一个记录的块输入输出。 例如, -C2 标志改变块输入输出到记录的大小为 1024 字节。 |
| 天 | 创建需要的目录。 |
| -E | -E 选项需要下列参数之一。 如果您省略了 -E 选项,那么 warn 是缺省的 cpio 行为。
|
| f | 复制除了匹配 Pattern 参数的所有文件。 |
| g | 归档时允许较大的 UID 或 GID (> USHORT_MAX) 值。 注: 环境变量也可以用于相同的环境变量。
|
| H | 以 hdr 格式读或写头信息。 当目标和目标计算机属于不同类型时,可以使用 -H 或者 -c 选项。 这个选项和
-c 及
-6 选项是相互排斥的。 这种格式允许系统的互操作和可移植性。 当使用 CRC (-Hcrc) 格式时,cpio 实用程序支持大小超过 2 GB 的文件的归档。 如果 cpio 归档是使用 H 标志创建的,
那么它必须使用 H 标志来抽取。 hdr 变量的有效值有:
|
| L | 任何可能的时候,链接文件而不是复制他们。 该标记只能与cpio-p命令一起使用。 |
| m | 保留先前的文件修改时间。 此标志在复制目录时不起作用。 |
| M | 即使目录被复制,保留先前文件的修改时间。 |
| R | 交互式重命名文件。 如果不想更改文件名,请输入一个句点或按 <Enter> 键。 在后一种情况下,cpio 命令不复制那个文件。 |
| 请 | 交换字节。 该标记仅用于cpio-i命令。注: 如果正在处理的文件中有奇数个字节,数据可能丢失。 |
| 日 | 交换半字。 该标记只能与cpio-i命令一起使用。注: 如果正在处理的文件中有奇数个半字,数据可能丢失。 |
| t | 创建一个目录。 这个操作不复制任何文件。 |
| -U | 执行 ACL 和扩展属性的归档和抽取。 属性还包括访问控制列表 (ACL)。 如果在 Target 文件系统上不支持 ACL 类型,那么它将转换为受 Target 文件系统支持的 ACL 类型。 如果在文件系统上不支持 EA,那么将不复制它。 |
| u | 无条件复制。 旧文件用同样的名字取代新文件。 |
| v | 列出文件名。 如果使用t标志,输出结果与ls-l命令类似。 |
| 6 | 处理旧文件 (例如,以 UNIX 第六版格式编写的文件)。 该标记只能与cpio-i命令一起使用。 |
| -Z | 归档加密文件或目录的加密文件系统(EFS)信息。 抽取 EFS 信息。 当您将 -t 和 -v 标志与 -Z 标志一起指定时,e 指示符会显示在使用 -Z
标志归档的加密文件和目录的文件方式后,并且会为其他文件显示连字符(-)。 注: 使用 -Z 标志创建的归档只能在 AIX 6.1 或更高发行版上复原。
|
退出状态
本命令返回以下退出值:
| 项 | 描述 |
|---|---|
| 重大安全事件数量 | 成功完成。 |
| > 0 | 发生错误。 |
安全性
RBAC 用户注意: 此命令可以执行特权操作。 只有特权用户才能执行特权限定的操作。 有关权限与特权的更多信息,请参阅安全性中的“特权限定的命令数据库”。 有关与该命令相关联的特权和权限的列表,请参阅 lssecattr 命令或 getcmdattr 子命令。
示例
- 要将文件复制到软盘上,请输入:
这将复制路径名在以下列表中列出的文件:filenames磁盘上的压缩文件 (>/dev/rfd0)。 v 标志使 cpio 命令在复制时显示每个文件的名称。 这个命令 在复制文件的备份时有用。 磁盘必须已经格式化, 但不必包含一个文件系统或已被安装。cpio -ov <filenames >/dev/rfd0注:uid 和 gid 的大小超过 65535 的文件不能用 cpio 命令归档。 在这种情况下,用户应该使用 backup 和 restore。
- 要将当前目录中的文件复制到软盘上,请输入:
这将复制当前目录中名称以.cls *.c | cpio -ov >/dev/rfd0 - 要将当前目录和所有子目录复制到软盘上,请输入:
这将保存以当前目录开头的目录树 (.) 并包含其所有子目录和文件。 输入这个命令会更快:find . -print | cpio -ov >/dev/rfd0
该-print条目在复制时显示每个文件的名称。find . -cpio /dev/rfd0 -print - 要用 cpio 命令列出已保存到软盘上的文件,请输入:
这将显示先前保存到/dev/rfd0cpio 命令格式的文件。 这个清单和 ls -l 命令生成的长目录清单相似。 只列出文件路径名,只要使用 -it 标志。cpio -itv </dev/rfd0 - 要从软盘复制先前使用 cpio 命令保存的文件,请输入:
- 要从软盘复制所选文件,请输入:cpio -i "*.c" "*.o" </dev/rfd0这将复制以以下文件结尾的文件:.c或.o从软盘。 请注意,模式"*.c"和"*.o"必须用引号括起来,以防止 shell 将 * (星号) 视为模式匹配字符。 cpio 命令自己解码模式匹配字符,是一种特殊的情况。
- 要重命名从软盘复制的文件,请输入:
-r 标志使 cpio 命令在从软盘复制之前询问您是否重命名每个文件。 例如,消息:cpio -ir </dev/rfd0
询问是否将文件保存为prog.c复制时的新名称。 如果想重命名这个文件,输入新名字,按 Enter 键。 如果想保持同样的名字,必须再次输入那个名字。 要根本避免复制那个文件,按 Enter 键。Rename <prog.c> - 要复制目录及其所有子目录,请输入:
这将复制当前的目录树,包括当前的目录和它的所有子目录及文件。 复本放在新/home/jim/newdir目录。 l 标志使 cpio 命令在可能的情况下链接文件而不是复制文件。mkdir /home/jim/newdir find . -print | cpio -pdl /home/jim/newdir注: 对于 9348 Magnetic Tape Unit Model 12,cpio 的性能可以通过改变缺省的块大小来提高。 要更改块大小,请在命令行输入下列命令:
chdev -1 <device_name> -a block_size=32k - 要将当前目录中的文件复制到软盘上并保留与文件关联的 ACL 和 EA,请输入:
ls *.c | cpio -oUv >/dev/rfd0
文件
| 项 | 描述 |
|---|---|
| /usr/bin/cpio | 包含 cpio 命令。 |
System V cpio 命令
用途 (System V cpio 命令)
把文件复制进出归档存储器及目录。
语法 (System V cpio 命令)
cpio '-i [ -b ] [ -B ] [ -c ] [ -d ] [ -f ] [ -k ] [ -m ] [ -r ] [ -s ] [ -S ] [ -T ] [ -t ] [ -u ] [ -v ] [ -V ] [ –6 ] [ -C bufsize ] [ -E 文件 ] [ -H hdr ] [ -I 文件 [ -M 信息 ] ] [ -R 身份证 ] ] [ 模式 ...]
cpio-o[-a] [-A] [-B] [-c] [-L] [-v] [-V] [-C bufsize] [-H hdr] [-K mediasize] [-O file[-M message] ] )
描述 (System V cpio 命令)
cpio 命令复制文件进出归档。 -i, -o 和 -p 选项选择要执行的操作。 下列的列表描述了每个操作。 -o, -p 和 -i 选项是相互排斥的。
cpio-i(复制到)
cpio -i(copy in)从标准输入中抽取文件 (只要 -I 没有被指定), 这个输入被假定是先前 cpio -o 的结果。 只有名字和 Patterns 匹配的文件被选择。 Patterns 是 ksh 的文件名生成注释中给定的正则表达式。 在 模式中,元字符为 "?" , "*" 和 "[.."。 ] "匹配斜杠 ("/") 字符和反斜杠 (" \") 是转义字符。 一个 "!" 元字符意味着否。 (例如,“[!abc]”模式将排除所有以 a、b 或 c 开始的文件。) 可以指定多种模式,并且如果没有模式被指定,Patterns 的缺省值是“*”(即,选择所有文件)。 每个模式都必须引在双引号中; 另外,当前目录中的文件的名字可以被使用。 抽取的文件是有条件的创建的,并且被复制进基于下面描述的选项的当前目录树中。
cpio -i 命令从标准输入读一个归档,这个文档是使用 cpio
-o 命令创建的,并且复制名字匹配
pattern 参数的文件。 pattern 参数是以
常规 ksh 符号表示法给出的正则表达式。 这些文件被复制进当前目录树中。 使用
ksh 命令中描述的文件名符号表示法,可以使用多个参数。 模式可以是特殊字符 *(星号)、?(问号)和 [...](方括号和省略号)。 模式参数的缺省值是一个 *(星号),即选择输入中的所有文件。 在 [a-z] 之类的表达式中,减号根据当前整理顺序表示 through 。
文件的许可权就是先前 cpio -o 中的。 除非当前用户为 root 用户,否则所有者和组的许可权与当前使用者相同。 如果这样,所有者和组的许可将和先前 cpio -o 中产生的相同。 以 512 字节的数量报告块。
如果 cpio -i 试图创建一个已经存在的文件并且 存在的那个文件的寿命一样或更小(较新), cpio 将输出一个警告消息并且不替换那个文件。 在另一方面 如果被抽取的那个文件比 cpio 归档中的那个文件旧,那么 已经存在的那个文件将被替换,而且命令不发出任何警告消息。
cpio-o(复制出来)
cpio -o 读标准输入以获取路径名列表并且将这些文件连同路径名和状态信息复制到标准输出上。
cpio-p(复制通行证)
cpio -p 读标准输入以获得文件的路径名列表 并且把它们复制进以 Directory 参数指定的目录中。 指定的目录必须已经存在。 如果这些路径名包含不存在的目录名,必须使用 d 标志来创建指定的目录。 缺省情况下,仅使用此选项将访问控制表(ACL)从源文件传送(复制)至目标文件。
标志 (System V cpio 命令)
| 项 | 描述 |
|---|---|
| -a | 重新设置源文件的访问时间为先前的访问时间。 |
| -A | 附加文件到归档。 -A 选项需要 -O 选项。 附加选项 -A 对于 rmt 特殊文件和磁盘无效。 |
| -b | 反转每个字中的字节顺序。 这个选项只有和 -i 选项一起时有效。 |
| -B | 这个选项 和 -C 选项都没有使用时,缺省的缓冲区大小是 512 个字节。 但是当 -B 标志被使用时,对于输入/输出操作,缓冲区大小就被设定为 5120 个字节。 |
| -c | 为了系统的互操作性和可移植性,以 ASCII 字符格式读或写头文件信息。 -c 选项和 -H 及 -6 是互斥的。 当目标和目标机器是不同类型时,-c 或者 -H 选项可以被使用。 |
| -C bufsize | 对于输入/输出操作的块大小被设置为 bufsize,这里 bufsize 以正整数形式指示了缓冲区大小。 如果和 -K 一起使用,bufsize 必须是 1K 的倍数。 |
| -d | 创建需要的目录。 |
| -E 文件 | 指定一个输入文件(file)包含了一个要从归档中抽取的文件名列表,一行一个文件名。 |
| -f | 复制除了在 Pattern 参数中的所有文件。 |
| -H hdr | 以 hdr 格式读或写头信息。 当目标和目标机器是不同类型时,-h 或者 -c
选项可以被使用。 这个选项和
-c 及
-6 选项是相互排斥的。 这种格式允许系统的互操作和可移植性。 cpio 当文件是 ASCII(-c)、CRC(-Hcrc)、tar(-Htar)或 ustar(- Hustar)格式时,实用程序支持大小超过 2 GB 的文件的归档。
hdr 的有效值为:
|
| -I 文件 | 读 file 的内容作为 一个输入归档。 如果 file 是一个字符特殊设备, 而且目前的介质已经读完,替换那个介质并按 Enter 键以继续到下一个介质。 这个选项只有和 -i 选项一起时有效。 |
| -k | 试图跳过可能碰到的损坏的文件头和输入/输出错误。 这个选项在介质损坏时,让用户只读那些有好头的文件。 这个选项只有和 -i 选项一起时有效。 |
| -K 介质大小 | 指定介质的 1K 倍数的大小。 如果和 -C bufsize 一起使用,那么 bufsize 必须是 1K 的倍数。 |
| -l | 在可能时硬链接文件而不是复制它们。 如果一个文件无法链接,那么它就被复制。 这个选项只有和 -p 选项一起使用时有效。 |
| -L | 这个选项帮助复制文件而不是链接。 链接文件的内容和链接名称一起被复制。 没有 -L 或 -l 选项,符号链接将缺省的被维护,由 -p 选项使之成为缺省。 |
| -M | 保留先前文件修改时间。 已恢复文件的修改时间和存取时间被设定为备份文件时的修改时间。 目录的修改时间不会保留。 |
| -M 消息 | 定义一个换介质时的消息。 当 -O 或 -I 选项被给予在一个特殊设备上的 cpio 时, 这个选项可以用来定义当到达介质底部时打印的消息。 %d 可以放在消息中用来打印需要继续的下一个介质的顺序号。 |
| -O 文件 | cpio 的输出定向到 file。 如果 file 是一个特殊设备并且当前的介质满了, 替换那个介质并按 Enter 键继续下一个介质。 这个选项只有和 -o 选项一起时有效。 |
| -r | 交互式重命名文件。 如果想跳过一个文件,按 Enter 键。 如果想保留原来的路径名,请输入 . :NONE. 这个选项只有和 -i 选项一起时有效。 |
| -R 标识 | 重新分配每个文件的所有权和组信息给每个有效用户 ID。 这个选项只对 root 用户有效。 |
| -s | 在每个半字间交换字节。 注: -s 和 -S 标志基本上用于字节排序。
|
| -S | 在每个字间交换半字。 注: -s 和 -S 标志基本上用于字节排序。
|
| -t | 创建一个目录。 这个操作不创建任何文件。 -t 标志和 -V 标志互斥。 |
| -t | 把长文件名截短到 14 个字符。 这个选项只有和 -i 选项一起时有效。 |
| -U | 无条件复制(通常一个较旧的文件不会替换具有相同名称的较新文件)。 |
| -v | 这是打印文件名列表的详细选项。 当和 -t 选项一起使用时, 目录看起来像是 ls -l 命令的一个输出。 |
| -V | 这是一个特殊的详细选项,对于每个已读或已写的文件,允许打印一个点。 对于用户不打印所有的文件名就可以确定 cpio 在工作是有用的。 注意, -V 和 -v 选项是互斥的并且在命令行中哪一个出现的早就被处理,相应的忽略另一个。 |
| -6 | 处理 UNIX System 第六版归档格式文件。 这个选项和 -c 及 -H 选项相互排斥。 |
参数 (System V cpio 命令)
| 项 | 描述 |
|---|---|
| 目录 | 指定目录。 |
| 模式 | 指定一个或多个模式(如在 ksh 命令中所描述的)和命令一起使用。 Patterns 参数的缺省值是一个 *(星号),即选择输入中的所有文件。 |
退出状态 (System V cpio 命令)
- 0
- 命令成功完成。
- >0
- 发生错误。
示例 (System V cpio 命令)
- 复制当前目录中所有文件到磁带设备
/dev/rmt0,请输入:
-c 选项确保那个文件可移植到其他机器上。 除了 find 您还可以使用 ls 、cat 、echo 等等,以管道输送名字列表到 cpio。 输出也可以重定向到一个常规 cpio 文件而不是一个设备。find . | /usr/sysv/bin/cpio -oc >/dev/rmt0 - 要抽取一个名为“arfile”的 cpio 归档文件,这个文件是由
cpio 命令创建的,使用下列命令:
这里,所有的文件都是从 cpio 归档中抽取的,并且 -d 选项确保在需要时创建需要的目录路径。/usr/sysv/bin/cpio -icdI arfile - cpio 归档文件也可以这样抽取:
-d 选项 确保在当前目录下创建所有需要的目录。 标准输入只有在 -I 标志没有被指定时可以使用。/usr/sysv/bin/cpio -icd < arfile - 要无条件地抽取“arfile”中所有的文件,使用下列命令:
/usr/sysv/bin/cpio -icduI arfile - 跳过头损坏的文件,cpio 可以这样使用:
/usr/sysv/bin/cpio -ickudI arfile - 当使用 cpio 创建一个归档时,如果归档的文件的存取时间需要重新设置,cpio 可以以下列方式使用:
ls | /usr/sysv/bin/cpio -oca > arfile - 从归档“ar”中只抽取和模式“a*”匹配的文件,使用下列命令:
这个命令抽取所有 以字母“a”开始的文件。cat ar | /usr/sysv/bin/cpio -ickud "a*" - 显示归档的文件列表,以下列方式使用 cpio:
详细选项 (-v)确保 -t 选项给出的列表以和 ls -l 命令非常相似的方式列出。cat ar | /usr/sysv/bin/cpio -itv - cpio -p 命令可用来复制一个目录树到一个新的路径
,如下:
当前目录中的整个目录树都被复制到 /home/user1/newdir。 -d 选项确保必要时创建目录。find . -print | /usr/sysv/bin/cpio -pd /home/user1/newdir - 复制目录树时,为了保持修改时间和访问控制表,以下列方式使用 cpio 命令:
在这个示例中,只有目录树下的 .o 文件 被复制到 /home/user1/newdir。find . -name "*.o" -print | /usr/sysv/bin/cpio -pdlmv /home/user1/newdir - 附加一个文件列表到匹配一个特殊模式的 cpio 归档中,调用和下列相似的命令:
在这个示例中,当前目录中所有以“d”开始的文件 将被附加到 cpio 归档。ls d* | /usr/sysv/bin/cpio -oAO /tmp/ar - 要从 cpio 归档中只抽取一个常规文件中的文件列表,使用下列命令:
在这个示例中,cpio 只抽取那些在常规文件“Efile”中列出的文件, 这里假定归档中存在指定的文件名。cat ar | /usr/sysv/bin/cpio -i -E Efile - 硬链接所有的文件而不是复制它们,调用和下列相似的命令:
在这个示例中,-l 标志确保所有的以字符“d”开头的文件名 被硬链接到 /home/user2/newdir 这个指定的目录。 跨越文件系统的硬链接是不允许的, 这样 -l 选项就不能在当目标目录是在另外一个文件系统中时使用。ls d* | /usr/sysv/bin/cpio -pdl /home/user2/newdir
文件 (System V cpio 命令)
| 项 | 描述 |
|---|---|
| /usr/sysv/bin/cpio | 包含 System V cpio 命令。 |