¿Cómo obtengo una lista de paquetes que "proporcionan" algo "usando dpkg?

9

Veo que dpkg tiene un campo "Proporciona" para paquetes.

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

¿Cómo sé qué paquetes proporcionan, es decir, "editor"?

Janus Troelsen
fuente

Respuestas:

4

Puede lograr el efecto deseado sin aptitude(lo que parece desanimado en estos días) mediante el uso apt-cache showpkg, que incluye una lista de Reverse Provides. Pasarlo a través de un pequeño sedscript eliminará las otras cosas:

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

Un ejemplo un poco más bonito (pero más largo para escribir) (solo enumera los nombres de los paquetes, no las versiones, y los ordena alfabéticamente) con awk:

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

... y esto se puede canalizar uniqpara eliminar duplicados (lo que puede existir debido a que varias versiones del paquete son reversas). Tenga en cuenta que el uso de uniqno ayudará con la primera versión, ya que uniqsolo elimina los duplicados si están en líneas adyacentes y la sedversión no ordena la salida.

Finalmente, uno puede definir una función para un uso más fácil, como sigue:

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

Pegue esto (por ejemplo) .bashrc, para que se cargue cuando lo haga el shell, y sea posible ejecutarlo provides <package>para obtener los paquetes inversos.

Darael
fuente
sort -ueliminará los duplicados, por lo que la llamada a uniqno es necesaria. Pero lo que sea, buena solución, es mucho más rápido. aptitudetambién coincidirá doom-wad-editor, por lo que no son completamente equivalentes.
Janus Troelsen
Ooh, buen grito sort -u. No lo sabía. Me pregunto por qué no responde doom-wad-editor... Eso es particularmente interesante ya que apt-cache showpkgmuestra que no tener depende en absoluto.
Darael
Ah Una inspección adicional muestra que aptitudela búsqueda coincidirá con subcadenas en el Provides:campo (por lo tanto, retomando deutex), donde el apt-cache showpkgmétodo usa nombres de paquete exactos. Ambos, por lo tanto, presumiblemente tienen su lugar.
Darael
Creo que debe quedar claro que aquí <package>hay un paquete virtual. Al igual, editor.
x-yuri
@ x-yuri para que haya resultados, claro, pero eso es solo porque un paquete virtual es un nombre para el que existe al menos una Provides:línea en el repositorio. De la misma manera que apt-cache search, entonces, el resultado correcto cuando no hay ninguno es la falta de salida, que es lo que proporcionan estas opciones. Puede haber versiones concretas y virtuales del mismo paquete, y supongo que podríamos mejorarlas para mostrar la versión concreta donde existe, pero eso es todo.
Darael
7

Aptitude también proporciona esta funcionalidad. Entonces, un comando como este mostrará todos los paquetes que proporcionan un editor.

aptitude search '~Peditor'

Incluso puede agregar otras restricciones. Como mostrar solo editores instalados.

aptitude search '~i~Peditor'
Zoredache
fuente
Prefiero esto porque incluye muchos más paquetes que las otras soluciones. Mis soluciones solo mostraban los paquetes enumerados con "i" (instalado) al comienzo de la línea. Esta solución también muestra líneas con "p" (lo que significa que no hay rastros del paquete en el 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
$
Janus Troelsen
fuente
1
-1: Esto solo consulta los paquetes instalados.
MoonSweep
@MoonSweep De acuerdo, sin embargo, podría ser útil en algunos casos.
user.dz
0

Leyendo la base de datos directamente:

#!/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']
$
Janus Troelsen
fuente
-1

Basarse en su ejemplo. Puedo enumerar el paquete proporcionado editorpor 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
HVNSweeting
fuente
1
-1: aproposbusca en las páginas del manual, así que esto solo mostrará los comandos instalados ... Además, OP quiere una lista de paquetes .
MoonSweep