简介
cpio 指令可以将文件复制到 存档包(archives),也可以从存档包(archives)复制出文件。缺省情况下,cpio从标准输入读取输入数据,向标准输出写入输出数据。
归档包(archives)是一种包含其他文件和有关信息的文件。 有关信息包括:
- 文件名,
- 属主,
- 时间戳(timestamp),
- 和访问权限。
cpio支持下列的归档格式:
- binary,
- old ASCII,
- new ASCII, crc,
- HPUX binary,
- HPUX old ASCII,
- old tar,
- POSIX.1 tar。
默认情况下,cpio创建二进制格式存档,以便与旧的cpio程序兼容。从档案中提取时,cpio会自动识别正在读取的归档类型,并可以读取在具有不同字节顺序的计算机上创建的归档。
cpio 有三种操作模式,某些选项只能用在对应的操作模式上;
Copy-out 模式
在copy-out模式下,cpio将文件复制到存档(archives)中。它从标准输入读取文件名列表(每行一个文件名),并将存档(archives)写入标准输出。生成文件名列表的典型方法是使用find命令; 您应该使用 -depth 选项,减少因为进入没有访问权限的目录而引起的麻烦。。
cpio {-o|--create} [-0acvABLV] [-C bytes] [-H format] [-M message] \
[-O [[user@]host:]archive] [-F [[user@]host:]archive] \
[--file=[[user@]host:]archive] [--format=format] [--message=message]\
[--null] [--reset-access-time] [--verbose] [--dot] [--append] \
[--block-size=blocks] [--dereference] [--io-size=bytes] \
[--rsh-command=command] [--help] [--version] < name-list [> archive]
Copy-in 模式
在copy-in模式中, cpio 从归档包里读取文件, 或者列出归档包里的内容。它从标准输入读入归档包。任何非选项的命令行参数都被认为是shell globbing的模式; 只有存档中的名称与这些模式中的一个或多个匹配的文件才会从存档中复制。和在shell中不同的是,不是使用.作为通配符,而是使用/作为通配符。如果没有给出任何模式,则提取所有文件
cpio {-i|--extract} [-bcdfmnrtsuvBSV] [-C bytes] [-E file] [-H format] [-M message] \
[-R [user][:.][group]] [-I [[user@]host:]archive] [-F [[user@]host:]archive] \
[--file=[[user@]host:]archive] [--make-directories] [--nonmatching] \
[--preserve-modification-time] [--numeric-uid-gid] [--rename] [-t|--list] \
[--swap-bytes] [--swap] [--dot] [--unconditional] [--verbose] [--block-size=blocks] \
[--swap-halfwords] [--io-size=bytes] [--pattern-file=file] [--format=format] \
[--owner=[user][:.][group]] [--no-preserve-owner] [--message=message] \
[--force-local] [--no-absolute-filenames] [--absolute-filenames] [--sparse] \
[--only-verify-crc] [--to-stdout] [--quiet] [--rsh-command=command] [--help] \
[--version] [pattern...] [< archive]
Copy-pass 模式
在copy-pass模式中, cpio把文件从一棵目录树复制到另一棵, 它结合了 copy-in 和 copy-out 的操作, 但不使用归档包。 cpio从标准输入读取欲复制的文件名列表; 并复制它们复制到目标目录(非选项的参数都被认为是目标目录)。
cpio {-p|--pass-through} [-0adlmuvLV] [-R [user][:.][group]] [--null] \
[--reset-access-time] [--make-directories] [--link] [--quiet] \
[--preserve-modification-time] [--unconditional] [--verbose] [--dot] \
[--dereference] [--owner=[user][:.][group]] [--no-preserve-owner] \
[--sparse] [--help] [--version] destination-directory < name-list
选项说明
-0,--null
读取由空字符而不是换行符终止的文件名列表,以便可以存档名称包含换行符的文件。可以使用GNU find命令是生成以null结尾的文件名列表。此选项可用于Copy-out和Copy-pass模式。
-a,--reset-access-time
读取完文件后重置文件的访问时间, 这样看上去就象没被访问过一样。
-A, - append
追加到已经存在的归档包中。仅用于 copy-out模式。该归档包必须是用 -O 或 -F (--file) 选项指定的磁盘文件。
-b, - swap
在 copy-in 模式中 交换 words 的 halfwords 和 halfwords 的 bytes 。相当于-sS。此选项可用于拷入模式。使用此选项可以在 big-endian 和 little-endian 机器之间转换32位整数。
-B
把 I/O 块大小设置成 5120 字节,最初的块大小是 512 字节。
--block-size=BLOCK-SIZE
设置 I/O 块 大小 为 BLOCK-SIZE * 512 字节。
-c
与'-H newc'相同,使用新的(SVR4)跨平台格式。如果您希望使用旧的(ASCII)跨平台存档格式,请改用“-H odc”。
-C IO-SIZE, --io-size=IO-SIZE
设置 I/O 块大小为 IO-SIZE 字节。
-d, --make-directories
根据需要创建前导目录。
-E FILE, --pattern-file=FILE
在 copy-in 模式中, 从 FILE 中读取用于匹配文件名的模式串, FILE 中的内容就象 cpio 的非选项参数一样看待。
-f, --nonmatching
只复制那些不匹配任何给定的模式串的文件。
-F, --file=archive
从归档文件输入或输出到归档文件, 而不是使用标准输入或标准输出,此参数 后边 需要 紧跟 归档文件名。
如果使用其他机器上的归档文件, 文件名要用 HOSTNAME: 开始。主机名前面可以加上用户名和一个 @, 作为 访问远程 磁带机的用户 (如果你有这样的权限, 一般在用户的 ~/.rhosts文件中会有这么一项)。
--force-local
和 -F, -I, 或 -O, 一起用, 即使文件名中含有一个冒号,也把归档文件看作本地文件, 一般说来冒号指出一个远程主机名字。
-H FORMAT, --format=FORMAT
使用归档格式 FORMAT。有效的格式在下面列出, 大小写均可。 "copy-in" 模式的缺省动作是自动检测归档格式, "copy-out" 的缺省格式是 "bin"。
- bin 老式的二进制格式。
- odc 老式的 (POSIX.1) 跨平台格式。
- newc 新型 (SVR4) 跨平台格式, 支持大于 65536 i节点的文件系统,一般 制作 ramdisk 就用 这个 格式。
- crc 新型 (SVR4) 跨平台格式, 并且计算校验和。
- tar 老式的 tar 格式。
- ustar POSIX.1 tar 格式, 也能识别 GNU tar 归档文件, 它们相似但不全相同。
- hpbin HP UNIX 上的 cpio 使用的老式的 binary 格式。(用独特的方法储存设备文件)
- hpodc HP UNIX 上的 cpio 使用的跨平台格式。 (用独特的方法储存设备文件)
-i, --extract
进入 copy-in 模式,也就是 解压。
-I archive
从归档文件输入数据, 而不是标准输入。
如果使用其他机器上的归档文件, 文件名要用 HOSTNAME: 开始。主机名前面可以加上用户名和一个 @, 作为 访问远程 磁带机的用户 (如果你有这样的权限, 一般在用户的 ~/.rhosts文件中会有这么一项)。
-k
无效操作; 只是用来兼容其他版本的 cpio。
-l, --link
如果有可能, 连接文件, 而不是复制。
-L, --dereference
解除符号连接的关联 (复制符号连接指向的文件, 而不是连接本身)。
-m, --preserve-modification-time
创建文件时保留以前的文件修改时间。
-M MESSAGE, --message=MESSAGE
当备份介质(例如 磁带或软盘) 到达卷尾时, 显示一条消息, 提醒用户插入下一卷。如果 MESSAGE 包含字符串 "%d", 它被替换成当前卷号 (从 1 开始)。
-n, --numeric-uid-gid
以详细方式 (verbose) 显示内容时, 用数字显示 UID 和 GID, 而不是翻译成名称。
--no-absolute-filenames
在copy-in模式中, 即使它们在归档包中有绝对路径名。也在当前目录中创建所有相关文件。
--absolute-filenames
在copy-in模式中, 不要从文件名中删除包含..和前导斜杠的前导文件名组件。
--no-preserve-owner
在 copy-in 和 copy-pass 模式中,不改变文件的属主关系 (译注: 疑为不保留); 使它们属于展开它们的用户。这是普通用户的缺省行为, 因此 System V 的用户不致于无意中把文件泄露(give away)。
-o, --create
进入 copy-out 模式。
-O archive
输出到归档文件, 而不是标准输出。
如果使用其他机器上的归档文件, 文件名要用 HOSTNAME: 开始。主机名前面可以加上用户名和一个 @, 作为 访问远程 磁带机的用户 (如果你有这样的权限, 一般在用户的 ~/.rhosts文件中会有这么一项)。
--only-verify-crc
当在 copy-in 模式读入 CRC 格式的归档包时, 不展开里面的文件, 而只是测试文件的 CRC 码。
-p, --pass-through
进入 copy-pass 模式。
--quiet
不显示复制的块数。
-r, --rename
以交互方式重命名文件。
-R [user][:.][group], --owner [user][:.][group]
在 copy-out 和 copy-pass 模式中, 把所有文件的属主设置为指定的用户和/或用户组。 无论用户还是用户组都必须存在。 如果省略用户组, 但是给出了分隔符 : 或 ., 则使用给定用户登录时的用户组。 只有超级用户能够改变文件的属主。
--rsh-command=COMMAND
告诉cpio需要使用COMMAND与远程设备通信。
-s, --swap-bytes
在 copy-in 模式中, 交换文件中每一个半字(字节对) 中的字节。
-S, --swap-halfwords
在 copy-in 模式中, 交换文件中每一个字(4字节) 中的半字。
--sparse
在 copy-out 和 copy-pass 模式中, 把大块数据 0 的文件写成稀疏文件 (sparse file)。
-t, --list
显示输入归档包的内容(文件名),默认 把 内容 显示 到 屏幕。
--to-stdout
将文件解压缩到标准输出。此选项可用于拷入模式。
-u, --unconditional
替换所有文件, 不再提问是否用旧文件替换已经存在的新文件。
-v, --verbose
列出处理的文件, 加上 -t 选项可以列出一个 'ls -l' 风格的列表。在一个归档包内容的详细列表 (verbose) 中, 如果本地系统不存在归档文件的用户和用户组名称, 它们将被替换成其数字 UID和GID 对应于本地系统的用户和用户组名称。
-V, --dot
为处理的每个文件打印一个.。
--version
打印cpio程序版本号并退出。
示例
常用操作模式
- 备份:cpio -ocvB > [ file | device ]
- 还原:cpio -ivcdu >[ file | device ]
- 查看:cpio -ivct >[ file | device ]
Copy-out 模式
- 找出当前目录下的所有文件,然后将它们打包进一个cpio压缩包文件
find . -depth | cpio -ocvB > backup.cpio 或 find .-depth-print | cpio -ocvB > backup.cpio
注意:cpio 建立起来的归档文件包括文件头和文件数据两部分。文件头包含了对应文件的信息。如文件的 UID,GID,连接数以及文件大小等。其好处是可以保留硬连接,在恢复时默认情况下保留时间戳,无文件名称长度的限制
- 将当前目录下名为inittab文件加入initrd.cpio包中
命令1:find . -name inittab -depth | cpio -ovcB -A -F initrd.cpio
命令2:find . -name inittab -depth | cpio -ovcB -A -O initrd.cpio
命令3:find . -name inittab -depth | cpio -ovcB -A --quiet -O initrd.cpio(--quit:表示不显示复制块)
Copy-in 模式
cpio --absolute-filenames -vtc < boot.cpio(不忽略文件列表清单的文件名最前面的“/")
cpio --no-absolute-filenames -vtc < boot.cpio(默认是忽略文件列表清单的文件中最前面的
cpio --absolute-filenames -icvu < test.cpio(解压到原始位置,解压出来的每个文件的时间属性改为当前时间)
cpio --absolute-filenames -icvum < test.cpio(解压到原始位置,同时不改变解压出来的每个文件的时间属性)
cpio -icvu < test.cpio(解压到当前目录下)或者cpio -icvum < test.cpio
在解包cpio时,对解包出来的文件进行交互的更名:cpio -icvdu -r < grub.cpio
将cpio包中的文件解压并输入标准输出: cpio -icvu --to-stdout < grub.cpio







网友评论