# 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