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

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

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

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

我需要一个原始列表;像这样的终端应用程序aptitude不行。

突触

答案1

确保dctrl 工具安装 dctrl-tools软件包已安装。它提供了用于搜索 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 中显示的字符串“业余无线电”。

请参阅手册页grep-aptavail了解所有选项的完整描述和一些示例。

答案2

好吧,尽管你说你不想使用 aptitude,因为输出的结果不好,但你需要知道你可以修改它来得到你喜欢的东西:

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

诀窍在于-F修改输出格式的开关。%p表示包。当包具有各种体系结构(即 amd64 与 i386)时,这也会输出,并%d输出描述。您可以进一步个性化搜索模式,例如未安装的包:

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

其中~i表示已安装,而 表示!未安装,因此读作“未(!)安装(~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'

答案3

单行上有多个字段,可使用任意分隔符

以下一行代码将打印存储库部分的所有唯一包名称,以及它们的描述,每行一个。所有字段都用管道符分隔,即准备转换成Markdown 管道表。 这结果表可在我的网站上找到。

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

答案4

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

$ 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

相关内容