Wie bekomme ich eine Liste von Paketen, die mit dpkg etwas "bereitstellen"?

9

Ich sehe, dass dpkg ein "Provides" -Feld für Pakete hat.

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

Woher weiß ich, welche Pakete dh "Editor" bieten?

Janus Troelsen
quelle

Antworten:

4

Sie können den gewünschten Effekt ohne aptitude(was heutzutage entmutigt zu sein scheint) erzielen, indem Sie apt-cache showpkgeine Liste von verwenden Reverse Provides. Wenn Sie es durch ein kleines sedSkript leiten, werden die anderen Dinge entfernt:

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

Ein etwas hübscheres (aber länger zu tippendes) Beispiel (listet nur Paketnamen auf, keine Versionen, und sortiert sie alphabetisch) kann erreicht werden mit awk:

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

... und dies kann weitergeleitet werden uniq, um Duplikate zu entfernen (die möglicherweise vorhanden sind, weil mehrere Versionen des Pakets umgekehrt bereitgestellt werden). Beachten Sie, dass die Verwendung von uniqbei der ersten Version nicht hilft, da uniqDuplikate nur entfernt werden, wenn sie sich in benachbarten Zeilen befinden und die sedVersion die Ausgabe nicht sortiert.

Schließlich kann man eine Funktion zur einfacheren Verwendung wie folgt definieren:

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

Stecken Sie dies (zum Beispiel) ein .bashrc, damit es geladen wird, wenn die Shell dies tut, und es wird möglich, es auszuführen provides <package>, um die Reverse-Provides eines Pakets zu erhalten.

Darael
quelle
sort -uentfernt die Duplikate, sodass der Aufruf von uniqnicht benötigt wird. Aber was auch immer, schöne Lösung, es ist viel schneller. aptitudewird auch übereinstimmen doom-wad-editor, so dass sie nicht völlig gleichwertig sind.
Janus Troelsen
Oh, guter Ruf sort -u. Wusste das nicht. Ich frage mich, warum es nicht aufhört doom-wad-editor...? Das ist besonders interessant, da es apt-cache showpkgzeigt, dass es überhaupt nicht darauf ankommt.
Darael
Ah. Eine weitere Untersuchung zeigt, dass aptitudedie Suche mit Teilzeichenfolgen im Provides:Feld übereinstimmt (und somit aufnimmt deutex), wobei die apt-cache showpkgMethode genaue Paketnamen verwendet. Beide haben also vermutlich ihren Platz.
Darael
Ich glaube, dass klargestellt werden muss, dass es sich <package>hier um ein virtuelles Paket handelt. Wie , editor.
X-Yuri
@ x-yuri, damit es natürlich zu Ergebnissen kommt, aber das liegt nur daran, dass ein virtuelles Paket ein Name ist, für den mindestens eine Provides:Zeile im Repository vorhanden ist. Genauso wie apt-cache searchdas richtige Ergebnis, wenn es keine gibt, ein Mangel an Ausgabe ist - was diese Optionen bieten. Es kann konkrete und virtuelle Versionen desselben Pakets geben, und ich nehme an, wir könnten diese verbessern, um die konkrete Version dort anzuzeigen, wo sie existiert, aber das ist alles.
Darael
7

Aptitude bietet auch diese Funktionalität. Ein Befehl wie dieser zeigt also alle Pakete an, die einen Editor bereitstellen.

aptitude search '~Peditor'

Sie können sogar andere Einschränkungen hinzufügen. Wie nur installierte Editoren anzeigen.

aptitude search '~i~Peditor'
Zoredache
quelle
Ich bevorzuge dies, weil es viel mehr Pakete enthält als die anderen Lösungen. Meine Lösungen zeigten nur die Pakete an, die am Anfang der Zeile mit "i" (installiert) aufgeführt waren. Diese Lösung zeigt auch Zeilen mit "p" an (was bedeutet, dass auf dem System keine Spur des Pakets vorhanden ist).
Janus Troelsen
5
$ 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
$
Janus Troelsen
quelle
-1: Hiermit werden nur installierte Pakete abgefragt.
MoonSweep
0

Datenbank direkt lesen:

#!/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)))

Verwendungszweck:

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

stützen Sie sich auf Ihr Beispiel. Ich kann Paket zur Verfügung stellen Liste editordurch Verwendungapropos

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
HVNSweeting
quelle
1
-1: aproposDurchsuchen Sie die Handbuchseiten, damit nur die installierten Befehle aufgelistet werden. Außerdem möchte OP eine Liste der Pakete .
MoonSweep