dpkg命令

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 是底层包管理工具,而 aptapt-get 是构建在 dpkg 之上的高级工具:

  • dpkg 不自动解决依赖关系,而 APT 会
  • dpkg 只处理本地.deb 文件,而 APT 可以从仓库下载
  • dpkg 提供更底层的控制,而 APT 提供更方便的用户界面
  • 通常建议使用 APT,除非需要 dpkg 的特定功能

提示 #

  • 使用 aptapt-get 而不是 dpkg 来安装包,以自动处理依赖关系
  • 使用 dpkg -l | grep '^rc' 可以找出已移除但配置文件仍存在的包
  • 使用 dpkg -L package_name | grep bin 可以快速找出包安装的可执行文件
  • 在修复损坏的系统时,dpkg --configure -a 是一个重要的命令
  • 使用 dpkg-query 可以以更灵活的方式查询包数据库
  • 在安装新的.deb 文件前,先用 dpkg -I 检查其依赖关系
  • 使用 dpkg-divert 可以覆盖包文件的位置,这对于防止包更新覆盖修改过的文件很有用
  • 使用 dpkg-statoverride 可以覆盖文件的所有权和权限