在Debian中找到所有提供特定替代方案的软件包


12

Debian发行版具有Debian Alternatives系统。从Wiki:

Debian替代系统为几种实现相同或相似功能的程序创建了一种方式,将它们列为同时安装但指定为默认实施的替代实现。例如,许多系统同时安装了多个文本编辑器。vi程序是编辑器的经典示例,它具有许多实现,例如nvi,elvis,vim等,但是应将哪个指定为默认值?

通常,Debian中有多个提供特定替代方案的软件包。如何获得Debian存储库中所有此类软件包的完整列表?让我们以vi替代为例。

注意:对已安装的软件包列表进行这样的查询很容易,但这不是这个问题所要的。

Answers:


9

我知道这有点晚了,但是这篇文章是与在Debian中寻找替代品相关的热门搜索之一。

使用update-alternatives这里的问题是,据我所知,它只会显示您已安装的选件(其手册页相当稀疏)。

要回答标题中提出的问题,即查找提供替代方法的所有可用软件包(无论是否安装),您可以使用:

aptitude search '?provides(pattern)'

也可以缩写为:

aptitude search '~Ppattern'

pattern您要寻找的替代品的全部或部分在哪里?在的特定情况下vi,这实际上不起作用。如果您使用nvi和检查软件包,并vim使用aptitude showapt-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 2015年

从上下文来看,我认为aps必须代表aptitude search。但是您应该明确地使用它。但是,无论如何,我认为这不是一个可行的答案-也许它会有所改进。aptitude search -Pvi给出了大量无关的内容。我猜想它会搜索整个包装说明。
Faheem Mitha 2015年

aptitude search ~P(请注意波浪号)仅在中搜索Provides,但vi与其他Provides条目匹配;您需要使用来指定完全匹配aptitude search '~P^vi$'。这个例子强调了这种方法的基本局限性:虽然有vi替代方法,但没有vi虚拟包...
Stephen Kitt 2016年

5

这取决于。有一些替代方案,例如x-www-browser,不使用软件包,而是通过维护者脚本添加到update-alternatives的:

/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

还有其他一些人使用单个metapackage来安装相同二进制文件的任何版本(也想到了Java / OpenJRE软件包init)。其他人通过填充“ Provides”(通常会附带DPKG数据库的更新)来使用虚拟包,在这种情况下,任何这些包都应提供相同的二进制文件。

那么,如何查找提供特定文件的所有软件包?如果您知道可以使用该软件包以及apt-file search file其他所有功能,则可以使用Provides 。


例如vim?
Faheem Mitha 2014年

1
@FaheemMitha vim提供了editor
Braiam 2014年

是的 其他许多软件包也是如此,包括那些与vim无关的软件包。那么,在这种情况下,示例将是什么样?
Faheem Mitha 2014年

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如Braiam的回答所示,通过调用维护者脚本来处理替代系统,而包装系统的其余部分则对此一无所知。该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 2014年

1
正确。但是我在检查您的初始发布更新之前发布了此信息...您添加“在Debian存储库中存在”的部分
Andy

好吧,我有“所有这些软件包”,我认为这很清楚,但显然不是。对于那个很抱歉。无论如何,欢迎来到unix.sx。我看到你今天加入。
Faheem Mitha 2014年

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-file来创建数据库,因此没有其他替代方法(未经测试)。那里的意思和一样apt-file search ...

Ubuntu来源:https//launchpad.net/command-not-found


我不遵循您的建议。您能说得更清楚些吗?特别是/usr/lib/command-not-found /usr/bin/mail看起来像某种食谱,但我不知道该怎么做。一个解释会有所帮助。
Faheem Mitha

添加了一些词来澄清,并/usr/bin/从命令中删除,因为这不起作用。
simohe '17

好吧,我的问题是关于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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.