dpkg 命令 #
dpkg
(Debian Package)是 Debian 及其衍生发行版(如 Ubuntu)的底层包管理工具,用于安装、构建、移除和管理.deb 软件包。它是 APT(Advanced Package Tool)的基础,但不像 APT 那样能自动处理依赖关系。
语法 #
dpkg [选项] 操作
常用操作 #
操作 | 描述 |
---|---|
-i, --install |
安装包 |
-r, --remove |
移除包,但保留配置文件 |
-P, --purge |
完全移除包及其配置文件 |
-l, --list |
列出所有已安装的包 |
-s, --status |
显示包的状态信息 |
-S, --search |
搜索包含指定文件的包 |
-L, --listfiles |
列出包安装的所有文件 |
-c, --contents |
列出包文件的内容 |
-I, --info |
显示包文件的信息 |
-x, --extract |
从包文件中提取文件 |
-X, --vextract |
提取文件并显示文件名 |
-b, --build |
从源目录构建包 |
--configure |
配置未配置或配置失败的包 |
--get-selections |
获取包选择状态列表 |
--set-selections |
设置包选择状态 |
--update-avail |
更新可用包信息 |
--merge-avail |
合并可用包信息 |
--clear-avail |
清除可用包信息 |
--forget-old-unavail |
忘记不可用的包 |
常用选项 #
选项 | 描述 |
---|---|
--force-all |
忽略所有问题(谨慎使用) |
--force-depends |
忽略依赖问题 |
--force-overwrite |
覆盖一个包中的文件与另一个包中的文件 |
--force-confmiss |
安装缺失的配置文件 |
--force-confnew |
总是使用新的配置文件 |
--force-confold |
总是使用旧的配置文件 |
--ignore-depends=包名 |
忽略指定包的依赖关系 |
--no-act |
仅测试,不实际执行 |
--recursive |
递归处理匹配的目录 |
-D, --debug=级别 |
设置调试级别 |
-R, --root=目录 |
使用另一个根目录 |
--admindir=目录 |
使用另一个管理目录 |
--instdir=目录 |
使用另一个安装目录 |
常见用法 #
1. 安装包 #
dpkg -i package.deb
这将安装指定的.deb 包文件。
2. 安装多个包 #
dpkg -i package1.deb package2.deb
3. 移除包 #
dpkg -r package_name
这将移除包,但保留配置文件。
4. 完全移除包及其配置 #
dpkg -P package_name
5. 列出所有已安装的包 #
dpkg -l
6. 列出匹配特定模式的包 #
dpkg -l 'pattern*'
例如:
dpkg -l 'nginx*'
7. 查看包的状态 #
dpkg -s package_name
8. 查找特定文件属于哪个包 #
dpkg -S /path/to/file
例如:
dpkg -S /usr/bin/python
9. 列出包安装的所有文件 #
dpkg -L package_name
10. 查看.deb 包文件的内容 #
dpkg -c package.deb
11. 查看.deb 包文件的信息 #
dpkg -I package.deb
12. 从.deb 包中提取文件 #
dpkg -x package.deb directory
这将把包中的文件提取到指定目录。
13. 配置未配置的包 #
dpkg --configure package_name
14. 配置所有未配置的包 #
dpkg --configure -a
这在安装中断后特别有用。
15. 获取所有包的选择状态 #
dpkg --get-selections > packages.list
16. 设置包的选择状态 #
dpkg --set-selections < packages.list
这对于在多个系统上复制相同的包集合很有用。
高级用法 #
1. 忽略依赖问题强制安装 #
dpkg --force-depends -i package.deb
这将强制安装包,即使它有未满足的依赖关系(不推荐)。
2. 覆盖文件冲突 #
dpkg --force-overwrite -i package.deb
这将允许包覆盖另一个包中的文件。
3. 使用新的配置文件 #
dpkg --force-confnew -i package.deb
这将在配置文件冲突时使用新的配置文件。
4. 保留旧的配置文件 #
dpkg --force-confold -i package.deb
这将在配置文件冲突时保留旧的配置文件。
5. 仅测试不实际执行 #
dpkg --no-act -i package.deb
这将模拟安装过程,但不会实际安装。
6. 从源目录构建包 #
dpkg -b source_directory [.deb文件]
这将从源目录构建一个.deb 包。
7. 在另一个根目录下操作 #
dpkg --root=/mnt -i package.deb
这对于修复另一个系统很有用。
8. 查看包的依赖关系 #
dpkg-deb --field package.deb Depends
9. 重新配置包 #
dpkg-reconfigure package_name
这将重新配置已安装的包。
包状态标记 #
在dpkg -l
输出中,每个包前面有状态标记:
-
第一个字符(期望状态):
u
: 未知i
: 安装r
: 移除p
: 清除h
: 保持
-
第二个字符(当前状态):
n
: 未安装i
: 已安装c
: 仅配置文件u
: 已解包但未配置f
: 配置失败h
: 半安装
-
第三个字符(错误标志):
空
: 无错误r
: 重新安装需要x
: 标记为移除但仍有配置文件
例如:
ii
: 已正确安装rc
: 已移除但配置文件仍存在un
: 未知(未安装)
配置文件 #
dpkg 的主要配置文件和目录:
/var/lib/dpkg/
:dpkg 数据库目录/var/lib/dpkg/status
:已安装包的状态信息/var/lib/dpkg/available
:可用包信息/var/lib/dpkg/info/
:包安装脚本和文件列表/etc/dpkg/dpkg.cfg
:dpkg 配置文件/etc/dpkg/dpkg.cfg.d/
:dpkg 配置目录
与 APT 的关系 #
dpkg
是底层包管理工具,而 apt
和 apt-get
是构建在 dpkg
之上的高级工具:
dpkg
不自动解决依赖关系,而 APT 会dpkg
只处理本地.deb 文件,而 APT 可以从仓库下载dpkg
提供更底层的控制,而 APT 提供更方便的用户界面- 通常建议使用 APT,除非需要
dpkg
的特定功能
提示 #
- 使用
apt
或apt-get
而不是dpkg
来安装包,以自动处理依赖关系 - 使用
dpkg -l | grep '^rc'
可以找出已移除但配置文件仍存在的包 - 使用
dpkg -L package_name | grep bin
可以快速找出包安装的可执行文件 - 在修复损坏的系统时,
dpkg --configure -a
是一个重要的命令 - 使用
dpkg-query
可以以更灵活的方式查询包数据库 - 在安装新的.deb 文件前,先用
dpkg -I
检查其依赖关系 - 使用
dpkg-divert
可以覆盖包文件的位置,这对于防止包更新覆盖修改过的文件很有用 - 使用
dpkg-statoverride
可以覆盖文件的所有权和权限