Linux cpio 命令超详细教程:归档备份 / 解压 / 复制一站式精通 1. 命令简介cpioCopy In and Out是一个功能强大的归档工具主要用于创建、提取和管理归档文件备份档。它支持多种归档格式能够处理文件、目录、设备文件等并常与 find 命令结合使用实现灵活的备份和恢复操作。cpio 本身不压缩数据但可与 gzip、bzip2 等压缩工具配合使用。该命令有三种基本操作模式copy-out 模式创建归档文件。 copy-in 模式从归档中提取或列出文件。 copy-pass 模式在目录树间直接复制文件不生成归档文件。2. 语法格式根据操作模式基本语法格式如下copy-out 模式 (创建归档)bash运行cpio -o [选项] [ 归档文件]copy-in 模式 (提取或列出)bash运行cpio -i [选项] [ 归档文件]copy-pass 模式 (直接复制)bash运行cpio -p [选项] 目标目录说明 文件列表通常通过标准输入stdin传递给 cpio例如来自 find 命令的管道。归档文件的输入 / 输出默认也使用标准输入 / 输出stdin/stdout可通过 -F、-O、-I 选项或 Shell 重定向来指定文件。3. 常用选项及说明3.1 模式选择选项表格选项说明-o, --create运行 copy-out 模式创建归档文件。-i, --extract运行 copy-in 模式从归档中提取文件。-p, --pass-through运行 copy-pass 模式直接复制文件到目标目录。3.2 通用选项表格选项说明-v, --verbose详细列出处理的文件。-V, --dot每处理一个文件输出一个点.显示进度。-c使用旧 ASCII 格式便携格式兼容性更好。-C SIZE, --io-sizeSIZE设置 I/O 块大小为 SIZE 字节。-H FORMAT, --formatFORMAT指定归档格式如 bin, odc, newc, crc, tar, ustar 等。-F FILE, --fileFILE使用指定文件作为归档文件而非标准输入 / 输出。-O FILEcopy-out 模式下指定输出归档文件等同于 -o -F FILE。-I FILEcopy-in 模式下指定输入归档文件等同于 -i -F FILE。--force-local强制将归档文件视为本地文件即使文件名包含冒号。3.3 copy-out 模式专用选项表格选项说明-A, --append追加到现有归档文件要求归档文件为普通文件。-B设置 I/O 块大小为 5120 字节提高磁带等设备的效率。3.4 copy-in 模式专用选项表格选项说明-t, --list列出归档内容不提取文件。-d, --make-directories根据需要自动创建目录。-m, --preserve-modification-time保留文件的修改时间。-u, --unconditional无条件覆盖所有现有文件不询问。-r, --rename交互式重命名文件。-E FILE, --pattern-fileFILE从 FILE 中读取模式列表仅提取匹配的文件。-f PATTERN, --nonmatching PATTERN提取所有不匹配给定模式的文件。--no-absolute-filenames使用相对路径创建文件不保留绝对路径。--no-preserve-owner不保留文件属主提取的文件归当前用户所有通常需 root 权限才能保留属主。3.5 copy-pass 模式专用选项表格选项说明-l, --link尽可能使用硬链接而非复制文件节省空间仅在同一文件系统有效。-L, --dereference跟随符号链接复制链接指向的实际文件。-d, --make-directories根据需要自动创建目录。3.6 其他选项表格选项说明--help显示帮助信息。--version显示版本信息。4. 示例用法4.1 创建归档copy-out 模式将 /etc 目录下所有普通文件归档到 etc.cpiobash运行find /etc -type f | cpio -ov etc.cpio使用相对路径归档当前目录下的所有文件和目录并使用 gzip 压缩bash运行find . -depth | cpio -ov | gzip backup.cpio.gz指定归档格式为 newc常用于 initramfs 映像并直接输出到文件bash运行find /boot | cpio -o -H newc -F /tmp/boot.img4.2 列出归档内容copy-in 模式列出归档文件中的所有文件bash运行cpio -it etc.cpio详细列出归档内容显示文件权限、大小、时间等信息bash运行cpio -itv etc.cpio列出压缩归档的内容bash运行gzip -dc backup.cpio.gz | cpio -itv4.3 提取归档copy-in 模式提取归档中的所有文件到当前目录并自动创建所需目录bash运行cpio -idv etc.cpio提取归档到指定目录bash运行mkdir /tmp/restore cd /tmp/restore cpio -idv /path/to/etc.cpio仅提取匹配特定模式的文件例如所有 .conf 和 .cfg 文件首先创建模式文件 patterns.txtplaintext*.conf *.cfg然后执行bash运行cpio -idv -E patterns.txt etc.cpio4.4 直接复制文件copy-pass 模式将 /home/user/docs 下的文件复制到 /backup/docs保留目录结构自动创建目录bash运行find /home/user/docs -depth | cpio -pdm /backup/docs在同一文件系统内使用硬链接复制以节省空间bash运行find /data -depth | cpio -pldm /backup/5. 注意事项输入来源 cpio 的 copy-out 和 copy-pass 模式需要从标准输入读取文件路径列表。确保列表完整准确通常使用 find 命令生成。使用 -depth 选项有助于正确处理目录权限。路径处理 默认情况下cpio 会保留文件路径。提取时若路径为绝对路径如 /etc/file可能会覆盖系统文件。可使用 --no-absolute-filenames 或谨慎选择提取目录。权限与属主 保留文件属主和特殊权限如 SUID通常需要 root 权限。普通用户运行时可使用 --no-preserve-owner 选项。与 tar 的区别 cpio 不自动处理子目录需要与 find 配合但这也使其在文件列表筛选上更为灵活。cpio 可以处理更特殊的文件格式如某些二进制格式。文件名通配符 copy-in 模式下的 -E 和 -f 选项使用的模式是通配符glob模式而非正则表达式。