Linux cpio
命令详解
一、命令简介
cpio
(Copy In and Out)是 Linux/UNIX 系统中一个功能强大的归档工具,用于从标准输入或标准输出中创建、提取和管理归档文件。它支持三种模式:
-
复制文件到归档中(copy-out)
-
从归档中提取文件(copy-in)
-
在文件之间直接复制(copy-pass)
与 tar
不同,cpio
不接受文件名作为参数,而是依赖其他命令(如 find
或 ls
)将文件列表通过标准输入传入,这使得它在脚本和复杂处理任务中非常灵活。
二、命令语法
cpio [选项] <模式>
其中,<模式>
有三种:
-
-o
:输出模式(创建归档) -
-i
:输入模式(提取归档) -
-p
:通过模式(复制文件)
三、常用选项表
选项 | 描述 |
---|---|
-o | 输出模式:将文件打包到归档中(需从 stdin 读取文件列表) |
-i | 输入模式:从归档中提取文件(需从 stdin 读取归档内容) |
-p | 传输模式:从一个目录复制文件到另一个目录 |
-v | 显示详细操作过程(verbose) |
-d | 自动创建所需目录 |
-u | 解压时自动覆盖已有文件 |
--quiet | 禁用警告信息 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
-A | 向归档追加内容(限于 tar 格式) |
-c | 使用 ASCII 格式的归档(与其他 UNIX 系统兼容) |
-t | 在输入模式下列出归档内容(不解压) |
--null | 使用 null (\0 ) 分隔文件名(配合 find -print0 使用) |
四、工作模式详解
1. 输出模式(-o
):创建归档
将文件列表打包成 .cpio
文件:
find . -type f | cpio -ov > archive.cpio
-
使用
find
生成文件名列表。 -
-o
:输出模式。 -
-v
:显示过程。 -
>
:将归档写入文件。
2. 输入模式(-i
):解压归档
从 .cpio
文件中提取文件:
cpio -iv < archive.cpio
或列出归档内容:
cpio -it < archive.cpio
3. 传输模式(-p
):复制文件到目录
find . -type f | cpio -pvd /destination/path/
-
-p
:复制文件。 -
-v
:显示过程。 -
-d
:自动创建目录。
五、使用示例
示例 1:备份目录成 .cpio
文件
cd /mydir
find . -print | cpio -ov > /tmp/mybackup.cpio
示例 2:解压 .cpio
文件到当前目录
cd /restore/dir
cpio -idv < /tmp/mybackup.cpio
示例 3:列出 .cpio
文件中的内容
cpio -itv < mybackup.cpio
示例 4:跨目录复制文件
find . -name "*.txt" | cpio -pdmv /tmp/target
六、常见归档格式
cpio
支持多种归档格式:
格式名 | 描述 |
---|---|
odc | 传统 UNIX 标准格式 |
newc | 新的 ASCII 格式,支持大文件 |
crc | newc 格式加校验码 |
bin | 二进制格式(不常用) |
tar | 兼容 tar 格式 |
ustar | POSIX 标准 tar 格式 |
默认使用的是 newc
或 odc
,可以通过 --format
指定:
cpio --format=newc -ov < files.txt > backup.cpio
七、应用场景
-
系统内核模块、initramfs 制作(
initramfs
使用cpio
格式) -
脚本中进行文件的归档与迁移
-
替代
tar
进行定制归档 -
文件备份、文件系统镜像制作
-
RPM 包解包时的中间格式(
.cpio
是其中的封装层)
八、cpio 与 tar 的对比
项目 | cpio | tar |
---|---|---|
文件列表来源 | 标准输入 | 命令行参数 |
压缩支持 | 需手动配合 | 内建 gzip/bzip2 支持(现代版本) |
灵活性 | 更适合管道 | 相对固定 |
格式兼容性 | 多种 UNIX 风格格式 | 通用性更高 |
易用性 | 命令较复杂 | 使用简单 |
九、常见错误与解决方案
-
问题:
cpio: premature end of file
-
原因:归档未完整读取或格式不对。
-
解决:确保输入完整,注意压缩格式。
-
-
问题:
cpio: cannot create directory
-
原因:权限不足或目录不存在。
-
解决:加
-d
创建目录,用sudo
提权。
-
-
无法识别
.cpio.gz
等压缩文件:gzip -dc archive.cpio.gz | cpio -idv
十、总结
项目 | 内容 |
---|---|
命令 | cpio |
功能 | 文件打包、归档、提取、跨目录复制 |
模式 | -o 创建、-i 解压、-p 复制 |
适用场景 | initramfs、RPM、系统迁移等 |
推荐配合 | find 、gzip 、xz |
替代命令 | tar (更常用) |
虽然 cpio
在现代系统中使用频率不如 tar
,但在某些系统级任务(如制作内核镜像、解包 RPM、嵌入式系统构建)中仍然扮演着关键角色。掌握 cpio
有助于深入理解 Linux 系统文件结构和归档机制。
这里是封面: