Ubuntu 系统 dpkg 命令使用详解

本文介绍了Debian及其衍生系统中dpkg命令的使用方法,包括安装、卸载软件包,查看软件包信息等实用技巧。

dpkg 即 package manager for Debian ,是 Debian 和基于 Debian 的系统中一个主要的包管理工具,可以用来安装、构建、卸载、管理 deb 格式的软件包。

安装软件

使用 dpkg 命令安装软件时,可以使用 -i 选项并指定 deb 安装包的路径。和 Ubuntu 下的另一个包管理工具 apt-get(Advanced Package Tool)有所不同。
apt-get 命令并不直接操作 deb 安装包文件,而是从 /etc/apt/sources.list 配置文件中定义的软件镜像源里下载软件包并安装,使用时也只需指定软件的名称(或者也可以附加上版本号)。

apt-get 命令安装软件:
$ apt-get install <package_name[=version]>

dpkg 命令安装软件:
$ dpkg -i <package_file_path>

因此,dpkg 主要是用来安装已经下载到本地的 deb 软件包,或者对已经安装好的软件进行管理。而 apt-get 可以直接从远程的软件仓库里下载安装软件。

$ sudo apt-get install emacs
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
  emacs-bin-common emacs-common emacs-el emacs-gtk libm17n-0
  libotf0 m17n-db
建议安装:
  mailutils emacs-common-non-dfsg m17n-docs gawk
下列【新】软件包将被安装:
  emacs emacs-bin-common emacs-common emacs-el emacs-gtk libm17n-0
  libotf0 m17n-db
升级了 0 个软件包,新安装了 8 个软件包,要卸载 0 个软件包,有 115 个软件包未被升级。
需要下载 34.4 MB 的归档。
解压缩后会消耗 137 MB 的额外空间。
您希望继续执行吗? [Y/n]
$ sudo dpkg -i fping_4.2-1_amd64.deb
(正在读取数据库 ... 系统当前共安装有 252654 个文件和目录。)
准备解压 fping_4.2-1_amd64.deb  ...
正在解压 fping (4.2-1) 并覆盖 (4.2-1) ...
正在设置 fping (4.2-1) ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...
列出已安装的软件

可以使用 dpkg -l 命令列出当前系统中已经安装的软件以及软件包的状态。如:

$ dpkg -l
期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)
| 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待(W)/触发器未决(T)
|/ 错误?=(无)/须重装(R) (状态,错误:大写=故障)
||/ 名称                                          版本                                体系结构     描述
+++-=============================================-===================================-============-===============================================================================
ii  2048-qt                                       0.1.6-1build1                       amd64        mathematics based puzzle game
ii  accountsservice                               0.6.50-0ubuntu1                     amd64        query and manipulate user account information
ii  acl                                           2.2.53-4                            amd64        access control list - utilities
ii  acpi-support                                  0.143                               amd64        scripts for handling many ACPI events
ii  acpid                                         1:2.0.31-1ubuntu2                   amd64        Advanced Configuration and Power Interface event daemon
ii  adduser                                       3.118ubuntu1                        all          add and remove users and groups
ii  adwaita-icon-theme                            3.32.0-1ubuntu1                     all          default icon theme of GNOME (small subset)
ii  alsa-base                                     1.0.25+dfsg-0ubuntu5                all          ALSA driver configuration files
ii  alsa-utils                                    1.1.8-1ubuntu1                      amd64        Utilities for configuring and using ALSA
...

该命令每行输出中的第一列 ii 表示软件包的安装和配置状态,其格式如下:
期望状态|当前状态|错误
其中期望状态有以下几种

  • u:即 unknown,软件包未安装且用户未请求安装
  • i:即 install,用户请求安装该软件包
  • r:即 remove,用户请求卸载该软件包
  • p:即 purge,用户请求卸载该软件包并清理配置文件
  • h:即 hold,用户请求保持续当前软件包版本

当前状态 有以下几种:

  • n:即 not-installed,软件包未安装
  • i:即 installed,软件包已安装并完成配置
  • c:即 config-files,软件包已经被卸载,但是其配置文件未清理
  • u:即 unpacked,软件包已经被解压缩,但还未配置
  • f:即 half-configured,配置软件包时出现错误
  • w:即 triggers-awaited,触发器等待
  • t:即 triggers-pending,触发器未决

错误状态 有以下几种:

  • h:软件包被强制保持
  • r:即 reinstall-required,需要卸载并重新安装
  • x:软件包被破坏

因此 ii 表示该软件需要安装且已经安装,没有出现错误;
iu 表示已经安装该软件,但未正确配置;
rc 表示该软件已经被删除,但配置文件未清理。

查看处于 rc 状态的软件包:

$ dpkg -l | grep ^rc
rc  libmhash2:amd64                               0.9.9.9-7                           amd64        Library for cryptographic hashing and message authentication
rc  linux-image-5.0.0-13-generic                  5.0.0-13.14                         amd64        Signed kernel image generic
rc  linux-modules-5.0.0-13-generic                5.0.0-13.14                         amd64        Linux kernel extra modules for version 5.0.0 on 64 bit x86 SMP
rc  linux-modules-extra-5.0.0-13-generic          5.0.0-13.14                         amd64        Linux kernel extra modules for version 5.0.0 on 64 bit x86 SMP
rc  zabbix-proxy-mysql                            1:4.0.4+dfsg-1                      amd64        network monitoring solution - proxy (using MySQL)

此外,还可以使用 dpkg -l <package_name_pattern> 命令筛选出名称中包含指定模式的软件包。

$ dpkg -l "nginx*"
期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)
| 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待(W)/触发器未决(T)
|/ 错误?=(无)/须重装(R) (状态,错误:大写=故障)
||/ 名称           版本            体系结构     描述
+++-==============-===============-============-=========================================================
ii  nginx          1.15.9-0ubuntu1 all          small, powerful, scalable web/proxy server
ii  nginx-common   1.15.9-0ubuntu1 all          small, powerful, scalable web/proxy server - common files
ii  nginx-core     1.15.9-0ubuntu1 amd64        nginx web/proxy server (standard version)
un  nginx-doc      <>            <>         (无描述)
un  nginx-extras   <>            <>         (无描述)
un  nginx-full     <>            <>         (无描述)
un  nginx-light    <>            <>         (无描述)
卸载软件

dpkg 命令的 -r 选项可以用来卸载已安装的软件包,此时只需要指定软件的名称即可。

$ sudo dpkg -r vim
(正在读取数据库 ... 系统当前共安装有 252653 个文件和目录。)
正在卸载 vim (2:8.1.0320-1ubuntu3.1) ...
update-alternatives: 使用 /usr/bin/vim.tiny 来在自动模式中提供 /usr/bin/vi (vi)
update-alternatives: 使用 /usr/bin/vim.tiny 来在自动模式中提供 /usr/bin/view (view)
update-alternatives: 使用 /usr/bin/vim.tiny 来在自动模式中提供 /usr/bin/ex (ex)
update-alternatives: 使用 /usr/bin/vim.tiny 来在自动模式中提供 /usr/bin/rview (rview)

需要注意的是,-r 选项只会移除指定的软件包而不对其配置文件产生影响,可以使用 -P 选项在删除软件包的同时清理配置文件。
sudo dpkg -P <package>

其他包管理操作
查看软件包的内容

dpkg -c <package_file_path>

$ dpkg -c fping_4.2-1_amd64.deb
drwxr-xr-x root/root         0 2019-02-20 06:27 ./
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/bin/
-rwxr-xr-x root/root     52128 2019-02-20 06:27 ./usr/bin/fping
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/share/
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/share/bug/
-rwxr-xr-x root/root       118 2017-06-19 05:19 ./usr/share/bug/fping
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/share/doc/
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/share/doc/fping/
-rw-r--r-- root/root       495 2017-09-06 08:00 ./usr/share/doc/fping/NEWS.Debian.gz
-rw-r--r-- root/root      1615 2019-02-20 06:27 ./usr/share/doc/fping/changelog.Debian.gz
-rw-r--r-- root/root      3445 2017-12-07 04:09 ./usr/share/doc/fping/copyright
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/share/lintian/
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/share/lintian/overrides/
-rw-r--r-- root/root        41 2017-06-19 05:19 ./usr/share/lintian/overrides/fping
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/share/man/
drwxr-xr-x root/root         0 2019-02-20 06:27 ./usr/share/man/man8/
-rw-r--r-- root/root      5733 2019-02-20 06:27 ./usr/share/man/man8/fping.8.gz
-rw-r--r-- root/root      1512 2019-02-20 06:27 ./usr/share/man/man8/fping6.8.gz
lrwxrwxrwx root/root         0 2019-02-20 06:27 ./usr/bin/fping6 -> fping
查看软件包(已安装)的详细信息

dpkg -s <package>dpkg --status <package>

$ dpkg -s fping
Package: fping
Status: deinstall ok installed
Priority: optional
Section: net
Installed-Size: 87
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 4.2-1
Depends: libcap2-bin, netbase, libc6 (>= 2.15)
Enhances: netdata (>= 1.5)
Description: sends ICMP ECHO_REQUEST packets to network hosts
 fping is a ping like program which uses the Internet Control Message Protocol
 (ICMP) echo request to determine if a target host is responding.  fping
 differs from ping in that you can specify any number of targets on the command
 line, or specify a file containing the lists of targets to ping.  Instead of
 sending to one target until it times out or replies, fping will send out a
 ping packet and move on to the next target in a round-robin fashion.
Original-Maintainer: Axel Beckert <abe@debian.org>
Homepage: https://www.fping.org/
查看软件包的安装位置

dpkg -L <package>dpkg --list-files <package>

$ dpkg -L fping
/.
/usr
/usr/bin
/usr/bin/fping
/usr/share
/usr/share/bug
/usr/share/bug/fping
/usr/share/doc
/usr/share/doc/fping
/usr/share/doc/fping/NEWS.Debian.gz
/usr/share/doc/fping/changelog.Debian.gz
/usr/share/doc/fping/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/fping
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/fping.8.gz
/usr/share/man/man8/fping6.8.gz
/usr/bin/fping6
筛选出包含指定文件(模式)的软件包

dpkg -S <filename_pattern>dpkg --search <filename_pattern>

$ dpkg -S sites-available
apache2: /etc/apache2/sites-available/default-ssl.conf
apache2: /etc/apache2/sites-available/000-default.conf
nginx-common: /etc/nginx/sites-available
nginx-common: /etc/nginx/sites-available/default
apache2: /etc/apache2/sites-available
参考资料

15 Practical Examples of “dpkg commands” for Debian Based Distros
Linux软件安装管理之——dpkg与apt-*详解

      </div>
03-21
### dpkg 使用方法及常见问题解决方案 #### 一、dpkg 工具简介 `dpkg` 是 Debian 及其衍生发行版(如 Ubuntu)中的核心包管理系统之一,用于处理 `.deb` 软件包的安装、卸载和管理。它提供了低级别的操作接口,通常由更高级别的工具(如 `apt-get` 或 `apt`) 调用。 --- #### 二、常用命令及其功能 以下是 `dpkg` 的一些基本命令: 1. **安装软件包** 安装指定路径下的 `.deb` 文件。 ```bash sudo dpkg -i package_name.deb ``` 2. **删除软件包** 删除已安装的软件包,但保留配置文件。 ```bash sudo dpkg -r package_name ``` 3. **完全删除软件包** 删除已安装的软件包以及其配置文件。 ```bash sudo dpkg --purge package_name ``` 4. **查询已安装的软件列表** 列出当前系统上所有通过 `dpkg` 安装的软件包。 ```bash dpkg -l ``` 5. **查找特定软件的信息** 显示某个具体软件包的详细信息。 ```bash dpkg -s package_name ``` 6. **强制覆盖文件冲突** 当遇到文件冲突时,可以通过此选项强行安装。 ```bash sudo dpkg -i --force-overwrite package_name.deb ``` 7. **重新配置未完成的安装** 如果某些软件包因中断等原因未能正确安装,可以使用命令修复。 ```bash sudo dpkg --configure -a ``` --- #### 三、常见问题及解决方案 ##### 1. 错误:`dpkg frontend is locked by another process` 当多个程序试图同时访问 `dpkg` 数据库时可能会发生锁定错误。解决办法如下: - 查找持有锁文件的进程 ID 并终止它: ```bash lsof /var/lib/dpkg/lock-frontend && sudo kill -9 PID ``` - 删除锁文件并重新配置 `dpkg`: ```bash sudo rm /var/lib/dpkg/lock-frontend sudo dpkg --configure -a ``` 上述过程解决了由于其他进程占用而导致的前端被锁定的问题[^1]。 ##### 2. 错误:缺少依赖项导致安装失败 有时尝试安装 `.deb` 包会因为缺失依赖而失败。此时应先检查依赖关系再解决问题: - 手动解析依赖关系并通过 `apt-get` 进行安装; - 或者直接运行以下命令自动修复依赖: ```bash sudo apt-get -f install ``` 这一步骤能够帮助恢复系统的正常状态[^2]。 ##### 3. 错误:无法找到可安装的候选版本 如果在尝试安装某软件包时报错提示无可用候选项,则需确认是否有匹配名称存在: - 搜索目标库是否存在对应条目: ```bash apt-cache search package_name ``` 之后依据返回结果选取确切命名加以安装即可。 ##### 4. 错误:许可证文件格式不兼容 对于涉及复杂许可声明的应用场景下可能出现此类状况。建议按照官方文档指导调整输入参数或者更新至最新稳定分支版本号来规避潜在风险因素影响[^4]。 ##### 5. 错误:APT 获取过程中遭遇锁争抢异常情况 除了前面提到过的针对单一 deb 文件操作外,在批量下载期间也可能触发相似现象。对此类情形同样适用移除相关联缓存目录内的互斥标志位文件方式予以缓解压力: ```bash sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock ``` 随后再次发起请求流程验证效果如何改善[^5]。 --- ### 四、总结 以上介绍了有关于 debian 类型操作系统环境下运用 dpkg 实现基础维护工作的技巧要点,并列举了几种典型故障排除思路供大家参考学习实践应用当中去不断积累经验提升效率! ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值