Tìm tất cả các gói phần mềm trong Debian cung cấp một sự thay thế cụ thể


12

Bản phân phối Debian có Hệ thống thay thế Debian . Từ Wiki:

Hệ thống thay thế Debian tạo ra một cách để một số chương trình thực hiện các chức năng tương tự hoặc tương tự được liệt kê dưới dạng các triển khai thay thế được cài đặt đồng thời nhưng với một triển khai cụ thể được chỉ định làm mặc định. Ví dụ, nhiều hệ thống có một số trình soạn thảo văn bản được cài đặt cùng một lúc. Chương trình vi là một ví dụ cổ điển của một trình soạn thảo có nhiều triển khai như nvi, elvis, vim, v.v. nhưng cái nào nên được chỉ định làm mặc định?

Nói chung, có nhiều gói trong Debian cung cấp một sự thay thế cụ thể. Làm thế nào để có được một danh sách đầy đủ tất cả các gói như vậy tồn tại trong kho Debian? Hãy để chúng tôi sử dụng thay thế vi làm ví dụ.

LƯU Ý: Thực hiện một truy vấn như vậy đối với danh sách các gói đã cài đặt là dễ dàng, nhưng đó không phải là những gì câu hỏi này yêu cầu.

Câu trả lời:


9

Tôi biết điều này hơi muộn, nhưng bài đăng này hiện là một trong những lượt tìm kiếm hàng đầu liên quan đến việc tìm kiếm các lựa chọn thay thế trong Debian.

Vấn đề với việc sử dụng update-alternativesở đây là nó sẽ chỉ hiển thị cho bạn các tùy chọn đã cài đặt theo như tôi có thể nói (trang man của nó khá thưa thớt).

Để trả lời câu hỏi như được đặt ra trong tiêu đề, tức là tìm tất cả các gói có sẵn cung cấp giải pháp thay thế (dù đã cài đặt hay chưa), bạn có thể sử dụng:

aptitude search '?provides(pattern)'

cũng có thể được viết tắt là:

aptitude search '~Ppattern'

nơi patternlà tất cả hoặc một phần của phương án bạn đang tìm kiếm. Trong trường hợp cụ thể vi, điều này không thực sự hiệu quả. Nếu bạn kiểm tra các gói nvivimvới aptitude showhoặc apt-cache show, bạn sẽ thấy rằng không ai liệt kê "vi" trong phần "Cung cấp:" của nó. Trong thực tế, mô tả của nvi hoàn toàn thiếu phần đó.

Tuy nhiên, nó hoạt động hợp lý tốt cho các lựa chọn thay thế khác, chẳng hạn như editor:

$ aptitude search '~Peditor'
p   deutex                         - composition tool for doom-style WAD files
p   edbrowse                       - /bin/ed-alike webbrowser written in C    
p   emacs24                        - GNU Emacs editor (with GTK+ GUI support) 
p   emacs24-lucid                  - GNU Emacs editor (with Lucid GUI support)
p   emacs24-nox                    - GNU Emacs editor (without GUI support)   
p   fte-console                    - Text editor for programmers - console edi
p   fte-terminal                   - Text editor for programmers - version for
p   fte-xwindow                    - Text editor for programmers - X Window Sy
p   jed                            - editor for programmers (textmode version)
p   jove                           - Jonathan's Own Version of Emacs - a compa
p   jupp                           - user friendly full screen text editor    
p   le                             - Text editor with block and binary operati
p   ledit                          - line editor for interactive programs     
p   levee                          - very small vi clone                      
p   mg                             - microscopic GNU Emacs-style editor       
p   nano                           - small, friendly text editor inspired by P
p   nano-tiny                      - small, friendly text editor inspired by P
p   ne                             - easy-to-use and powerful text editor     
p   pluma                          - official text editor of the MATE desktop 
p   rlfe                           - Front-end using readline to "cook" input 
p   rlwrap                         - readline feature command line wrapper    
p   scite                          - Lightweight GTK-based Programming Editor 
p   vigor                          - nvi with the evil paperclip              
p   vile                           - VI Like Emacs - vi work-alike            
p   vim                            - Vi IMproved - enhanced vi editor         
p   vim-athena                     - Vi IMproved - enhanced vi editor - with A
p   vim-gnome                      - Vi IMproved - enhanced vi editor - with G
i   vim-gtk                        - Vi IMproved - enhanced vi editor - with G
p   vim-nox                        - Vi IMproved - enhanced vi editor - with s
i   vim-tiny                       - Vi IMproved - enhanced vi editor - compac
p   xjed                           - editor for programmers (x11 version)     
p   xul-ext-password-editor        - edit password manager entries in Mozilla 
p   xvile                          - VI Like Emacs - vi work-alike (X11) 

Mặc dù đây không phải là hoàn hảo, aptitudekhả năng tìm kiếm cực kỳ linh hoạt mà thường sẽ cho phép bạn làm việc xung quanh vấn đề các gói không niêm yết một cách chính xác mà lựa chọn thay thế họ provide- ví dụ sử dụng "~seditors ~dvi\s"như một mô hình tìm kiếm sẽ liệt kê tất cả các gói trong "biên tập" phần mà mô tả chứa chuỗi "vi".

Một tùy chọn khác là sử dụng trang web gói của Debian , trong đó các gói tương tự được liệt kê trong phần bên phải.


1
Cảm ơn bạn đã trả lời. Tuy nhiên, là aps ~Peditorgì? Nếu apsđược dự định là một lối tắt cho năng khiếu, tốt thôi, nhưng xin đừng sử dụng nó trong câu trả lời, nó sẽ chỉ khiến mọi người bối rối. Ngoài ra, nếu bạn nghĩ rằng thiếu các cung cấp, bạn có thể gửi báo cáo lỗi đối với (các) gói tương ứng.
Faheem Mitha

Từ bối cảnh, tôi nghĩ apsphải đứng cho aptitude search. Nhưng bạn nên sử dụng nó một cách rõ ràng. Tuy nhiên, tôi không nghĩ là một câu trả lời khả thi, bất kể - có thể nó sẽ hoạt động với một số tinh chỉnh. aptitude search -Pvicung cấp cho một tải các công cụ không liên quan. Tôi đoán nó tìm kiếm toàn bộ mô tả gói.
Faheem Mitha

aptitude search ~P(lưu ý dấu ngã) chỉ tìm kiếm trong Provides, nhưng vikhớp với các Providesmục khác ; bạn cần xác định một kết hợp chính xác với aptitude search '~P^vi$'. Ví dụ này nêu bật một hạn chế cơ bản với cách tiếp cận này: mặc dù có một giải vipháp thay thế, không có vigói ảo ...
Stephen Kitt

5

Điều này phụ thuộc. Có một số lựa chọn thay thế, như trình duyệt x-www, không sử dụng gói và được thêm thông qua các tập lệnh bảo trì vào các lựa chọn thay thế cập nhật:

/var/lib/dpkg/info/iceweasel.postinst:    update-alternatives --install /usr/bin/x-www-browser \
/var/lib/dpkg/info/iceweasel.postinst:    update-alternatives --remove mozilla /usr/bin/iceweasel
/var/lib/dpkg/info/iceweasel.postinst:    update-alternatives --install /usr/bin/gnome-www-browser \
/var/lib/dpkg/info/iceweasel.prerm:    update-alternatives --remove x-www-browser /usr/bin/iceweasel
/var/lib/dpkg/info/iceweasel.prerm:    update-alternatives --remove gnome-www-browser /usr/bin/iceweasel
/var/lib/dpkg/info/chromium.postinst:    update-alternatives --install /usr/bin/x-www-browser \
/var/lib/dpkg/info/chromium.postinst:    update-alternatives --install /usr/bin/gnome-www-browser \
/var/lib/dpkg/info/chromium.prerm:    update-alternatives --remove x-www-browser /usr/bin/chromium
/var/lib/dpkg/info/chromium.prerm:    update-alternatives --remove gnome-www-browser /usr/bin/chromium

Có những cái khác sử dụng một siêu dữ liệu duy nhất để cài đặt bất kỳ phiên bản nào của cùng một nhị phân (các gói Java / OpenJRE cũng xuất hiện trong tâm trí init). Những người khác sử dụng gói ảo, bằng cách điền vào "Cung cấp" (điều này thường đi kèm với bản cập nhật cho cơ sở dữ liệu DPKG thay thế) trong trường hợp đó, bất kỳ gói nào trong số đó sẽ cung cấp cùng một nhị phân.

Vì vậy, làm thế nào để tìm tất cả các gói cung cấp một tập tin cụ thể? Tôi sẽ sử dụng Cung cấp nếu bạn biết một gói nào và apt-file search filecho mọi thứ khác.


Ví dụ cho vim?
Faheem Mitha

1
@FaheemMitha vim cung cấp editor.
Braiam

Nó làm. Vì vậy, nhiều gói khác, bao gồm cả những gói không liên quan đến vim. Vì vậy, một ví dụ sẽ trông như thế nào trong trường hợp này?
Faheem Mitha

4

Các gói ảohệ thống thay thế Debian (là nơi các nhị phân phát huy tác dụng) có liên quan nhưng không giống nhau. Đối với các gói ảo, bạn có thể sử dụng apt-cacheđể tìm gói nào (thực) "cung cấp" nó:

$ apt-cache showpkg awk
Package: awk
Versions: 

Reverse Depends: 
  base-files,awk
  base-files,awk
Dependencies: 
Provides: 
Reverse Provides: 
mawk:i386 1.3.3-17ubuntu2
gawk:i386 1:4.0.1+dfsg-2.1ubuntu2
original-awk 2012-12-20-1
mawk 1.3.3-17ubuntu2
gawk 1:4.0.1+dfsg-2.1ubuntu2

Đối với người quản lý hiển thị, gói ảo là x-display-manager:

$ apt-cache showpkg x-display-manager
Package: x-display-manager
Versions: 

Reverse Depends: 
  utf8-migration-tool,x-display-manager
  razorqt,x-display-manager
  lxde,x-display-manager
  numlockx,x-display-manager
  ltsp-client-core,x-display-manager
Dependencies: 
Provides: 
Reverse Provides: 
gdm 3.10.0.1-0ubuntu3.1
lightdm 1.10.6-0ubuntu1
kdm 4:4.11.11-0ubuntu0.2
xdm 1:1.1.11-1ubuntu1
wdm 1.28-16
slim 1.3.4-2.1
lxdm 0.4.1-0ubuntu6
kdm 4:4.11.8-0ubuntu6
gdm 3.10.0.1-0ubuntu3
lightdm 1.10.0-0ubuntu3

Hệ thống thay thế được xử lý bằng các lệnh gọi update-alternativestrong tập lệnh bảo trì như câu trả lời của Braiam cho thấy, và phần còn lại của hệ thống đóng gói không biết gì về những điều này. Các Provideslĩnh vực cũng là tổng quát hơn lựa chọn thay thế, kể từ khi một gói có thể cung cấp một trong các điều khoản của dịch vụ hoặc các thư viện cung cấp, không chỉ đơn thuần thông qua mã nhị phân.

Nếu không có người bảo trì gói thêm thông tin về các lựa chọn thay thế vào Providestrường (và tạo các gói ảo cho tất cả các điểm cuối của các lựa chọn thay thế - vivà không tự kiểm tra các gói, hiện tại không có cách nào chung cho đến khi gói nào có thể cung cấp giải pháp thay thế.


2

Liên quan chặt chẽ đến câu hỏi, để tìm vi thay thế:

 update-alternatives --list editor

Đầu ra:

/bin/ed
/bin/nano
/usr/bin/mcedit
/usr/bin/vim.basic
/usr/bin/vim.tiny

Hoặc là:

update-alternatives --config vi

Đầu ra:

There are 2 choices for the alternative vi (providing /usr/bin/vi).



Selection    Path                Priority   Status

------------------------------------------------------------

* 0            /usr/bin/vim.basic   30        auto mode

  1            /usr/bin/vim.basic   30        manual mode

  2            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number:

3
Đúng, nhưng điều đó chỉ hoạt động cho gói cài đặt. Câu hỏi hỏi làm thế nào để làm điều đó cho tất cả các gói. Có lẽ tôi nên rõ ràng hơn trong câu hỏi.
Faheem Mitha

1
Chính xác. Nhưng tôi đăng bài này trước khi kiểm tra cập nhật bài đăng ban đầu của bạn ... phần bạn thêm "tồn tại trong kho Debian"
Andy

Vâng, tôi đã có "tất cả các gói như vậy", mà tôi nghĩ là rõ ràng, nhưng dường như không. Xin lỗi vì điều đó. Dù sao, chào mừng đến với unix.sx. Tôi thấy bạn tham gia ngày hôm nay.
Faheem Mitha

1

Trong Ubuntu , gói command-not-foundchứa một cơ sở dữ liệu cũng chứa nhiều lựa chọn thay thế. Sau khi cài đặt, nó có thể được truy vấn /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(để liệt kê các lựa chọn thay thế cho mail).
Cẩn thận, khi bạn không muốn các đề xuất tự động về các lệnh bị thiếu trong bash, hãy viết unset -f command_not_found_handlevào ~ / .bashrc của bạn hoặc xóa định nghĩa trên toàn cầu /etc/bash.bashrc. (Làm tương tự cho zsh.)

Trong Debian , công cụ này chỉ sử dụng tệp apt để tạo cơ sở dữ liệu, do đó không có lựa chọn thay thế nào được biết đến (không được kiểm tra). Ở đó nó nói giống như apt-file search ....

Nguồn Ubuntu: https://launchpad.net/command-not-found


Tôi không làm theo những gì bạn đang đề xuất. Bạn có thể rõ ràng hơn? Đặc biệt /usr/lib/command-not-found /usr/bin/mailtrông giống như một số loại công thức, nhưng tôi không hiểu nó phải làm gì. Một lời giải thích sẽ hữu ích.
Faheem Mitha

Đã thêm một số từ để làm rõ và xóa /usr/bin/khỏi lệnh vì điều này không hoạt động.
simohe

Chà, câu hỏi của tôi là về Debian, không phải Ubuntu. Mặc dù tôi không hiểu tại sao Debian và Ubuntu lại khác nhau ở đây. Và thực sự lệnh bạn liệt kê không có gì hữu ích ở đây. # /usr/lib/command-not-found mail Command 'mail' is available in '/usr/bin/mail' mail: command not found.
Faheem Mitha

Câu trả lời cho biết mailđã được cài đặt. Kiểm tra này có thể được bỏ qua với tùy chọn --ignore-installed. Nhưng cũng sau đó, bạn sẽ không nhận được nhiều thông tin (bằng debian) hơn từ apt-file search mail.
simohe
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.