在 Synaptic 中,可以按部分列出软件包。例如,下图列出了“业余无线电(宇宙)”部分的所有软件包。
如何在命令行中获取这样的列表(编辑:带有包描述)?
我需要一个原始列表;像这样的终端应用程序aptitude
不行。
答案1
确保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 中显示的字符串“业余无线电”。
请参阅手册页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