Comment puis-je obtenir une liste de packages qui "fournit" quelque chose "en utilisant dpkg?

9

Je vois que dpkg a un champ "Fournit" pour les packages.

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

Comment savoir quels packages fournissent, c'est-à-dire "éditeur"?

Janus Troelsen
la source

Réponses:

4

Vous pouvez obtenir l'effet souhaité sans aptitude(ce qui semble être découragé de nos jours) en utilisant apt-cache showpkg, qui comprend une liste de Reverse Provides. Le passer à travers un petit sedscript va se débarrasser des autres choses:

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

Un exemple un peu plus joli (mais plus long à taper) (répertorie uniquement les noms des packages, pas les versions et les trie par ordre alphabétique) peut être obtenu avec awk:

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

... et cela peut être acheminé uniqpour supprimer les doublons (qui peuvent exister en raison de plusieurs versions du package fournies en sens inverse). Notez que l'utilisation de uniqn'aidera pas avec la première version, car uniqne supprime les doublons que s'ils se trouvent sur des lignes adjacentes et que la sedversion ne trie pas la sortie.

Enfin, on peut définir une fonction pour une utilisation plus simple, comme suit:

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

Collez-le (par exemple) .bashrc, afin qu'il se charge lorsque le shell le fait, et il devient possible de l'exécuter provides <package>pour obtenir les reverse-packages d'un package.

Darael
la source
sort -usupprimera les doublons, donc l'appel à uniqn'est pas nécessaire. Mais peu importe, belle solution, c'est beaucoup plus rapide. aptitudecorrespondra doom-wad-editoraussi, donc ils ne sont pas complètement équivalents.
Janus Troelsen
Ooh, bon cri sort -u. Je ne connaissais pas celui-là. Je me demande pourquoi ça ne reprend pas doom-wad-editor...? C'est particulièrement intéressant car apt-cache showpkgcela montre qu'il n'y a pas de dépendance du tout.
Darael
Ah. Une inspection plus approfondie montre que aptitudela recherche de correspondra aux sous-chaînes dans le Provides:champ (donc ramasser deutex), où la apt-cache showpkgméthode utilise des noms de package exacts. Les deux ont donc probablement leur place.
Darael
Je pense qu'il doit être clair qu'il <package>s'agit d'un paquet virtuel ici. Comme editor.
x-yuri
@ x-yuri pour qu'il y ait des résultats, bien sûr, mais c'est uniquement parce qu'un package virtuel est un nom pour lequel il existe au moins une Provides:ligne dans le référentiel. De la même manière que apt-cache search, alors, le résultat correct quand il n'y en a pas est un manque de sortie - ce que ces options offrent. Il peut y avoir des versions concrètes et virtuelles du même package, et je suppose que nous pourrions les améliorer pour montrer la version concrète là où elle existe, mais c'est tout.
Darael
7

Aptitude fournit également cette fonctionnalité. Une commande comme celle-ci affichera donc tous les packages qui fournissent un éditeur.

aptitude search '~Peditor'

Vous pouvez même ajouter d'autres contraintes. Comme afficher uniquement les éditeurs installés.

aptitude search '~i~Peditor'
Zoredache
la source
Je préfère cela car il comprend beaucoup plus de packages que les autres solutions. Mes solutions ne montraient que les packages répertoriés avec "i" (installé) au début de la ligne. Cette solution affiche également les lignes avec "p" (ce qui signifie qu'aucune trace du package n'existe sur le système).
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
la source
1
-1: Cela interroge uniquement les packages installés.
MoonSweep
@MoonSweep D'accord, mais cela pourrait être utile dans certains cas.
user.dz
0

Lecture directe de la base de données:

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

Usage:

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

base sur votre exemple. Je peux lister le package fourni editorpar utilisationapropos

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
la source
1
-1: aproposrecherche dans les pages de manuel, donc cela ne listera que les commandes installées ... De plus, OP veut une liste de packages .
MoonSweep