如何从命令行获取存储库部分中所有包的列表?
在Synaptic中,可以按部分列出包。 例如,在下图中列出了“业余无线电(宇宙)”部分的所有包。
如何在命令行中获取这样的列表(编辑:包描述)?
我需要一份原始清单; 像aptitude
这样的终端应用程序不会这样做。
好吧,虽然你说你不想因为输出而使用aptitude,你需要知道你可以修改它来得到你喜欢的东西:
aptitude -F'|%p|%d|' search '?section(hamradio)'
诀窍是在-F
开关中修改输出格式。 %p
表示包裹。 当包具有各种体系结构(即amd64 vs i386)和输出描述的%d
,这也会输出。 您可以对搜索模式进行个性化设置,例如未安装的软件包:
aptitude -F'|%p|%d|' search '?section(hamradio) !~i'
哪里~i
意思是安装和!
是不是,所以它读作“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'
确保dctrl-tools 包已安装。 它提供了用于搜索apt和dpkg包列表的有用命令。 要获得可以使用apt安装的特定部分中的所有包的完整描述,请运行
grep-aptavail -F Section hamradio
这将显示hamradio
部分中每个包的完整包元数据。 如果您只想查看包名称,请运行
grep-aptavail -n -F Section -s Package hamradio
如果您的系统设置为multiarch,则如果该系统是针对多个体系结构构建的,则此列表中可能会出现多次。 因此,要进一步改进,请使用其中之一
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 Radio”。
有关所有选项和一些示例的完整说明,请参阅grep-aptavail的手册页。
单行上的更多字段,带有任意分隔符
以下单行将在一行中打印存储库部分的所有唯一包名及其描述。 所有字段都由管道字符分隔,即准备转换为Markdown管道表 。 结果表可以在我的网站上找到。
grep-aptavail -n -s Package,Description -F Section hamradio |paste -sd '||\n' |sed 's:^:|:' |sort -u
您可以使用以下命令获取属于给定Section的包列表:
$ 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