如何使用dpkg获取“提供”信息的软件包列表?


9

我看到dpkg的程序包有一个“ Provides”字段。

$ apt-cache show vim-tiny | grep Provides
Provides: editor
$

我怎么知道哪个软件包提供“编辑器”?

Answers:


4

aptitude使用apt-cache showpkg,其中包括的清单,您可以达到预期的效果而不会(目前似乎不受欢迎)Reverse Provides。通过一个小的sed脚本来运行它会摆脱其他事情:

apt-cache showpkg <package> | sed '/Reverse Provides/,$!d'

可以通过以下示例实现一个更漂亮(但输入时间更长)的示例(仅列出软件包名称,而不列出版本,并按字母顺序对它们进行排序)awk

apt-cache showpkg httpd | awk '/Pa/, /Reverse P/ {next} {print $1 | "sort"}'

...这可以通过管道传递uniq以删除重复项(由于存在多个版本的软件包是反向提供的,因此可能存在)。请注意,使用uniq第一个版本将无济于事,因为uniq仅当重复项位于相邻行且该sed版本未对输出进行排序时,才会删除重复项。

最后,可以定义一个函数以便于使用,如下所示:

provides () { apt-cache showpkg $1 | awk '/Pa/, /Reverse P/ {next} {print $1 | "sort"}' | uniq;}

.bashrc将其插入(例如)中,以便在shell加载时将其加载,并且有可能运行provides <package>以获取包的反向提供。


sort -u将删除重复项,因此uniq不需要调用。但是,不管怎样,不错的解决方案,它都快得多。aptitude也会匹配doom-wad-editor,因此它们并不完全相同。
Janus Troelsen

哦,好大声喊叫sort -u。不知道那个。我不知道为什么它没有捡起来doom-wad-editor...?这一点特别有趣,因为apt-cache showpkg它表明它完全没有依赖关系。
Darael

啊。进一步的检查表明,aptitude搜索将匹配Provides:字段中的子字符串(因此选择deutex),其中该apt-cache showpkg方法使用确切的包名称。因此,两者大概都有自己的位置。
Darael

我认为必须明确的<package>是这里是一个虚拟软件包。像editor
x-yuri

@ x-yuri确保会有任何结果,但这仅是因为虚拟包是一个名称,Provides:在存储库中至少存在一行。apt-cache search然后,与相同,没有输出时的正确结果是缺少输出-这是这些选项所提供的。同一软件包可以有具体的和虚拟的版本,我想我们可以对它们进行增强,以显示具体版本的存在,仅此而已。
Darael

7

Aptitude也提供此功能。因此,这样的命令将显示提供编辑器的所有软件包。

aptitude search '~Peditor'

您甚至可以添加其他约束。就像只显示已安装的编辑器一样。

aptitude search '~i~Peditor'

我更喜欢这样做,因为它比其他解决方案包含更多的软件包。我的解决方案只在行的开头显示了列出的带有“ i”(已安装)的软件包。该解决方案还显示带有“ p”的行(这意味着系统上不存在该程序包的痕迹)。
Janus Troelsen,2012年

6
$ dpkg-query -W -f='Package: ${Package}\nProvides: ${Provides}\n' \
  | grep -B 1 -E "^Provides: .*editor"
Package: nano
Provides: editor
--
Package: vim-gnome
Provides: editor, gvim, vim, vim-perl, vim-python, vim-ruby, vim-tcl
--
Package: vim-tiny
Provides: editor
$

1
-1:这仅查询已安装的软件包。
MoonSweep's

@MoonSweep同意,但是在某些情况下可能很有用。
user.dz

0

直接读取数据库:

#!/usr/bin/env python3
import sys
import shlex

def whichPkgsProvide(filter,l):
    for pkg in l:
            dic = {}
            pairs = [x.split(": ") for x in pkg.split("\n")]
            for j in pairs:
                    try:
                            dic[j[0]] = j[1]
                    except IndexError:
                            pass

            try:
                    if filter in dic["Provides"]:
                            yield dic["Package"]
            except KeyError:
                    pass


if __name__ == "__main__":
    l = sys.stdin.read().split("\n\n")
    print(list(whichPkgsProvide(sys.argv[1],l)))

用法:

$ python3 whichPkgsProvide.py editor <  /var/lib/dpkg/available
['vim-gnome', 'nano', 'vim-tiny']
$

-1

根据您的示例。我可以列出editor按用途提供的包裹apropos

hvn@lappy: ~ () $ apropos editor
atobm (1)            - bitmap editor and converter utilities for the X W...
bitmap (1)           - bitmap editor and converter utilities for the X W...
bmtoa (1)            - bitmap editor and converter utilities for the X W...
ed (1)               - text editor
editor (1)           - Vi IMproved, a programmers text editor
editres (1)          - a dynamic resource editor for X Toolkit applications
ex (1)               - Vi IMproved, a programmers text editor
gedit (1)            - text editor for the GNOME Desktop
gnome-text-editor (1) - text editor for the GNOME Desktop
gview (1)            - Vi IMproved, a programmers text editor
gvim (1)             - Vi IMproved, a programmers text editor
i3-sensible-editor (1) - launches $EDITOR with fallbacks
nano (1)             - Nano's ANOther editor, an enhanced free Pico clone
notepad (1)          - Wine text editor
pico (1)             - Nano's ANOther editor, an enhanced free Pico clone
psed (1)             - a stream editor
ptked (1p)           - an editor in Perl/Tk
red (1)              - text editor
regedit (1)          - Wine registry editor
rgview (1)           - Vi IMproved, a programmers text editor
rgvim (1)            - Vi IMproved, a programmers text editor
rnano (1)            - Restricted mode for Nano's ANOther editor, an enh...
rview (1)            - Vi IMproved, a programmers text editor
rvim (1)             - Vi IMproved, a programmers text editor
s2p (1)              - a stream editor
sdlBasic (1)         - sdlBasic program editor
sed (1)              - stream editor for filtering and transforming text
select-editor (1)    - select your default sensible-editor from all inst...
sensible-editor (1)  - sensible editing, paging, and web browsing
software-properties-gtk (1) - Software Sources List editor
Tk::ColorEditor (3pm) - a general purpose Tk widget Color Editor
vi (1)               - Vi IMproved, a programmers text editor
view (1)             - Vi IMproved, a programmers text editor
vim (1)              - Vi IMproved, a programmers text editor
winecfg (1)          - Wine Configuration Editor
xedit (1)            - simple text editor for X
zshzle (1)           - zsh command line editor

1
-1:apropos搜索手册页,因此将仅列出已安装的命令。此外,OP还需要一个软件包列表。
MoonSweep's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.