dpkgを使用して「何かを提供する」パッケージのリストを取得するにはどうすればよいですか?


9

dpkgにはパッケージの「提供」フィールドがあることがわかります。

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

どのパッケージが提供するか、つまり「エディタ」を知るのですか?

回答:


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に固定すると、シェルがロードしたときにロードされ、実行provides <package>してパッケージの逆提供を取得できるようになります。


sort -u重複が削除されるため、への呼び出しuniqは必要ありません。しかし、何であれ、素晴らしい解決策は、はるかに高速です。aptitudeも一致するdoom-wad-editorので、完全に同等ではありません。
Janus Troelsen 2013

ああ、良い叫びsort -u。それは知りませんでした。どうして上手くいかないのdoom-wad-editorか……?それapt-cache showpkgはまったく依存していないことを示しているので、それは特に興味深いです。
Darael 2013

ああ。詳細な調査により、aptitudeの検索はProvides:フィールド内の部分文字列に一致するため(つまり、ピックアップdeutex)、apt-cache showpkgメソッドは正確なパッケージ名を使用します。したがって、両方がおそらくその場所を持っています。
Darael 2013

<package>ここでは仮想パッケージであることを明確にしておく必要があると思います。のようにeditor
x-yuri

@ x-yuriで結果が出るのは確かですが、それは仮想パッケージがProvides:リポジトリに少なくとも1 行存在する名前であるためです。と同じように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 2018年

@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 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.