Bagaimana cara saya mendapatkan daftar paket yang "Menyediakan" sesuatu "menggunakan dpkg?

9

Saya melihat bahwa dpkg memiliki bidang "Menyediakan" untuk paket.

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

Bagaimana saya tahu paket mana yang menyediakan "editor" yaitu?

Janus Troelsen
sumber

Jawaban:

4

Anda dapat mencapai efek yang diinginkan tanpa aptitude(yang tampaknya tidak disarankan hari ini) dengan menggunakan apt-cache showpkg, yang mencakup daftar Reverse Provides. Memipipkannya melalui sedskrip kecil akan menghilangkan hal-hal lain:

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

Contoh yang sedikit lebih cantik (tetapi lebih lama untuk diketik) (hanya mencantumkan nama paket, bukan versi, dan mengurutkannya menurut abjad) dapat dicapai dengan awk:

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

... dan ini dapat disalurkan melalui uniquntuk menghapus duplikat (yang mungkin ada karena beberapa versi paket yang disediakan terbalik). Perhatikan bahwa penggunaan uniqtidak akan membantu dengan versi pertama, karena uniqhanya menghapus duplikat jika mereka berada di baris yang berdekatan dan sedversi tidak mengurutkan output.

Akhirnya, seseorang dapat mendefinisikan suatu fungsi untuk penggunaan yang lebih mudah, sebagai berikut:

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

Tempelkan ini pada (misalnya) .bashrc, sehingga itu akan memuat ketika shell melakukannya, dan menjadi mungkin untuk menjalankan provides <package>untuk mendapatkan paket-balik yang disediakan.

Darael
sumber
sort -uakan menghapus duplikat, sehingga panggilan ke uniqtidak diperlukan. Tapi apa pun, solusi yang bagus, ini jauh lebih cepat. aptitudeakan cocok doom-wad-editorjuga, jadi mereka tidak sepenuhnya setara.
Janus Troelsen
Ooh, teriak yang bagus sort -u. Tidak tahu itu. Saya bertanya-tanya mengapa itu tidak mengambil doom-wad-editor...? Itu sangat menarik karena apt-cache showpkgmenunjukkan itu sebagai tidak tergantung sama sekali.
Darael
Ah. Pemeriksaan lebih lanjut menunjukkan bahwa aptitudepencarian akan cocok dengan substring di Provides:lapangan (sehingga mengambil deutex), di mana apt-cache showpkgmetode ini menggunakan nama paket yang tepat. Keduanya, oleh karena itu, mungkin memiliki tempat mereka.
Darael
Saya percaya bahwa harus diperjelas bahwa <package>ini adalah paket virtual di sini. Seperti editor,.
x-yuri
@ x-yuri agar ada hasil apa pun, tentu saja, tetapi itu hanya karena paket virtual adalah nama yang ada setidaknya satu Provides:baris dalam repositori. Dengan cara yang sama seperti apt-cache search, kemudian, hasil yang benar ketika tidak ada adalah kurangnya output - yang disediakan oleh opsi-opsi ini. Mungkin ada versi konkret dan virtual dari paket yang sama, dan saya kira kita bisa meningkatkan ini untuk menunjukkan versi konkret di mana itu ada, tetapi hanya itu.
Darael
7

Aptitude menyediakan fungsi ini juga. Jadi perintah seperti ini akan menampilkan semua paket yang menyediakan editor.

aptitude search '~Peditor'

Anda bahkan dapat menambahkan kendala lain. Suka tunjukkan hanya editor yang diinstal.

aptitude search '~i~Peditor'
Sakit kepala
sumber
Saya lebih suka ini karena mencakup lebih banyak paket daripada solusi lainnya. Solusi saya hanya menunjukkan paket yang terdaftar dengan "i" (diinstal) di awal baris. Solusi ini juga menunjukkan garis dengan "p" (artinya tidak ada jejak paket pada sistem).
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
sumber
1
-1: Ini hanya menanyakan paket yang diinstal.
MoonSweep
@MoonSweep Setuju, namun ini bisa berguna untuk beberapa kasus.
user.dz
0

Membaca database secara langsung:

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

Pemakaian:

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

berdasarkan contoh Anda. Saya dapat mendaftar paket yang disediakan editordengan menggunakanapropos

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
HVNMencintai
sumber
1
-1: aproposcari melalui halaman manual, jadi ini hanya akan mencantumkan perintah yang diinstal ... Plus, OP ingin daftar paket .
MoonSweep