Пошук усіх програмних пакетів у Debian, які пропонують певну альтернативу


12

У дистрибутиві Debian є система альтернатив Debian . З Вікі:

Система альтернатив Debian створює спосіб для декількох програм, які виконують однакові або подібні функції, перераховані як альтернативні реалізації, які встановлюються одночасно, але з однією конкретною реалізацією, визначеною за замовчуванням. Наприклад, у багатьох системах встановлено кілька текстових редакторів одночасно. Програма vi - це класичний приклад редактора, який має безліч реалізацій, таких як nvi, elvis, vim тощо, але яку слід позначити як за замовчуванням?

Взагалі, в Debian є кілька пакетів, які пропонують певну альтернативу. Як можна отримати повний перелік усіх таких пакетів, які існують у сховищах Debian? Скористаємось альтернативою vi як приклад.

ПРИМІТКА. Зробити такий запит щодо списку встановлених пакетів досить просто, але це питання не задається цим питанням.

Відповіді:


9

Я знаю, що це трохи пізно, але наразі ця публікація є одним з найпопулярніших хітів пошуку, пов’язаних із пошуком альтернатив в Debian.

Проблема використання update-alternativesтут полягає в тому, що він покаже вам лише встановлені параметри, наскільки я можу сказати (його сторінка man є досить рідкою).

Щоб відповісти на запитання, поставлене в заголовку, тобто знайти всі доступні пакети, які надають альтернативу (встановлена ​​чи ні), ви можете використовувати:

aptitude search '?provides(pattern)'

який також можна скоротити до:

aptitude search '~Ppattern'

де patternвсе або частина альтернативи, яку ви шукаєте. У конкретному випадку viце насправді не працює. Якщо ви оглянете пакети nviта vimз aptitude showабо apt-cache show, ви побачите, що жоден з них не містить списку "vi" у розділі "Надає:". Насправді в описі nvi повністю відсутній цей розділ.

Однак він працює досить добре для інших альтернатив, таких як 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) 

Незважаючи на те, що це не ідеально, aptitudeмає неймовірно гнучкі можливості пошуку, які часто дозволять вам вирішити проблему пакунків, неправильно перелічуючи, які альтернативи вони надають - наприклад, використовуючи "~seditors ~dvi\s"як шаблон пошуку, перелічіть усі пакети в розділі "Редактори", чий Опис містить рядок "vi".

Іншим варіантом є використання веб-сайту пакунків Debian , де подібні пакети вказані в розділі праворуч.


1
Дякую за відповідь. Однак що таке aps ~Peditor? Якщо apsпризначений для скорочення сприйняття, добре, але не використовуйте це у відповіді, це просто заплутає всіх. Крім того, якщо ви думаєте, що немає провізорів, ви можете подати звіт про помилку до відповідного пакету.
Faheem Mitha

З контексту, я думаю, що apsслід виступати aptitude search. Але ви повинні використовувати це явно. Однак я не думаю, що це відповідь справна, можливо - це спрацює з певним уточненням. aptitude search -Pviдає навантаження непотрібних речей. Я здогадуюсь, що він шукає весь опис пакета.
Faheem Mitha

aptitude search ~P(зверніть увагу на тильду) здійснює пошук лише в Provides, але viвідповідає іншим Providesзаписам; вам потрібно вказати точну відповідність aptitude search '~P^vi$'. Цей приклад підкреслює фундаментальне обмеження цього підходу: хоча існує viальтернатива, viвіртуального пакету немає ...
Стівен Кітт

5

Це залежить. Є деякі альтернативи, такі як x-www-браузер, не використовують пакет і додаються за допомогою скриптів технічного обслуговування до альтернатив оновлення:

/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

Є й інші, які використовують один метапакет для встановлення будь-якої версії одного і того ж двійкового файлу (на розум також приходять пакети Java / OpenJRE init). Інші користуються віртуальним пакетом, заповнюючи "надає" (зазвичай це поповнюється оновленням бази даних альтернативних даних DPKG), і в цьому випадку будь-який із цих пакетів повинен забезпечувати той самий двійковий код.

Отже, як знайти всі пакунки, які надають певний файл? Я б скористався Провідниками, якщо ви знаєте пакет, який це робить, і apt-file search fileдля всього іншого.


Приклад для vim?
Faheem Mitha

1
@FaheemMitha ВІМ надає editor.
Брайам

Це робить. Так само робиться багато інших пакунків, включаючи ті, які не мають нічого спільного з vim. Отже, як виглядатиме приклад у цьому випадку?
Faheem Mitha

4

Віртуальні пакети та система альтернатив Debian (саме там, де використовуються бінарні файли), пов'язані між собою, але не однакові. Для віртуальних пакетів ви можете apt-cacheзнайти, які (справжні) пакети "надають" це:

$ 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

Для менеджерів дисплеїв віртуальний пакет 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

Система альтернатив обробляється дзвінками update-alternativesв сценарії технічного обслуговування, як показує відповідь Брайама, а решта системи упаковки про це блаженно не знають. ProvidesПоле також є більш загальним , ніж альтернативи, так як пакет може забезпечити іншу точку зору послуг або бібліотек , пропоновані, а не тільки з допомогою бінарних файлів.

Без технічного обслуговування пакетів, що додають інформацію про альтернативи до Providesполя (і створюють віртуальні пакети для всіх кінцевих точок альтернативних варіантів - як vi) і без огляду самих пакетів, наразі не існує загального способу, до якого пакет може запропонувати альтернативу.


2

Суворо пов'язане з питанням, щоб знайти альтернативу vi :

 update-alternatives --list editor

Вихід:

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

Або:

update-alternatives --config vi

Вихід:

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
Правильно, але це працює лише для встановленого пакету. Питання задає питання, як це зробити для всіх пакетів. Можливо, я мав би бути більш чітким у питанні.
Faheem Mitha

1
Правильно. Але я публікую це перед тим, як перевірити ваше первинне оновлення публікації ... ту частину, де ви додасте "які існують у сховищах Debian"
Енді,

Ну, у мене були "всі такі пакети", які я вважав зрозумілими, але, мабуть, ні. Вибач за це. У будь-якому випадку, ласкаво просимо до unix.sx. Я бачу, ти сьогодні приєднався.
Faheem Mitha

1

У Ubuntu пакет command-not-foundмістить базу даних, що містить також безліч альтернатив. Після установки його можна запитати /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(перелічити альтернативи для mail).
Обережно, коли ви не хочете, щоб автоматичні пропозиції щодо відсутніх команд у bash писали unset -f command_not_found_handleу своєму ~ / .bashrc або видаляйте визначення у всьому світі /etc/bash.bashrc. (Зробіть подібне для zsh.)

У Debian цей інструмент використовує лише apt-файл для створення бази даних, тому альтернативи не відомі (не перевірені). Там він розповідає те саме, що і apt-file search ....

Джерело Ubuntu: https://launchpad.net/command-not-found


Я не дотримуюся того, що ти пропонуєш. Чи можете ви бути більш чіткими? Зокрема, це /usr/lib/command-not-found /usr/bin/mailсхоже на якийсь рецепт, але я не розумію, що це робити. Пояснення було б корисним.
Faheem Mitha

Додано кілька слів для уточнення та видалено /usr/bin/з команди, оскільки це не працює.
simohe

Ну, моє питання стосується Debian, а не Ubuntu. Хоча я не розумію, чому Debian і Ubuntu відрізняються тут. І дійсно команда, яку ви перераховуєте, тут нічого корисного не робить. # /usr/lib/command-not-found mail Command 'mail' is available in '/usr/bin/mail' mail: command not found.
Faheem Mitha

Відповідь повідомляє, що mailвже встановлено. Цю перевірку можна пропустити за допомогою параметра --ignore-installed. Але також після цього ви не отримаєте більше інформації (в debian), ніж від apt-file search mail.
simohe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.