Jan*_*sen 9 package-management dpkg apt
我看到 dpkg 有一个包的“提供”字段。
$ apt-cache show vim-tiny | grep Provides
Provides: editor
$
Run Code Online (Sandbox Code Playgroud)
我怎么知道哪些软件包提供了“编辑器”?
Aptitude 也提供此功能。所以像这样的命令将显示所有提供编辑器的包。
aptitude search '~Peditor'
Run Code Online (Sandbox Code Playgroud)
您甚至可以添加其他约束。就像只显示已安装的编辑器一样。
aptitude search '~i~Peditor'
Run Code Online (Sandbox Code Playgroud)
$ 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
$
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以通过使用 来实现所需的效果,而无需aptitude使用(现在似乎不鼓励这样做)apt-cache showpkg,其中包括Reverse Provides. 通过一个小脚本进行管道传输sed将消除其他事情:
apt-cache showpkg <package> | sed '/Reverse Provides/,$!d'
Run Code Online (Sandbox Code Playgroud)
一个稍微漂亮(但输入时间更长)的示例(仅列出包名称,而不列出版本,并按字母顺序对它们进行排序)可以通过以下方式实现awk:
apt-cache showpkg httpd | awk '/Pa/, /Reverse P/ {next} {print $1 | "sort"}'
Run Code Online (Sandbox Code Playgroud)
...这可以通过管道来uniq删除重复项(由于反向提供了多个版本的包,可能会存在重复项)。请注意,使用uniq不会对第一个版本有帮助,因为uniq仅删除相邻行上的重复项,并且该sed版本不会对输出进行排序。
最后,可以定义一个函数以方便使用,如下:
provides () { apt-cache showpkg $1 | awk '/Pa/, /Reverse P/ {next} {print $1 | "sort"}' | uniq;}
Run Code Online (Sandbox Code Playgroud)
将其粘贴到 (例如) 中.bashrc,以便它会在 shell 加载时加载,并且可以运行provides <package>以获取包的反向提供。