Sev*_*Tux 6 software-center command-line
我可以在 Gnome-Software 中浏览 Ubuntu 软件。而且它们分类得很好。我正在寻找这个的 CLI 版本。也就是说,我想从终端浏览应用程序,我可以在其中列出特定类别(例如游戏)下的所有应用程序。
我为什么要找这个?
如果我能能从终端浏览应用程序,搜索结果可以被高度利用的工具,如定制grep,awk等...
已经存在的命令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 dumpavail给awk存储每个包名称的变量,如果该Section:行还包含我们匹配的字符串,我们将打印包名称和部分。
至于列出各个部分本身,也相当简单
apt-cache dumpavail | awk '/Section:/' | sort | uniq
Run Code Online (Sandbox Code Playgroud)
这种方法的另一个好处是,有些人Sections提到了包属于哪个存储库,例如universe/python或multiverse/web。然而,该函数将搜索所有这些,但如果需要的话,我们总是可以过滤awk更多