1. 命令简介
dpkg‑split 是 Debian Linux 及其衍生发行版(如 Ubuntu)中的一个工具,用于将大型 Debian 软件包(.deb 文件)分割成多个较小的文件,以便于存储或传输(例如通过容量受限的介质)。同时,该工具也支持将已分割的文件重新合并为原始的完整软件包。
2. 语法格式
bash
运行
dpkg-split [选项]... [操作] [参数]...基本操作模式:
-s, --split 完整软件包 [前缀]:执行分割操作。 -j, --join 分块文件模式...:执行合并操作。 -I, --info 分块文件...:显示分块文件的详细信息。 -l, --listq:列出等待合并的分块文件队列。 -a, --auto 分块文件...:自动将分块文件排队并尝试自动合并。 -Q, --npquiet:当执行 --auto 操作但队列未形成完整包时,不显示警告信息。 --depotdir 目录:指定用于存放排队分块文件的目录(默认为 /var/lib/dpkg)。
3. 常用选项及说明
表格
| 选项 | 长格式 | 说明 |
|---|---|---|
| -S 尺寸 | --partsize 尺寸 | 设置分割后每个分块文件的最大尺寸(单位:字节)。支持 k, M, G 后缀(分别代表 KiB, MiB, GiB)。默认值为 450 MiB (450 * 1024 * 1024 字节)。 |
| -o 文件 | --output 文件 | 指定输出文件。在 --split 模式下,指定的是分块文件名的前缀;在 --join 模式下,指定的是合并后完整软件包的文件名。 |
| -s 完整包 | --split 完整包 | 将指定的完整 .deb 软件包分割成多个分块文件。 |
| -j 模式 | --join 模式 | 将匹配指定 shell 通配符模式的所有分块文件合并成一个完整的软件包。 |
| -I 分块文件 | --info 分块文件 | 显示指定分块文件的详细信息,包括包名、版本、分块数量、当前分块序号、总大小等。 |
| -l | --listq | 列出当前在合并队列中等待的分块文件信息。 |
| -a 分块文件 | --auto 分块文件 | 将一个或多个分块文件放入自动合并队列。如果队列中凑齐了某个包的所有分块,则自动合并并生成完整包。 |
| -Q | --npquiet | 与 --auto 联用,当分块文件被加入队列但未触发自动合并时,不输出警告信息。 |
| -d, -dscard | --discard | 已弃用。此选项在旧文档中可能被提及,用于 “丢弃不匹配的部分”,但在现代 dpkg‑split 版本中已无实际作用或已被移除。合并操作会自动验证分块是否属于同一个包。 |
| -?, -h | --help | 显示帮助信息。 |
| --version | 显示版本信息。 |
4. 示例用法
4.1 分割软件包
将 large‑package.deb 分割成多个最大为 460 KiB 的分块文件。
bash
运行
dpkg-split -S 460k -s large-package.deb执行后,会生成类似 large‑package.deb.1of3, large‑package.deb.2of3 的文件。
4.2 指定输出前缀分割
分割 bigapp_1.0_all.deb,并指定分块文件的前缀为 bigapp‑part。
bash
运行
dpkg-split -s bigapp_1.0_all.deb -o bigapp-part将生成 bigapp‑part.1ofN, bigapp‑part.2ofN 等文件。
4.3 合并分块文件
将当前目录下所有以 foo 开头的分块文件合并。
bash
运行
dpkg-split -j "foo*"或者明确指定所有分块文件:
bash
运行
dpkg-split -j foo.deb.1of3 foo.deb.2of3 foo.deb.3of34.4 显示分块文件信息
查看一个分块文件的元数据。
bash
运行
dpkg-split -I large-package.deb.1of3输出示例:
plaintext
Package: large-package Version: 1.0-1 ... File: large-package.deb Part: 1 of 3 Length: 471040 bytes ...4.5 使用自动合并队列
将分块文件放入队列,系统会在集齐所有分块时自动合并。
bash
运行
dpkg-split -a large-package.deb.1of3 dpkg-split -a large-package.deb.2of3 # 当放入第三个分块时,会自动触发合并 dpkg-split -a large-package.deb.3of3合并后的完整包默认保存在 /var/lib/dpkg 目录下。
4.6 查看合并队列
列出当前在等待合并队列中的所有分块。
bash
运行
dpkg-split -l5. 注意事项
分块命名规则:默认生成的分块文件名为 原始包名.NofM,其中 N 是当前分块序号,M 是总分块数。合并时依赖此命名中的元信息,但使用 -j 通配符合并时,工具会读取每个分块文件内部的元数据来确保正确性,因此重命名分块文件通常不会影响合并。
完整性验证:在合并时,dpkg‑split 会校验所有分块的 MD5 校验和,确保数据完整且来自同一个原始软件包。
权限与目录:使用 --auto 操作需要将分块文件放入系统队列目录(默认 /var/lib/dpkg),这通常需要 root 权限。手动 --split 和 --join 操作在用户目录下进行则无需特殊权限。
使用场景:该工具主要用于处理非常罕见的、超过单个存储介质容量的大型软件包,或者用于通过限制大小的传输通道分发软件包。在现代高速网络和大容量存储环境下,其使用频率较低,但在特定场景中仍然有用。
分块大小选择:设置分块大小时,应考虑到目标介质的容量限制(如 CD‑ROM、USB 驱动器或网络传输包大小),但避免设置过小导致分块数量过多,影响管理效率。
Linux 学习资料 https://pan.baidu.com/s/1A6qqBk2ViE_Le2cQjSowkQ?pwd=7uz8