Linux dpkg命令介绍
dpkg是Debian Package Manager的缩写,它是一个用来安装、构建、删除和管理Debian软件包的工具。Debian软件包是一种压缩的归档文件,包含了安装程序或服务所需的文件和依赖。这些软件包在系统上存储在一个本地的“仓库”中,可以通过包管理服务在需要时访问。我们使用dpkg命令来与系统上的软件包进行交互。它完全由命令行参数控制,第一个参数被称为动作参数,用来指定要做什么。这个参数可以跟随其他参数或不跟随。后来,一个新的工具aptitude被设计出来,提供了一个更友好、交互式的前端,让用户更容易地管理软件包,而不需要复杂的dpkg命令。它代表用户与dpkg接口进行交互。
Linux dpkg命令适用的Linux版本
dpkg命令主要适用于Debian Linux和其他基于Debian的Linux发行版,如Ubuntu和Linux Mint。如果你使用的是其他类型的Linux,如Red Hat或CentOS,你可能需要使用rpm命令来管理软件包。如果你想在非Debian系统上使用dpkg命令,你可能需要先安装它。例如,在CentOS 7上,你可以使用以下命令来安装dpkg:
[linux@bashcommandnotfound.cn ~]$ sudo yum install dpkg
在CentOS 8上,你可以使用以下命令来安装dpkg:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install dpkg
Linux dpkg命令的基本语法
dpkg命令的基本语法如下:
dpkg [选项] [.deb 软件包名]
dpkg命令提供了很多选项来定制我们接收的数据,或者执行不同的操作。下面是一些最常用的dpkg选项。
选项 | 功能 |
---|---|
-i 或 --install | 使用dpkg命令安装一个软件包。该命令会提取指定软件包的所有控制文件,删除之前安装的旧版本,然后安装新版本到系统上。 |
-r 或 --remove | 从系统上移除一个已安装的软件包。它会删除属于指定软件包的所有文件,除了配置文件。这可以看作是卸载选项。 |
-P 或 --purge | 从系统上完全移除一个已安装的软件包。它会删除属于指定软件包的所有文件,包括配置文件。这可以看作是完全卸载选项。 |
--update-avail | 更新dpkg命令关于可用软件包的信息。如果有新的软件包可用,它们会从官方仓库同步过来。 |
--merge-avail | 合并dpkg命令关于可用软件包的信息,与之前的信息进行比较。 |
-l 或 --list | 列出系统上已安装的所有软件包,或者根据指定的模式进行搜索。 |
-s 或 --status | 显示指定软件包的状态信息,包括版本、架构、描述等。 |
-L 或 --listfiles | 列出属于指定软件包的所有文件。 |
-S 或 --search | 搜索属于哪个软件包的指定文件。 |
-c 或 --contents | 列出指定.deb文件的内容。 |
-f 或 --field | 显示指定软件包或.deb文件的控制字段信息。 |
-e 或 --control | 从指定.deb文件中提取控制文件到指定目录。 |
-x 或 --extract | 从指定.deb文件中提取所有文件到指定目录。 |
-X 或 --vextract | 从指定.deb文件中提取所有文件到指定目录,并显示详细信息。 |
-b 或 --build | 从指定目录中构建一个软件包。 |
-I 或 --info | 显示指定.deb文件的控制字段信息。 |
-f 或 --configure | 配置一个或多个未配置的软件包。 |
--pending | 显示待处理的软件包。 |
--audit | 检查系统上的软件包是否有不一致的状态。 |
--get-selections | 显示系统上的软件包的选择状态。 |
--set-selections | 设置系统上的软件包的选择状态。 |
--clear-selections | 清除系统上的软件包的选择状态。 |
--yet-to-unpack | 显示还未解包的软件包。 |
--pre-invoke | 在执行dpkg命令之前调用指定的命令。 |
--post-invoke | 在执行dpkg命令之后调用指定的命令。 |
--admindir | 指定dpkg命令使用的管理目录。 |
--instdir | 指定dpkg命令使用的安装目录。 |
--root | 指定dpkg命令使用的根目录。 |
--force | 强制执行某些操作,即使有警告或错误。 |
--no-force | 取消强制执行某些操作。 |
--refuse | 拒绝执行某些操作。 |
--no-act | 只显示要执行的操作,而不实际执行。 |
--dry-run | 同--no-act。 |
--simulate | 同--no-act。 |
--log | 指定dpkg命令使用的日志文件。 |
--ignore-depends | 忽略指定软件包的依赖关系。 |
--force-depends | 强制忽略所有软件包的依赖关系。 |
--skip-same-version | 跳过安装与当前版本相同的软件包。 |
--auto-deconfigure | 自动重新配置与要安装的软件包有冲突的软件包。 |
--recursive | 递归地处理指定目录中的所有软件包。 |
--triggers | 处理指定软件包的触发器。 |
-D 或 --debug | 显示调试信息。 |
--help | 显示帮助信息。 |
--version | 显示dpkg命令的版本信息。 |
Linux dpkg命令的实例
下面是一些使用dpkg命令的实例,你可以通过这些实例来学习如何使用dpkg命令来管理软件包。
实例1:安装一个.deb文件
如果你下载了一个.deb文件,你可以使用dpkg -i命令来安装它。例如,如果你下载了一个名为vlc_3.0.16-1_amd64.deb的文件,你可以使用以下命令来安装它:
[linux@bashcommandnotfound.cn ~]$ sudo dpkg -i vlc_3.0.16-1_amd64.deb
你会看到类似以下的输出:
Selecting previously unselected package vlc.
(Reading database ... 235651 files and directories currently installed.)
Preparing to unpack vlc_3.0.16-1_amd64.deb ...
Unpacking vlc (3.0.16-1) ...
Setting up vlc (3.0.16-1) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for desktop-file-utils (0.24-1ubuntu4) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu1) ...
Processing triggers for man-db (2.9.1-1) ...
这表示你已经成功地安装了vlc软件包。
实例2:卸载一个软件包
如果你想卸载一个已安装的软件包,你可以使用dpkg -r命令。例如,如果你想卸载vlc软件包,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo dpkg -r vlc
你会看到类似以下的输出:
(Reading database ... 235655 files and directories currently installed.)
Removing vlc (3.0.16-1) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for desktop-file-utils (0.24-1ubuntu4) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu1) ...
Processing triggers for man-db (2.9.1-1) ...
这表示你已经成功地卸载了vlc软件包,但是它的配置文件仍然保留在系统上。
实例3:完全卸载一个软件包
如果你想完全卸载一个已安装的软件包,包括它的配置文件,你可以使用dpkg -P命令。例如,如果你想完全卸载vlc软件包,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo dpkg -P vlc
你会看到类似以下的输出:
(Reading database ... 235651 files and directories currently installed.)
Removing vlc (3.0.16-1) ...
Purging configuration files for vlc (3.0.16-1) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for desktop-file-utils (0.24-1ubuntu4) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu1) ...
Processing triggers for man-db (2.9.1-1) ...
这表示你已经成功地完全卸载了vlc软件包,包括它的配置文件。
实例4:列出一个软件包的所有文件
如果你想列出一个已安装的软件包的所有文件,你可以使用dpkg -L命令。例如,如果你想列出dpkg软件包的所有文件,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ dpkg -L dpkg
你会看到类似以下的输出:
/.
/usr
/usr/bin
/usr/bin/dpkg
/usr/bin/dpkg-deb
/usr/bin/dpkg-divert
/usr/bin/dpkg-maintscript-helper
/usr/bin/dpkg-query
/usr/bin/dpkg-split
...
实例5:搜索一个文件属于哪个软件包
如果你想搜索一个文件属于哪个已安装的软件包,你可以使用dpkg -S命令。例如,如果你想搜索/usr/bin/dpkg文件属于哪个软件包,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ dpkg -S /usr/bin/dpkg
你会看到类似以下的输出:
dpkg: /usr/bin/dpkg
这表示/usr/bin/dpkg文件属于dpkg软件包。
实例6:列出一个.deb文件的内容
如果你想列出一个.deb文件的内容,而不安装它,你可以使用dpkg -c命令。例如,如果你想列出vlc_3.0.16-1_amd64.deb文件的内容,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ dpkg -c vlc_3.0.16-1_amd64.deb
你会看到类似以下的输出:
drwxr-xr-x root/root 0 2023-04-14 15:02 ./
drwxr-xr-x root/root 0 2023-04-14 15:02 ./usr/
drwxr-xr-x root/root 0 2023-04-14 15:02 ./usr/bin/
-rwxr-xr-x root/root 159736 2023-04-14 15:02 ./usr/bin/vlc
drwxr-xr-x root/root 0 2023-04-14 15:02 ./usr/lib/
drwxr-xr-x root/root 0 2023-04-14 15:02 ./usr/lib/x86_64-linux-gnu/
drwxr-xr-x root/root 0 2023-04-14 15:02 ./usr/lib/x86_64-linux-gnu/vlc/
drwxr-xr-x root/root 0 2023-04-14 15:02 ./usr/lib/x86_64-linux-gnu/vlc/plugins/
drwxr-xr-x root/root 0 2023-04-14 15:02 ./usr/lib/x86_64-linux-gnu/vlc/plugins/access/
-rw-r--r-- root/root 18584 2023-04-14 15:02 ./usr/lib/x86_64-linux-
...
gnu/vlc/plugins/access/libcdda_plugin.so
-rw-r--r-- root/root 26712 2023-04-14 15:02 ./usr/lib/x86_64-linux-gnu/vlc/plugins/access/libdcp_plugin.so
-rw-r--r-- root/root 26712 2023-04-14 15:02 ./usr/lib/x86_64-linux-gnu/vlc/plugins/access/libdsm_plugin.so
...
这表示你已经成功地列出了vlc_3.0.16-1_amd64.deb文件的内容。
实例7:显示一个软件包或.deb文件的控制字段信息
如果你想显示一个已安装的软件包或一个.deb文件的控制字段信息,如包名、版本、描述、依赖、提供、冲突、替换等,你可以使用dpkg -f命令。例如,如果你想显示dpkg软件包的控制字段信息,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ dpkg -f dpkg
你会看到类似以下的输出:
Package: dpkg
Status: install ok installed
Priority: required
Section: admin
Installed-Size: 11312
Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
Architecture: amd64
Multi-Arch: foreign
Version: 1.20.5ubuntu3
Replaces: dpkg-dev (<< 1.18.8), libdpkg-perl (<< 1.18.8)
Provides: libdpkg-perl
Depends: libbz2-1.0, libc6 (>= 2.28), libdpkg-perl (= 1.20.5ubuntu3), liblzma5 (>= 5.1.1alpha+20120614), libselinux1 (>= 1.32), libzstd1 (>= 1.3.2), tar (>= 1.23), zlib1g (>= 1:1.1.4)
Pre-Depends: libaudit1
Suggests: apt, bzip2, ncompress, xz-utils, zstd
Breaks: apt (<< 1.1~exp9), apt-utils (<< 1.3~exp2), debhelper (<< 9.20160115), dpkg-dev (<< 1.18.8), libdpkg-perl (<< 1.18.8), lintian (<< 2.5.81)
Description: Debian package management system
This package provides the low-level infrastructure for handling the
installation and removal of Debian software packages.
.
For Debian package development tools, install dpkg-dev.
Homepage: https://wiki.debian.org/Teams/Dpkg
这表示你已经成功地显示了dpkg软件包的控制字段信息。
如果你想显示一个.deb文件的控制字段信息,你可以使用dpkg -I命令。例如,如果你想显示vlc_3.0.16-1_amd64.deb文件的控制字段信息,你可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ dpkg -I vlc_3.0.16-1_amd64.deb
你会看到类似以下的输出:
new Debian package, version 2.0.
size 159736 bytes: control archive=1144 bytes.
583 bytes, 13 lines control
286 bytes, 4 lines md5sums
Package: vlc
Version: 3.0.16-1
...
Linux dpkg命令的注意事项
dpkg 命令只是一个基础的工具, 他不能自动处理软件包之间的依赖关系。如果需要自动处理软件包依赖关系, 可以使用APT命令。
如果你遇到bash: dpkg: command not found错误,可能是没有正确安装dpkg,可以使用对应的包管理器进行安装。
Linux dpkg相关命令
apt命令:在dpkg基础上,可以自动处理软件包之间的依赖关系。
dpkg-reconfigure命令:重新配置已经安装的包。
评论区