Come posso ottenere un elenco di pacchetti che "fornisce" qualcosa "usando dpkg?


9

Vedo che dpkg ha un campo "Fornisce" per i pacchetti.

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

Come faccio a sapere quali pacchetti forniscono, ad esempio, "editor"?

Risposte:


4

È possibile ottenere l'effetto desiderato senza aptitude(che sembra essere scoraggiato in questi giorni) utilizzando apt-cache showpkg, che include un elenco di Reverse Provides. Il piping attraverso un piccolo sedscript eliminerà le altre cose:

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

Un esempio leggermente più carino (ma più lungo da digitare) (elenca solo i nomi dei pacchetti, non le versioni e li ordina in ordine alfabetico) può essere ottenuto con awk:

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

... e questo può essere reindirizzato uniqper rimuovere i duplicati (che possono esistere a causa di versioni multiple del pacchetto fornite inverse). Si noti che l'uso di uniqnon aiuterà con la prima versione, poiché uniqrimuove i duplicati solo se si trovano su linee adiacenti e la sedversione non ordina l'output.

Infine, è possibile definire una funzione per un uso più semplice, come segue:

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

Inseriscilo (per esempio) .bashrc, in modo che si carichi quando lo fa la shell, e diventa possibile eseguire provides <package>per ottenere il reverse-fornisce un pacchetto.


sort -urimuoverà i duplicati, quindi la chiamata a uniqnon è necessaria. Qualunque sia, bella soluzione, è molto più veloce. aptitudecorrisponderà doom-wad-editoranche, quindi non sono completamente equivalenti.
Janus Troelsen,

Oh, buon grido sort -u. Non lo sapevo. Mi chiedo perché non riprenda doom-wad-editor...? Ciò è particolarmente interessante poiché lo apt-cache showpkgdimostra come non avere alcuna dipendenza.
Darael,

Ah. Un'ulteriore ispezione mostra che aptitudela ricerca corrisponderà alle sottostringhe nel Provides:campo (quindi raccogliendo deutex), in cui il apt-cache showpkgmetodo utilizza nomi di pacchetti esatti. Entrambi, quindi, presumibilmente hanno il loro posto.
Darael,

Credo che si debba chiarire che si <package>tratta di un pacchetto virtuale qui. Come editor.
x-yuri,

@ x-yuri perché ci siano risultati, certo, ma è solo perché un pacchetto virtuale è un nome per il quale esiste almeno una Provides:riga nel repository. Allo stesso modo apt-cache search, quindi, il risultato corretto quando non ce ne sono è una mancanza di output, che è ciò che offrono queste opzioni. Possono esserci versioni concrete e virtuali dello stesso pacchetto e suppongo che potremmo migliorarle per mostrare la versione concreta in cui esiste, ma è tutto.
Darael,

7

Aptitude fornisce anche questa funzionalità. Quindi un comando come questo mostrerà tutti i pacchetti che forniscono un editor.

aptitude search '~Peditor'

Puoi anche aggiungere altri vincoli. Come mostra solo gli editor installati.

aptitude search '~i~Peditor'

Preferisco questo perché include molti più pacchetti rispetto alle altre soluzioni. Le mie soluzioni hanno mostrato solo i pacchetti elencati con "i" (installato) all'inizio della riga. Questa soluzione mostra anche le linee con "p" (nel senso che non esiste alcuna traccia del pacchetto sul sistema).
Janus Troelsen,

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: questo interroga solo i pacchetti installati.
MoonSweep

@MoonSweep Accetto, tuttavia potrebbe essere utile in alcuni casi.
user.dz

0

Lettura diretta del database:

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

Uso:

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

-1

basati sul tuo esempio. Posso elencare il pacchetto fornito editordall'usoapropos

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: aproposcerca tra le pagine del manuale, quindi questo elencherà solo i comandi installati ... Inoltre, OP vuole un elenco di pacchetti .
MoonSweep
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.