如何从命令行确定一个包是否是元包?

如何从命令行确定一个包是否是元包?

我如何通过命令行(可能是通过 apt-get、aptitude 还是 apt-cache)确定某个包是否是元包?

我努力了:

apt-cache show texlive-full
apt-cache showpkg texlive-full

但我判断这个包是元包的唯一方法是通过阅读“en-description”字段。

有没有更自动化的方法来做到这一点,可以给我一个是/否的回应,或者至少有一个专门用于此的字段,例如“en-description”?

答案1

元包没有正式的定义。非正式的定义是,元包仅用于安装其依赖项,不包含其自身的有用文件。

您可以将元包定义为不包含任何文件的包。无法从包数据库中确定这一点。您可以使用文件数据库并检查包是否仅包含目录(许多此类包包含几个目录)。事实上,大多数元包包含几个文件/usr/share/doc/<package name>:一个文件、一个更改日志,有时还有更多。以下是将元包定义为仅包含文件(不包含在其子目录中)和主要目录中的copyright近似值:/usr/share/doc/<some directory>

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
  echo "$package looks like a metapackage"
fi

另一种方法是寻找包装标签debtags. 元包中有几个常用的标签。

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

另一种方法是寻找体积较小的软件包。每个目录计为 4 kB,因此在选择阈值时要进行相应的规划(再次强调,这只是一个近似值)。

aptitude -F '%I %p' search "~n^$package\$"

经过思考,我想知道你的意思是虚拟包而不是元包。虚拟包实际上不是包,而是Provides:字段中使用的包名称。您可以使用 列出它们aptitude search '~v'。运行apt-cache show其中一个会显示“无法从包‘zcav’中选择版本,因为它是纯虚拟的”。运行aptitude show会列出提供它的包。显示虚拟包的一种便捷方法是使用apt-cache:这会为非虚拟包打印一行,为虚拟包打印可能多行(每个提供商一行)——即使只有一个提供商,您也可以判断包是否是虚拟的,因为提供商的名称不同。

apt-cache -n search "^$package\$"

答案2

您可以尝试输入

apt-cache search 'metapackage | meta-package'

这将为你提供一个长列表,然后使用grep,比如显示所有与科学相关的元包

apt-cache search 'metapackage | meta-package' | grep -i science

这将返回一个长列表(我有缩短在这里)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

您可以使用任意数量的科学替代方案,例如KDE查找所有KDE元包。

这可能是你能用 做的最好的事情了apt-cache,但它应该能快速找到你想要的大部分元包。如果它没有找到你想要的一切,最简单的方法就是在 中的元包部分中查找Synaptic

相关内容