在基于 Debian 的发行版中列出已安装软件的最可靠方法是什么?

在基于 Debian 的发行版中列出已安装软件的最可靠方法是什么?

所以,现在,假设我们只需要它适用于基于 debian 的系统(但我将来需要能够做到这一点yum)。

我现在拥有的最好的就是dpkg-query。因此,举例来说,如果我运行以下命令:

dpkg-query --show

我会得到一个像这样的列表(有几千个条目):

...  
sudo    1.8.17p1-2  
...  
vim     2:7.4.1829-1  
...

但没有命名约定。有些包中有版本号,有些有架构。恩gcc-4.9-base:amd64,但我想要的也就只有gcc 4.9。理想情况下,我希望能够获取所有已安装软件的供应商、产品和版本信息。有什么办法可以做到这一点原生地,或者它必须是某种“模糊”匹配吗?

我愿意接受查询包管理器的替代方法,或者我没有想到的其他方法。我无法安装额外的软件包来实现此目标(不过,我有兴趣了解它们如何工作(如果存在)。

答案1

这将列出与已安装的二进制包对应的源包和版本:

dpkg-query --show -f '${source:Package} ${source:Version}\n' | sort -u

这是与您可以自动获取的单个软件最接近的匹配:您只会看到gcc-4.9一次相关版本,而不是所有相应的二进制包。您无法轻松检索“供应商”信息,您需要查看包详细信息 ( apt-cache show ...) 或许可信息(在/usr/share/doc/<package>/copyright- 它应该指向“上游”项目,IE“供应商”);这不保证是机器可读的格式,因此会涉及一些人工解析。

您仍然会找到一些名称包含(主要)版本的源包,例如 gcc-4.9gcc-5ETC。;当软件包被设计成可以共同安装主要版本时,这些是不可避免的,就像 GCC 的情况一样。

等效的 RPM 命令是

rpm --qf "%{SOURCERPM}\n" -qa | sort -u

答案2

在 Debian 上,也许你可以使用该选项--showformat=格式为了dpkg 查询

举个例子:

dpkg-query --show --showformat='${binary:Package}\t${Version}\t${Architecture}\t${binary:Summary}\n' gcc

答案3

在 Debian 上你可以运行dpkg --list

要获取有关特定包运行的更多信息:

dpkg -p <package_name>

或者

dpkg -s <package_name>

例如:

# dpkg -s gcc 
Package: gcc
Status: install ok installed
Priority: optional
Section: devel
Installed-Size: 42
Maintainer: Debian GCC Maintainers <[email protected]>
Architecture: amd64
Source: gcc-defaults (1.136)
Version: 4:4.9.2-2
Provides: c-compiler
Depends: cpp (>= 4:4.9.2-2), gcc-4.9 (>= 4.9.2-1~)
Recommends: libc6-dev | libc-dev
Suggests: gcc-multilib, make, manpages-dev, autoconf, automake, libtool,  flex, bison, gdb, gcc-doc
Conflicts: gcc-doc (<< 1:2.95.3)
Description: GNU C compiler
This is the GNU C compiler, a fairly portable optimizing compiler for C.
This is a dependency package providing the default GNU C compiler.

在基于 RHEL 的发行版上,您可以运行rpm -qa

相关内容