Linux 命令:cpio
·
Linux 命令:cpio
cpio 是 Linux/Unix 系统中一款老牌的文件打包/解包工具,与 tar 功能类似,但更偏向底层文件操作。它通过标准输入/输出来读取/写入文件,支持多种归档格式,常用于系统备份、恢复(如 initramfs 构建)等场景。
资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a
核心功能
- 打包:从标准输入读取文件列表,将文件打包为 cpio 归档文件。
- 解包:从标准输入读取 cpio 归档文件,解压到指定目录。
- 列表:查看 cpio 归档文件内的文件列表。
- 支持多种归档格式:
bin(默认)、odc、newc、crc等,其中newc是最常用的现代格式。
基本语法
cpio 依赖模式参数指定操作类型,语法格式如下:
# 打包:-o (--create)
ls | cpio -o > archive.cpio
# 解包:-i (--extract)
cpio -i < archive.cpio
# 列表:-t (--list)
cpio -t < archive.cpio
核心模式参数
| 模式 | 作用 |
|---|---|
-o / --create |
打包模式,读取标准输入的文件列表,生成归档文件 |
-i / --extract |
解包模式,读取标准输入的归档文件,解压到当前目录 |
-t / --list |
列表模式,查看归档文件内的文件清单 |
常用选项
| 选项 | 作用 |
|---|---|
-v |
显示详细过程(打包/解包的文件名),便于调试 |
-d |
解包时自动创建缺失的目录(必备选项,避免目录丢失) |
-u |
强制覆盖已存在的文件(默认不覆盖) |
-c |
使用 newc 格式(现代兼容格式,推荐) |
-f |
过滤文件,仅解压/打包匹配指定模式的文件 |
-m |
保留文件的原始修改时间(默认解压后更新时间) |
-F <文件名> |
指定归档文件路径(替代重定向 </>) |
典型用法
一、 打包操作
1. 基础打包(指定文件)
通过 ls 或 find 输出文件列表,管道传给 cpio -o 打包:
# 打包当前目录下所有 .txt 文件
find . -name "*.txt" | cpio -ocv > text_files.cpio
# -o:打包 -c:newc 格式 -v:显示详情
2. 打包整个目录
用 find 递归获取目录下所有文件,避免遗漏子目录:
# 打包 /home/user/docs 目录下所有内容
find /home/user/docs | cpio -ocv > docs_archive.cpio
3. 用 -F 指定归档文件名(替代重定向)
find . -type f | cpio -ocv -F files.cpio
二、 解包操作
1. 基础解包(保留目录结构)
必须加 -d 选项,否则子目录不会自动创建:
# 解压到当前目录
cpio -idv < text_files.cpio
# -i:解包 -d:创建目录 -v:显示详情
2. 解压到指定目录
先切换到目标目录,再执行解包命令:
# 解压到 /tmp/extract 目录
mkdir -p /tmp/extract
cd /tmp/extract
cpio -idv < /path/to/text_files.cpio
3. 强制覆盖解压
用 -u 选项覆盖已存在的同名文件:
cpio -iduv < text_files.cpio
4. 过滤解压(仅解压指定文件)
用 -f 匹配文件名,仅解压符合条件的文件:
# 仅解压归档中的 config.txt 文件
cpio -idv -f "config.txt" < archive.cpio
三、 查看归档文件列表
1. 简单列表
cpio -t < text_files.cpio
# 输出归档内所有文件路径
2. 详细列表(显示文件大小/权限)
cpio -tv < text_files.cpio
# 输出示例:
# -rw-r--r-- 1 root root 1024 2025-12-30 10:00 ./test1.txt
# -rw-r--r-- 1 root root 2048 2025-12-30 10:01 ./subdir/test2.txt
四、 系统级场景:构建 initramfs
cpio 最核心的用途是构建 initramfs(Linux 启动时的临时根文件系统),步骤如下:
# 1. 准备 initramfs 内容(如内核模块、init 脚本)
mkdir -p initramfs/{bin,lib,init}
# 2. 打包为 initramfs.cpio.gz
cd initramfs
find . | cpio -ocv | gzip -9 > ../initramfs.cpio.gz
注意事项
- 依赖管道输入:
cpio不会主动扫描文件,必须通过find/ls等命令管道传递文件列表,否则会等待标准输入。 - 解包必加
-d:如果归档包含子目录,不加-d会导致文件解压到当前目录,丢失目录结构。 - 与
tar的区别特性 cpiotar输入方式 依赖管道传递文件列表 直接指定文件/目录 常见用途 系统启动(initramfs)、底层备份 日常文件打包/压缩 压缩支持 需配合 gzip/bzip2内置 -z/-j压缩选项 - 格式兼容性:默认
bin格式兼容性差,建议始终加-c选项使用newc格式。
补充:cpio 与 tar 常用命令对比
| 需求 | cpio 命令 | tar 命令 |
|---|---|---|
| 打包目录 | `find dir | cpio -ocv > dir.cpio` |
| 解包 | cpio -idv < dir.cpio |
tar -xvf dir.tar |
| 查看列表 | cpio -t < dir.cpio |
tar -tvf dir.tar |
| 压缩打包 | `find dir | cpio -ocv |
更多推荐




所有评论(0)