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"?
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:
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 sed
kị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 uniq
sẽ không giúp với phiên bản đầu tiên, vì uniq
chỉ loại bỏ các bản sao nếu chúng nằm trên các dòng liền kề và sed
phiê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 -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 showpkg
cho thấy nó không có sự phụ thuộc nào cả.
aptitude
tì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 showpkg
phươ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ọ.
<package>
là một gói ảo ở đây. Giống như , editor
.
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ả.
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'
$ 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
$
Đọ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']
$
dựa trên ví dụ của bạn Tôi có thể liệt kê gói cung cấp editor
bằ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
apropos
tì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 .
sort -u
sẽ loại bỏ các bản sao, vì vậy cuộc gọi đếnuniq
khô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.aptitude
cũng sẽ phù hợpdoom-wad-editor
, vì vậy chúng không hoàn toàn tương đương.