dpkg 是 Debian Linux 及其衍生系统(如 Ubuntu、Linux Mint 等)的核心包管理工具,它的主要作用是安装、删除、管理和查询本地的 .deb 软件包文件。

一个非常重要的概念是:dpkg 本身不处理依赖关系,它只负责将软件包文件解压并安装到系统中,如果安装的软件包依赖其他软件包,而这些依赖项又没有安装,dpkg 会直接报错,并停止安装过程。
在实际使用中,我们通常会用 apt 或 apt-get 这样的高级工具来处理依赖关系,它们会自动从软件源中下载并安装所需的依赖包,然后再调用 dpkg 来完成最终的安装。
dpkg 命令的基本用法
dpkg 的基本语法是 dpkg [选项] <操作>
下面我们按照常用场景来分类介绍。

安装软件包
这是最常见的用法,使用 -i 或 --install 选项。
sudo dpkg -i package_file.deb
示例:
# 安装一个名为 google-chrome-stable 的 .deb 文件 sudo dpkg -i google-chrome-stable_current_amd64.deb
⚠️ 重要提示:依赖问题 如果执行此命令时遇到依赖错误,
dpkg: 依赖关系问题使得 configure-not-possible 操作不能完成:
google-chrome-stable 依赖 libxss1:amd64 (>= 1:1.1.4)
google-chrome-stable 依赖 libappindicator3-1
google-chrome-stable 依赖 libasound2 (>= 1.0.17)
这意味着 dpkg 无法找到这些必需的库文件。正确的解决方法不是用 dpkg 强制安装,而是使用 apt 来修复依赖:

# 1. 使用 apt 安装这个 .deb 文件,apt 会自动处理依赖 sudo apt install ./google-chrome-stable_current_amd64.deb # 如果上面的命令也报错(因为软件源可能没有这个包),可以分两步: # 2. 先告诉 dpkg 不要关心依赖关系(只是记录一下,不实际安装) sudo dpkg -i --force-depends google-chrome-stable_current_amd64.deb # 3. 然后使用 apt 的 --fix-broken 选项来自动下载并安装缺失的依赖项 sudo apt install -f
sudo apt install -f 是修复 dpkg 破坏状态的神器,强烈记住它。
删除软件包
使用 -r 或 --remove 选项来删除软件包,但会保留其配置文件。
sudo dpkg -r package_name
示例:
# 删除名为 "vim" 的软件包,但保留 /etc/vim/vimrc 等配置文件 sudo dpkg -r vim
使用 --purge 选项可以彻底删除软件包及其所有配置文件。
sudo dpkg --purge package_name
示例:
# 彻底删除 "vim" 软件包,包括其所有配置文件 sudo dpkg --purge vim
查询已安装的软件包
查询功能非常强大,可以帮助你了解系统上安装了哪些软件。
a. 列出所有已安装的软件包
dpkg -l # 或者 dpkg --list
输出结果是一个三列列表:
- 第一列:状态标记(
ii表示完全安装)。 - 第二列:软件包的架构(
amd64)。 - 第三列:软件包的名称。
b. 查看软件包的详细信息
使用 -s 或 --status 选项。
dpkg -s package_name
示例:
dpkg -s git
输出会显示软件包的版本、架构、维护者、依赖关系、摘要等信息。
c. 查看软件包安装了哪些文件
使用 -L 或 --listfiles 选项。
dpkg -L package_name
示例:
dpkg -L git
它会列出 git 软件包在系统中安装的所有文件和目录的完整路径。
d. 查找某个文件属于哪个软件包
使用 -S 或 --search 选项。
dpkg -S file_path
示例:
# 查找 /usr/bin/git 这个文件是由哪个软件包安装的 dpkg -S /usr/bin/git
输出结果通常是:git: /usr/bin/git
重新配置软件包
如果你在安装软件包后需要修改其配置(修改数据库连接、端口号等),可以使用 reconfigure。
sudo dpkg-reconfigure package_name
经典示例:
# 重新配置时区 sudo dpkg-reconfigure tzdata # 重新配置 locales (语言环境) sudo dpkg-reconfigure locales
这个命令会启动一个交互式向导,让你重新设置软件包的配置。
管理 .deb 文件本身
a. 解包 .deb 文件
如果你想查看 .deb 文件内部的结构,可以使用 -X 选项。
dpkg -X package_file.deb /path/to/extract/to
示例:
# 将 google-chrome-stable_current_amd64.deb 的内容解压到当前目录下的 chrome 文件夹中 mkdir chrome dpkg -X google-chrome-stable_current_amd64.deb ./chrome
b. 控制信息
查看 .deb 文件的控制信息(如版本、依赖、描述等)。
dpkg -I package_file.deb # 或者 dpkg --info package_file.deb
dpkg vs. apt 的总结
| 特性 | dpkg |
apt / apt-get |
|---|---|---|
| 主要功能 | 底层工具,直接操作 .deb 文件 |
高级工具,管理软件仓库和依赖关系 |
| 依赖处理 | 不处理依赖,依赖不满足时会直接失败。 | 自动处理依赖,会从软件源下载并安装所有必需的依赖包。 |
| 软件源 | 只使用本地文件系统中的 .deb 文件。 |
从 /etc/apt/sources.list 中定义的远程软件仓库下载。 |
| 主要用途 | 安装本地的 .deb 文件。查询、删除、配置已安装的软件包。 |
从仓库搜索、安装、更新软件。 系统升级 ( upgrade, dist-upgrade)。修复依赖问题 ( install -f)。 |
| 常用场景 | apt 下载了 .deb 文件但安装失败;你手动下载了一个特定版本的 .deb 文件。 |
日常的软件安装、更新、删除。 |
常用命令速查表
| 功能 | 命令 |
|---|---|
安装本地 .deb 文件 |
sudo dpkg -i package.deb |
| 删除软件包(保留配置) | sudo dpkg -r package_name |
| 彻底删除软件包(含配置) | sudo dpkg --purge package_name |
| 列出所有已安装包 | dpkg -l |
| 查看已安装包的状态 | dpkg -s package_name |
| 查看已安装包的文件列表 | dpkg -L package_name |
| 查找文件属于哪个包 | dpkg -S /path/to/file |
| 重新配置软件包 | sudo dpkg-reconfigure package_name |
| 修复依赖问题 | sudo apt install -f |
查看 .deb 文件信息 |
dpkg -I package.deb |
希望这份详细的指南能帮助你更好地理解和使用 dpkg 命令!
