我看到dpkg有一个“提供”字段的包。
$ apt-cache show vim-tiny | grep Provides Provides: editor $
我怎么知道哪些包提供,即“编辑”?
您可以使用apt-cache showpkg (其中包含Reverse Provides apt-cache showpkg的列表),在没有aptitude情况下达到预期的效果(现在看起来很沮丧)。 通过一个小的sed脚本来处理它将会摆脱其他的东西:
apt-cache showpkg <package> | sed '/Reverse Provides/,$!d'
用awk可以实现一个稍微漂亮(但是更长的types)的例子(只列出软件包名称,而不是版本,并按字母顺序sorting)
apt-cache showpkg httpd | awk '/Pa/, /Reverse P/ {next} {print $1 | "sort"}'
…这可以通过uniqpipe道删除重复(可能存在由于多个版本的包被反向提供)。 请注意, uniq的使用对第一个版本没有帮助,因为uniq只删除重复项,如果它们在相邻的行上,并且sed版本不对输出进行sorting。
最后,可以定义一个更容易使用的函数,如下所示:
provides () { apt-cache showpkg $1 | awk '/Pa/, /Reverse P/ {next} {print $1 | "sort"}' | uniq;}
把它放在(例如) .bashrc ,这样它会在shell执行时加载,并且可以运行provides <package>来获得一个包的反向提供。
$ 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 $
Aptitude也提供了这个function。 所以像这样的命令将显示所有提供编辑器的软件包。
aptitude search '~Peditor'
你甚至可以添加其他约束。 像只显示已安装的编辑器一样。
aptitude search '~i~Peditor'
直接读取数据库:
#!/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)))
用法:
$ python3 whichPkgsProvide.py editor < /var/lib/dpkg/available ['vim-gnome', 'nano', 'vim-tiny'] $
根据你的例子。 我可以通过使用apropos列出包提供的editor
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