如何从命令行获取存储库部分中所有软件包的列表?


13

在Synaptic中,可以按部分列出软件包。例如,在下面的图像中列出了“业余无线电(宇宙)”部分的所有程序包。

如何在命令行中获得这样的列表(编辑:带有软件包描述)?

我需要一份原始清单。像这样的终端应用程序aptitude不会这样做。

突触的


apt-cache搜索shell
Panther

@ bodhi.zazen是一个很好的建议,但不仅搜索该部分
Steven Penny

Answers:


5

好吧,尽管您说由于输出而不想使用智能性,但是您需要知道可以对其进行修改以获得所需的内容:

aptitude -F'|%p|%d|' search '?section(hamradio)'

诀窍在-F修改输出格式的开关中。%p表示包装。当程序包具有各种体系结构(即amd64与i386)时,也会输出%d该输出,并输出描述。您甚至可以针对未安装的软件包对搜索模式进行个性化设置:

aptitude -F'|%p|%d|' search '?section(hamradio) !~i'

where ~i表示已安装,而!not则表示未安装,因此其读作为“ not(!)installed(〜i)”,或者如果您只希望对体系结构可用的内容:

aptitude -F'|%p|%d|' search '?section(hamradio) ~r native'

~r?architecture()与软件包的体系结构匹配的,并且native仅列出与系统具有相同体系结构的软件包,等效于dpkg --print-architecture

因此,前一行可以更简洁地写为:

aptitude -F'|%p|%d|' search '~s hamradio ~r native'

非常优雅,尤其是-F'|%p|%d|'。但是,是否可能不:i386通过!search字符串中添加-expression来列出软件包?
Serge Stroobandt,2014年

1
@GinGordon是的,只需添加~r native搜索词。~r?architecture与软件包的体系结构匹配的,并且native仅列出与系统具有相同体系结构的软件包,等效于dpkg --print-architecture。顺便说一句,您想要带有包装说明的列表吗?
布里亚姆2014年

大!是的,我已经编辑了问题以包括包装说明。请相应地编辑您的答案,您将以最简洁的方式获得我的最佳答案投票。
Serge Stroobandt,2014年

@GinGordon查看。
布里亚姆2014年

1
@GinGordon,如果您安装该aptitude-doc软件包并/usr/share/doc/aptitude/html/en/index.html使用浏览器导航到,则会在file:///usr/share/doc/aptitude/html/en/ch02s04s05.html所有讨厌的特权中找到。
Braiam

11

确保已安装dctrl-tools安装dctrl工具软件包。它提供了有用的命令来搜索apt和dpkg软件包列表。要获取可使用apt安装的特定部分中所有软件包的完整描述,请运行

grep-aptavail -F Section hamradio

这将显示此hamradio部分中每个软件包的完整软件包元数据。如果您只想查看软件包名称,请运行

grep-aptavail -n -F Section -s Package hamradio

如果您的系统是针对多体系结构设置的,并且同一软件包是针对多个体系结构构建的,则该软件包可能在此清单中多次显示。因此,要进一步完善此方法,请使用

grep-aptavail -n -F Section -s Package hamradio | sort | uniq

要么

grep-aptavail -n -F Section -s Package hamradio | sort -u

对软件包列表进行排序并删除相同名称的重复软件包。

请注意,您将必须使用该部分的实际名称,该名称与Synaptic在其GUI中显示的“人类可读”名称不同。例如,上面的搜索使用部分名称hamradio而不是Synaptic中显示的字符串“ Amateur Ra​​dio”。

有关所有选项和一些示例的完整说明,请参见手册页中的grep-aptavail


3

一行中有更多字段,带有任意分隔符

以下单行代码将在一行中打印存储库部分的所有唯一软件包名称及其描述。所有字段均由竖线字符分隔,即可以转换为Markdown管道表。该结果表可以在我的网站上找到。

grep-aptavail -n -s Package,Description -F Section hamradio |paste -sd '||\n' |sed 's:^:|:' |sort -u

2

您可以使用以下命令来获取属于给定节的软件包列表:

$ dpkg-query -W -f='${binary:Package} ${Section}\n' | awk '{if ($2 == "shells") {print $1}}'
bash
bash-completion
busybox-initramfs
busybox-static
dash
zsh
zsh-common
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.