Debian下软件包管理操作入门
2013-05-09 16:21:55 阿炯

dpkg使用参考

查找文件属于哪个软件包

检查软件包的依赖性


dpkg使用参考


dpkg 是基于 Debian 的 Linux 发行版的包管理系统。它用于安装、删除和管理系统中的软件包。 dpkg 命令负责处理包管理的低级细节,例如解包和安装包、配置包以及维护已安装包的数据库。dpkg 命令通常与其他包管理工具(例如 apt 或 apt-get)结合使用,它们为 dpkg 系统提供更高级别的接口;它是 Debian 和基于 Debian 的系统中一个主要的包管理工具,可以用来安装、构建、卸载、管理 deb 格式的软件包。

基本语法

dpkg [options] <action> <package_name>

其中
options - 用于修改 dpkg 命令行为的可选参数。
action - 要执行的操作,例如安装、删除或配置包。
package_name - 要安装、删除或配置的包的名称。

现在,让我们通过示例探讨一些常见的 dpkg 命令选项和操作。而 apt-get 命令并不直接操作 deb 安装包文件,而是从 /etc/apt/sources.list 配置文件中定义的软件镜像源里下载软件包并安装,使用时也只需指定软件的名称(或者也可以附加上版本号)。

常用 dpkg 命令选项

以下是一些可以与 dpkg 命令一起使用的常见选项:
-i - 安装软件包。
-r - 删除包。
-P - 清除包(删除包和配置文件)。
-l - 列出所有已安装的软件包。
-s - 显示有关包的信息。
-S - 按文件名搜索包。
-L - 列出软件包安装的文件。

现在来看一下通过 dpkg 命令使用这些选项的一些示例。

用法示例

安装包
要使用 dpkg 安装软件包,请使用 -i 选项,后跟软件包名称。例如,要安装软件包“firefox.deb”,可以使用以下命令
dpkg -i firefox.deb

而 apt-get 可以直接从远程的软件仓库里下载安装软件。

删除包
要使用 dpkg 删除软件包,请使用 -r 选项,后跟软件包名称。例如,要删除软件包“firefox”,可以使用以下命令
dpkg -r firefox

清除包
要使用 dpkg 删除软件包及其配置文件,请使用 -P 选项,后跟软件包名称。例如,要清除软件包“firefox”,您可以使用以下命令
dpkg -P firefox

列出已安装的软件包
要使用 dpkg 列出所有已安装的软件包,请使用 -l 选项。例如,要列出所有已安装的软件包,可以使用以下命令

dpkg -l
显示有关包的信息

该命令每行输出中的第一列 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 表示该软件已经被删除,但配置文件未清理。

要使用 dpkg 显示有关软件包的信息,请使用 -s 选项,后跟软件包名称。例如要显示有关“firefox”包的信息,可以使用以下命令
dpkg -s firefox

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

按文件名搜索包

要使用 dpkg 按文件名搜索包,请使用 -S 选项,后跟文件名。例如,要搜索提供文件“/usr/bin/firefox”的包,可以运行以下命令
dpkg -S /usr/bin/firefox

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

这将输出提供该文件的包名称和版本。如果任何已安装的软件包均未提供该文件,则该命令将不会返回任何输出。

删除包
要使用 dpkg 删除软件包,请使用 -r 选项,后跟软件包名称。例如,要删除软件包“firefox”,可以运行以下命令
dpkg -r firefox

这将从您的系统中删除该包及其配置文件。

清除包
要从系统中完全删除软件包及其配置文件,请使用 -P 选项,后跟软件包名称。例如,要清除软件包“firefox”,可以运行以下命令
dpkg -P firefox

这将从您的系统中删除该包及其所有配置文件。

验证包完整性
要使用 dpkg 验证包的完整性,请使用 -V 选项,后跟包名称。例如,要验证包“firefox”的完整性,可以运行以下命令
dpkg -V firefox

这会将包安装的文件与包控制文件中列出的文件进行比较,并报告任何差异。

重新配置包
如果安装后需要重新配置软件包,可以使用 --configure 选项,后跟软件包名称。例如,要重新配置软件包“firefox”,可以运行以下命令
dpkg --configure firefox

这将运行包的配置脚本,允许您根据需要更新其配置。

查看软件包的内容
dpkg -c <package_file_path>

查看软件包的安装位置
dpkg -L <package> 或 dpkg --list-files <package>

这里探讨了 Linux 中的 dpkg 命令,包括其各种选项以及如何使用它们的示例。dpkg 命令是一个强大的工具,用于管理 Linux 系统上的软件包,使您可以轻松安装、删除和配置软件。通过了解 dpkg 中可用的各种选项和命令,可以更有效地管理您的系统并确保您的软件是最新的并顺利运行。


查找文件属于哪个软件包

方法1:使用'apt-file'工具
apt-file search filename
or
apt-file search /path/to/file

首先要安装'apt-file':
apt-get install apt-file

安装完成后,应该更新一下本机的文件索引库:
apt-file update

方法2:使用'dpkg'工具的搜索匹配功能
dpkg -S bin/ls

'dpkg -S' just matches the string you supply it, so just using 'ls' as an argument matches any file from any package that has 'ls' anywhere in the filename. So usually it's a good idea to use an absolute path. You can see in the second example that 12 thousand files that are known to dpkg match the bare string 'ls'.

这样,只要包含有'bin/ls'字串的包就会查找出来:
# dpkg -S bin/ls     
module-init-tools: /bin/lsmod
e2fsprogs: /usr/bin/lsattr
lsb-release: /usr/bin/lsb_release
usbutils: /usr/sbin/lsusb
pciutils: /usr/bin/lspci
lsof: /usr/bin/lsof
usbutils: /usr/bin/lsusb
gnupg: /usr/bin/lspgpot
klibc-utils: /usr/lib/klibc/bin/ls
coreutils: /bin/ls
util-linux: /usr/bin/lscpu
initramfs-tools: /usr/bin/lsinitramfs
module-init-tools: /sbin/lsmod

方法3:上debian软件包主页查询
packages.debian.org is what I always use to accomplish this task. It is superior over apt-file because it can find parts of filenames as well. It's also linked up to the main packages list which will list descriptions, bugs, etc. All in all a good website. Not as useful from the command line, but still quite useful.

这需要能用浏览器访问互联网。


Check Dependencies of a Package in Debian
在Debian中检查软件包的依赖性

如果没有安装其他必备软件包,在Linux操作系统上安装的大多数软件包都无法正常工作。这样的先决条件包称为依赖项。有时想找出一个特定包的依赖项。所以在此将向你展示三种方法来检查和列出Debian 11和Ubuntu 22.04中软件包的依赖项。同样的命令也可以在旧的Debian和Ubuntu版本中使用。

查看软件包的基本信息,包括其中的依赖情况。

apt show PACKAGE_NAME

apt-cache show PACKAGE_NAME

apt-cache depends PACKAGE_NAME


apt-rdepends 指令需要另行安装,查询方式如下:
apt-rdepends -r PACKAGE_NAME

此命令将花费较长时间来执行,因为它应该处理所有反向依赖项。可直接使用apt指令:
apt depends PACKAGE_NAME

如果只有deb安装包与dpkg指令,则可通过该指令做如下检查
dpkg -I package.deb

将在终端中看到有关该软件包的各种信息,软件包依赖项列在Depends部分下。

依赖通过后可通过:
apt install ./package.deb

来安装软件包。

depends VS rdepends

apt-cache depends package-name
//show package-name depends on who

apt-cache rdepends package-name
//show who depends on package-name

dpkg-deb -I package.deb