You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
6.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# cpio
## 说明
**cpio命令** 将归档文件及从包中提取文件cpio命令可以复制文件到归档包中或者从归档包中复制文件
## 选项
```markdown
cpio [OPTION...] [目标目录]
主操作模式
-i, --extract 从包中提取文件 (运行 copy-in 模式)
-o, --create 创建包 (运行 copy-out 模式)
-p, --pass-through 运行 copy-pass 模式
-t, --list 打印输入内容列表
应用于所有模式的选项:
--block-size=BLOCK-SIZE 设置 I/O 块大小为 BLOCK-SIZE * 512
字节
-B 设置 I/O 块大小为 5120 字节
-c Identical to "-H newc", use the new (SVR4)
portable format.If you wish the old portable
(ASCII) archive format, use "-H odc" instead.
-C, --io-size=NUMBER 设置 I/O 块大小为指定的 NUMBER 字节
--force-local
包文件是本地的,尽管名字中含有冒号
-f, --nonmatching 仅拷贝不匹配任意给定的模式的文件
-F, --file=[[用户@]主机:]文件名
用“文件名”来替代标准输入和输出。如果是非本地的文件,则用可选的“用户”和“主机”来指定用户名和主机名
-H, --format=格式 使用指定的包格式
-M, --message=STRING 当到达备份介质的尾部的时候打印
STRING
-n, --numeric-uid-gid 在内容列表的详表中,显示数字的 UID
和 GID
--quiet 不要打印已拷贝的块数
--rsh-command=COMMAND 用 COMMAND 替代 rsh
-v, --verbose 详细列出已处理的文件
-V, --dot 每处理一个文件就打印一个“.”
-W, --warning=FLAG 控制警告信息显示。当前 FLAG
可为“none”、“truncate”或“all”。多个选项可以累积
命令修饰仅在 copy-in 模式中有效:
-b, --swap
交换数据中每个字的两个半字以及每个半字中的两个字节。等价于
-sS
-r, --rename 交互式重命名文件
-s, --swap-bytes 交换文件中每个半字中的两个字节
-S, --swap-halfwords
交换文件中每个字(4个字节)中的两个半字
--to-stdout 提取文件到标准输出
-E, --pattern-file=FILE 从 FILE
中读取额外的用于指定提取或列表的文件名的模式
--only-verify-crc When reading a CRC format archive, only verify the
checksum of each file in the archive, don't
actually extract the files
应用于 copy-out 模式的选项
-A, --append 追加到已存在的归档文件
--device-independent, --reproducible
Create device-independent (reproducible) archives
--ignore-devno Don't store device numbers
-O [[用户@]主机:]文件名
使用包文件名而不是标准输出。如果文件在远程机器上,则可指定用户和主机
--renumber-inodes Renumber inodes
应用于 copy-pass 模式的选项:
-l, --link 在可行时链接文件而不是拷贝文件
应用于 copy-in 及 copy-out 模式的选项:
--absolute-filenames 文件名不去除文件系统前缀
--no-absolute-filenames 相对于当前目录来创建所有文件
应用于 copy-out 及 copy-pass 模式的选项:
-0, --null 文件名列表采用 NULL
而不是换行作为分割符
-a, --reset-access-time 文件读取后恢复文件的访问时间
-I [[用户@]主机:]文件名
从文件读入而不是从标准输入读入
如果文件在远程机器上
则可指定用户和主机
-L, --dereference 跟随符号链接
(拷贝符号链接指向的文件而不是拷贝链接本身)
-R, --owner=[用户][:.][组]
设置所有文件的所有权信息到指定的用户和/或组
应用于 copy-in 和 copy-pass 模式的选项:
-d, --make-directories 需要时创建目录
-m, --preserve-modification-time
创建文件时保留以前文件的修改时间
--no-preserve-owner 不改变文件的所有权
--sparse
把含有大块零的文件以稀疏文件方式写出
-u, --unconditional 无条件覆盖所有文件
```
## 实例
```bash
cpio -o name-list > archive # 归档 name-list 中的文件到 archive
cpio -i < archive # archive 中提取文件
cpio -p destination-directory < name-list # 拷贝 name-list 中的文件到目标目录(destination-directory)
find / -print | cpio -covB > /dev/st0 # 将系统上所有资料备份到磁带机内,/dev/st0是磁带的设备名代表SCSI磁带机
cpio -icdvt < /dev/st0 > /tmp/st_content # 查看上例磁带机上备份的文件
find /etc -type f | cpio -ocvB >/opt/etc.cpio # 将/etc下的所有普通文件都备份到/opt/etc.cpio
cpio -icduv < /opt/etc.cpio # 备份包etc.cpio还原到相应的位置如果有相同文件进行覆盖
: << comment
注意,cpio恢复的路径,如果cpio在打包备份的时候用的是绝对路径,那么在恢复的时候会自动恢复到这些绝对路径下,本例就会将备份文件全部还原
到/etc路径下对应的目录中。同理,如果在打包备份用的是相对路径,还原时也将恢复到相对路径下
示例可以看出,cpio无法直接读取文件,它需要每个文件或者目录的完整路径名才能识别读取,而find命令的输出刚好做到了这点,因此,cpio命令一般
find命令配合使用
comment