Làm cách nào để tôi có được danh sách các gói mà Cung cấp một thứ gì đó "bằng cách sử dụng dpkg?


9

Tôi thấy rằng dpkg có trường "Cung cấp" cho các gói.

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

Làm thế nào để tôi biết gói nào cung cấp tức là "trình soạn thảo"?

Câu trả lời:


4

Bạn có thể đạt được hiệu quả mong muốn mà không cần aptitude(dường như không được khuyến khích trong những ngày này) bằng cách sử dụng apt-cache showpkg, bao gồm một danh sách Reverse Provides. Đưa nó qua một sedkịch bản nhỏ sẽ loại bỏ những thứ khác:

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

Một ví dụ đẹp hơn (nhưng dài hơn để gõ) (chỉ liệt kê tên gói, không phải phiên bản và sắp xếp chúng theo thứ tự bảng chữ cái) có thể đạt được với awk:

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

... và điều này có thể được chuyển qua uniqđể loại bỏ các bản sao (có thể tồn tại do nhiều phiên bản của gói được cung cấp ngược). Lưu ý rằng việc sử dụng uniqsẽ không giúp với phiên bản đầu tiên, vì uniqchỉ loại bỏ các bản sao nếu chúng nằm trên các dòng liền kề và sedphiên bản không sắp xếp đầu ra.

Cuối cùng, người ta có thể định nghĩa một chức năng để sử dụng dễ dàng hơn, như sau:

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

Dán cái này vào (ví dụ) .bashrc, để nó sẽ tải khi shell thực hiện và có thể chạy provides <package>để có được các gói cung cấp ngược.


sort -usẽ loại bỏ các bản sao, vì vậy cuộc gọi đến uniqkhông cần thiết. Nhưng bất cứ điều gì, giải pháp tốt đẹp, nó nhanh hơn nhiều. aptitudecũng sẽ phù hợp doom-wad-editor, vì vậy chúng không hoàn toàn tương đương.
Janus Troelsen

Ooh, hét lên tốt sort -u. Không biết cái đó. Tôi tự hỏi tại sao nó không nhận doom-wad-editor...? Điều đó đặc biệt thú vị vì apt-cache showpkgcho thấy nó không có sự phụ thuộc nào cả.
Darael

Ah. Kiểm tra thêm cho thấy aptitudetìm kiếm của bạn sẽ khớp với các chuỗi con trong Provides:trường (do đó chọn deutex), trong đó apt-cache showpkgphương thức sử dụng tên gói chính xác. Cả hai, do đó, có lẽ có vị trí của họ.
Darael

Tôi tin rằng nó phải được làm rõ rằng đó <package>là một gói ảo ở đây. Giống như , editor.
x-yuri

@ x-yuri để có bất kỳ kết quả nào, chắc chắn, nhưng đó chỉ vì một gói ảo là một tên tồn tại ít nhất một Provides:dòng trong kho lưu trữ. Theo cách tương tự apt-cache search, sau đó, kết quả chính xác khi không có gì là thiếu đầu ra - đó là những gì các tùy chọn này cung cấp. Có thể có các phiên bản cụ thể và ảo của cùng một gói và tôi cho rằng chúng ta có thể tăng cường các phiên bản này để hiển thị phiên bản cụ thể nơi nó tồn tại, nhưng đó là tất cả.
Darael

7

Aptitude cung cấp chức năng này là tốt. Vì vậy, một lệnh như thế này sẽ hiển thị tất cả các gói cung cấp trình soạn thảo.

aptitude search '~Peditor'

Bạn thậm chí có thể thêm các ràng buộc khác. Giống như hiển thị chỉ cài đặt các biên tập viên.

aptitude search '~i~Peditor'

Tôi thích điều này bởi vì nó bao gồm nhiều gói hơn các giải pháp khác. Các giải pháp của tôi chỉ hiển thị các gói được liệt kê với "i" (đã cài đặt) ở đầu dòng. Giải pháp này cũng hiển thị các dòng có "p" (có nghĩa là không có dấu vết của gói tồn tại trên hệ thống).
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: Điều này chỉ truy vấn các gói được cài đặt.
MoonSweep

@MoonSweep Đồng ý, tuy nhiên nó có thể hữu ích cho một số trường hợp.
user.dz

0

Đọc cơ sở dữ liệu trực tiếp:

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

Sử dụng:

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

-1

dựa trên ví dụ của bạn Tôi có thể liệt kê gói cung cấp editorbằng cách sử dụngapropos

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: apropostìm kiếm thông qua các trang thủ công, vì vậy điều này sẽ chỉ liệt kê các lệnh đã cài đặt ... Thêm vào đó, OP muốn có một danh sách các gói .
MoonSweep
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.