从命令行浏览 Ubuntu 应用程序

Sev*_*Tux 6 software-center command-line

我可以在 Gnome-Software 中浏览 Ubuntu 软件。而且它们分类得很好。我正在寻找这个的 CLI 版本。也就是说,我想从终端浏览应用程序,我可以在其中列出特定类别(例如游戏)下的所有应用程序。

在此处输入图片说明

我为什么要找这个?

如果我能能从终端浏览应用程序,搜索结果可以被高度利用的工具,如定制grepawk等...

Ser*_*nyy 4

已经存在的命令apt-cache dumpavail将列出所有启用的存储库中的所有可用包。在幕后,它实际上从存储在/var/lib/apt/lists/目录中的文件读取(我已经完成了strace该命令,这就是输出显示的内容)。我的猜测是 Gnome Software 解析这些完全相同的文件并将它们组织成类别。

Package:问题是,实际数据的行以包名称及其Section:所属的名称开头,但Section:行的组织方式与 Gnome 软件中的组织方式并不完全相同。然而,通过一点命令​​行魔法,我们可以接近这样的结果。我建议的是一个函数

filter_sections()
{
  apt-cache dumpavail | \
  awk -v SEARCH="$@" '/^Package:/{ PKG=$0  }\
    /Section:/ && $0~SEARCH {printf PKG" "$0"\n"}'
}
Run Code Online (Sandbox Code Playgroud)

使用该函数,我们可以按部分列出所有包,例如:

$ filter_sections web | head                                                   
Package: apache2 Section: web
Package: awstats Section: web
Package: curl Section: web
Package: heat-api Section: web
Package: heat-api-cfn Section: web
Package: heat-api-cloudwatch Section: web
Package: heat-common Section: web
Package: heat-engine Section: web
Package: javascript-common Section: web
Package: libapache2-mod-apparmor Section: web
Run Code Online (Sandbox Code Playgroud)

代码本身相当简单:我们将输出传递apt-cache dumpavailawk存储每个包名称的变量,如果该Section:行还包含我们匹配的字符串,我们将打印包名称和部分。

至于列出各个部分本身,也相当简单

apt-cache dumpavail | awk '/Section:/' | sort | uniq 
Run Code Online (Sandbox Code Playgroud)

这种方法的另一个好处是,有些人Sections提到了包属于哪个存储库,例如universe/pythonmultiverse/web。然而,该函数将搜索所有这些,但如果需要的话,我们总是可以过滤awk更多