☰
ZeroTermux 命令手册精讲:cpio 归档备份工具完整实战指南
2026/10/3 8:21:11 网站建设 项目流程
  • 移动开发
  • 开发工具

【免费下载链接】ZeroTermux

项目地址:https://gitcode.com/GitHub_Trending/ze/ZeroTermux
点击查看免费下载

本文基于 ZeroTermux 内置命令手册 cpio.md 展开,系统讲解 cpio 在 Linux/Android Termux 环境中的备份、还原与复制能力:包括 copy-out / copy-in / copy-pass 三种工作模式、全部核心选项的语义与取值、与 find 命令配合的典型用法,以及绝对路径与相对路径的还原行为差异。读完本文,你将能够独立使用 cpio 完成"按需打包 → 列表查验 → 选择性还原"的完整备份链路,并理解 ZeroTermux 内置命令查询(CommandDialog)是如何将这份 Markdown 手册渲染成可交互帮助文档的。

cpio 是什么:三种操作模式

cpio(copy in and out)是一类经典的 Unix 归档工具,主要用来建立或者还原备份档:它可以把文件复制到归档包中,也可以从归档包中把文件复制出来。与 tar 不同,cpio 本身没有遍历文件系统的能力,它依赖标准输入传入的文件完整路径名来识别要处理的文件——这正是 cpio 必须与find配合使用的根本原因(这一点在原文档末尾有明确总结,下文实战部分会再次验证)。

cpio 有且仅有三种操作模式,分别由三个互斥选项触发:

模式选项作用
copy-out(输出模式)-o/--create读取标准输入中的路径列表,建立备份档(输出到标准输出或-O指定文件)
copy-in(输入模式)-i/--extract从备份档中还原文件(从标准输入或-I指定文件读取)
copy-pass(直通模式)-p/--pass-through不经过归档文件,直接将文件复制到目的目录

三种模式对应了"打包备份、还原备份、直接拷贝"三大场景。原文档中的四个实例正是围绕前两种模式展开的。

语法

cpio(选项)

cpio 不接受普通的文件参数,所有待处理的路径都通过管道从标准输入读取。因此实际使用时通常写成:

find 路径 -type f | cpio -ocvB > 备份档

选项全解

以下完整收录原文档列出的全部选项,并补充取值说明与注意事项。

常用核心选项

选项说明
-o/--create执行 copy-out 模式,建立备份档
-i/--extract执行 copy-in 模式,还原备份档
-p/--pass-through执行 copy-pass 模式,跳过归档直接复制文件到目的目录
-t/--list只将输入的内容(备份档中的文件清单)呈现出来,不实际解包
-v/--verbose详细显示指令的执行过程
-V/--dot处理每个文件时在行首加一个.号,用于进度提示

归档文件与格式

选项说明
-F<备份档>/--file=<备份档>指定备份档名称,取代标准输入/输出;也能借此通过网络使用另一台主机的保存设备存取备份档
-O<备份档>指定备份档名称,取代标准输出(copy-out 模式专用)
-I<备份档>指定备份档名称,取代标准输入(copy-in 模式专用)。(注:原文档此处写作-l<备份档>,但 GNU cpio 中该选项实为-I,请与下方-l/--link硬链接选项区分)
-H<备份格式>指定备份时使用的文件格式。GNU cpio 常见格式有bin(旧二进制)、odc(POSIX 可移植)、newc/crc(新型可移植,支持大文件)、tar/ustar等
-c使用旧 ASCII 备份格式(等价于-H odc)
-B将输入/输出的区块大小改为 5120 Bytes(即 10 个 512 字节块)
-C<区块大小>/--io-size=<区块大小>设置输入/输出的区块大小,单位是 Byte
--block-size=<区块大小>设置输入/输出的区块大小,取值为 512 字节的倍数:例如设置 5,则区块大小为 2500(原文数值);设置 10,则区块大小为 5120,以此类推
--sparse若一个文件内含有大量连续 0 字节,则将其存储为稀疏文件,可显著节省归档空间
--force-local强制将备份档存放在本地主机(不当作远程设备处理)
--only-verify-crc当备份档采用 CRC 备份格式(-H crc)时,可用此参数检查备份档内每个文件是否正确无误

文件处理与路径行为

选项说明
-a/--rest-access-time重新设置文件的存取时间(备份后恢复 atime)
-d/--make-directories如有需要 cpio 会自行建立目录(还原时常用)
-m/--preserve-modification-time不去更改文件的修改时间(保留原 mtime)
-u/--unconditional置换所有文件,不论日期时间新旧,均不询问而直接覆盖
-r/--rename当有文件名称需要更改时,采用互动模式逐文件询问
-R<拥有者><:/.><所属群组>/--owner在 copy-in 还原或 copy-pass 复制时,指定复制文件的拥有者与所属群组
--no-absolute-filenames使用相对路径建立文件名称
--no-preserve-owner不保留文件的拥有者,谁解开备份档,文件就归谁所有
-L/--dereference不建立符号链接,直接复制该链接所指向的原始文件
-l/--link以硬链接的方式取代复制文件,可在 copy-pass 模式下运用
-s/--swap-bytes交换每对字节的内容(处理跨平台字节序差异时使用)
-S/--swap-halfwords交换每半个字(2 字节)的内容
-b/--swap此参数效果与同时指定-s相同(原文档写作--awap,应为--swap的笔误)
-n/--numeric-uid-gid配合-tv参数列出备份档内容时,以用户识别码和群组识别码替代拥有者与群组名称

过滤与兼容性

选项说明
-0/--null接受新增列控制字符,通常配合 find 指令的-print0参数使用,可正确处理文件名中的空格与换行
-E<范本文件>/--pattern-file=<范本文件>指定范本文件,内含一个或多个范本样式,让 cpio 只解开符合范本条件的文件;格式为每列一个范本样式
-f/--nonmatching让 cpio 解开所有不符合范本条件的文件(与-E互补)
-A/--append附加到已存在的备份文档中;该备份文档必须存放在磁盘上,而不能放置于磁带机里
-M<回传信息>/--message=<回传信息>设置更换保存媒体的提示信息(多卷归档时使用)
-k此参数将被忽略不予处理,仅用于解决 cpio 不同版本间的兼容性问题
--quiet不显示复制了多少区块
--help在线帮助
--version显示版本信息

为什么 cpio 必须与 find 配合

原文档明确指出:cpio 无法直接读取文件,它需要每个文件或者目录的完整路径名才能识别读取,而find命令的输出恰好提供了这一路径清单。因此 cpio 的典型用法永远是管道组合:

find <起始路径> <条件> | cpio <选项> ...

这里有三个值得注意的细节:

  1. 路径语义决定还原位置:cpio 打包时记录的是 find 输出的路径。若 find 给出的路径以/开头(绝对路径),还原时会自动恢复到这些绝对路径下;若给出的是相对路径,还原时也会恢复到相对路径下(详见下一节实例)。
  2. 特殊字符安全:文件名含空格或换行时,应改用find -print0配合cpio -0,避免路径被错误拆分成多行。
  3. 职责分工清晰:find负责"筛选哪些文件",cpio 负责"把这些文件装进归档/取出归档",两者通过管道解耦,可以灵活组合出"只备份普通文件""排除某类文件""按修改时间备份"等各种策略。

实战实例:备份、查验与还原

实例 1:备份/etc下所有普通文件

find /etc -type f | cpio -ocvB > /opt/etc.cpio
  • find /etc -type f列出/etc下所有普通文件(不含目录与特殊文件);
  • -o进入 copy-out 模式,-c使用 ASCII 格式,-v详细显示,-B使用 5120 字节区块;
  • 输出重定向到/opt/etc.cpio生成备份档。

实例 2:将系统所有资料备份到磁带机

find / -print | cpio -covB > /dev/st0

/dev/st0是磁带设备名,代表 SCSI 磁带机。这里使用find / -print遍历整个根文件系统,属于全量备份的经典写法;-c、-o、-v、-B的含义同上。

实例 3:查看磁带机上的备份内容

cpio -icdvt < /dev/st0 > /tmp/st_content
  • -i进入 copy-in 模式,-t表示仅列出内容而不实际解包,-c匹配 ASCII 格式,-d允许在列表时建立目录结构,-v详细输出;
  • 当备份文件过多、一屏无法显示完毕时,将输出重定向到/tmp/st_content文件,再分页查看。

实例 4:还原实例 1 的备份包并覆盖同名文件

cpio -icduv < /opt/etc.cpio

-u(无条件覆盖)保证即使目的位置已有同名文件,也不询问直接覆盖;-d自动重建缺失的目录层级;-v显示还原过程。

实例 5:copy-pass 直通复制(原文档模式的补充实战)

find . -depth -print | cpio -pdm /opt/mirror

-p进入 copy-pass 模式,跳过归档文件直接复制到目的目录,-d自动建目录,-m保留修改时间。该模式适合在同机不同目录间做"免中间归档"的同步复制。

绝对路径与相对路径的还原行为

原文档特别强调了一个极易踩坑的行为:cpio 打包时记录什么路径,还原时就恢复到什么路径。

  • 若打包时 find 给出的是绝对路径(如find /etc -type f),还原时文件会自动恢复到这些绝对路径下。实例 4 中cpio -icduv < /opt/etc.cpio会把备份文件全部还原到/etc路径下对应的目录中——因此执行还原通常需要 root 权限或对目标目录的写权限。
  • 若打包时用的是相对路径(如在目录内执行find . -type f),还原时也将恢复到相对路径下,即相对当前工作目录解包。

这一特性在 ZeroTermux 的 Android 环境中同样适用:对/data/data/com.termux下的用户目录做备份时,务必先规划好路径语义,避免还原时把文件散落到意外位置。若需要"解到指定目录",可在 copy-in 模式中使用-R指定拥有者,或先cd到目标目录再以相对路径解包(结合--no-absolute-filenames可强制相对路径行为)。

在 ZeroTermux 中查阅这份手册

这份 cpio.md 并不是孤立的文本,它是 ZeroTermux 内置"命令手册"体系的一员,存放在 app/src/main/assets/cmd 目录下(同目录还收录了rpm2cpio.md、dd.md、tar相关手册等数百个命令文档,dd.md中甚至明确建议"文件系统备份优先使用 tar、cpio 等命令")。

从源码可以还原出它的完整调用链:

  1. 入口:在 TermuxActivity 的浮窗(BoomWindow.java)中点击"命令"按钮,创建并弹出CommandDialog。
  2. 加载列表:CommandDialog.java 的initData()通过AssetManager.list("cmd")枚举 assets 中全部.md手册,并支持在 搜索过滤逻辑 中按关键字实时筛选命令名。
  3. 渲染展示:showCmdDetail() 打开cmd/cpio.md文件流,使用 flexmark 的Parser解析 Markdown,再由HtmlRenderer渲染为 HTML,最终通过 WebView 展示(WebView 已开启单列排版与缩放支持,见 initViewDialog)。

也就是说,你在 ZeroTermux 终端浮窗中看到的这份 cpio 手册,本质上就是本文所依据的同一份 Markdown 文档的在线渲染版。理解这一机制后,你也可以自行查看 cmd 目录 下其他命令手册,获得同样的"语法—选项—实例"完整参考。

总结与选型建议

cpio 与 tar 同为经典归档工具,但侧重点不同:cpio 与 find 管道配合灵活,对特殊文件(设备文件、符号链接、硬链接)的处理能力更强,且天然支持按任意条件筛选文件;tar 则胜在自带文件遍历能力和更广泛的生态兼容。在 ZeroTermux 的日常使用中,cpio 适合做"精确到文件集合"的定向备份与迁移,例如备份指定目录、打包后校验(CRC 格式配合--only-verify-crc)、以及通过磁带/远程设备做多卷归档。掌握本文的三种模式、选项语义与路径还原规则,即可安全、高效地把它纳入自己的备份工具箱。

  • 移动开发
  • 开发工具

【免费下载链接】ZeroTermux

项目地址:https://gitcode.com/GitHub_Trending/ze/ZeroTermux
点击查看免费下载

相关推荐

上一篇:G6 扩展机制完全指南:注册、使用与获取自定义扩展
下一篇:STranslate终极指南:5分钟掌握免费截图翻译神器

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询