Как я могу получить список пакетов, которые "предоставляют" что-то ", используя 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>для получения обратных пакетов.

Darael
источник
sort -uудалит дубликаты, поэтому вызов uniqне нужен. Но как бы то ни было, хорошее решение, это намного быстрее. aptitudeбудет совпадать doom-wad-editor, поэтому они не являются полностью эквивалентными.
Янус Троелсен
О, хорошо, кричи sort -u. Не знал этого. Интересно, почему это не подхватывает doom-wad-editor...? Это особенно интересно, так как apt-cache showpkgпоказывает, что не зависит вообще.
Дараэль
Ах. Дальнейшая проверка показывает, что aptitudeпоиск будет соответствовать подстрокам в Provides:поле (таким образом, подбирая deutex), где apt-cache showpkgметод использует точные имена пакетов. Следовательно, оба имеют свое место.
Дараэль
Я считаю, что должно быть ясно, что <package>это виртуальный пакет здесь. Нравится editor.
x-
@ x-yuri, чтобы были какие-либо результаты, конечно, но это только потому, что виртуальный пакет - это имя, для которого существует хотя бы одна Provides:строка в хранилище. Таким же образом, как apt-cache searchи тогда, правильный результат, когда его нет, - это недостаток выходных данных - вот что обеспечивают эти опции. Могут быть конкретные и виртуальные версии одного и того же пакета, и я полагаю, мы могли бы улучшить их, чтобы показать конкретную версию, где она существует, но это все.
Дараэль
7

Aptitude также предоставляет эту функциональность. Таким образом, команда, подобная этой, покажет все пакеты, которые предоставляют редактор.

aptitude search '~Peditor'

Вы даже можете добавить другие ограничения. Нравится показывать только установленные редакторы.

aptitude search '~i~Peditor'
Zoredache
источник
Я предпочитаю это, потому что он включает в себя гораздо больше пакетов, чем другие решения. Мои решения показывали только пакеты, перечисленные с «i» (установлен) в начале строки. Это решение также показывает строки с «p» (что означает, что в системе нет никаких следов пакета).
Янус Троелсен
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
@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
HVNSweeting
источник
1
-1: aproposпоиск по страницам справочника, поэтому в нем будут перечислены только установленные команды ... Плюс, OP хочет список пакетов .
MoonSweep