侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux dpkg命令:强大的Debian包管理工具(附实例详解和注意事项)

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命令:重新配置已经安装的包。

0

评论区