Cir*_*郝海东 14 package-management metapackages
如何从命令行确定一个包是否是元包,可能是通过 apt-get、aptitude 或 apt-cache?
我试过了:
apt-cache show texlive-full
apt-cache showpkg texlive-full
Run Code Online (Sandbox Code Playgroud)
但我能告诉这个包是元的唯一方法是阅读“en-description”字段。
有没有更自动的方法来做到这一点,这会给我是/否的回应,或者至少有一个专门用于此的字段,例如“en-description”?
元包没有正式的定义。非正式的定义是元包是一个只打算为其依赖项安装并且不包含自己的有用文件的元包。
您可以将元包定义为不包含文件的包。无法从包数据库中确定这一点。您可以使用文件数据库并检查包是否仅包含目录(许多此类包包含几个目录)。事实上,大多数元包包含以下几个文件/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
Run Code Online (Sandbox Code Playgroud)
另一种方法是寻找一个包装标签与debtags
。元数据包上常用的标签有几个。
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
Run Code Online (Sandbox Code Playgroud)
另一种方法是寻找小尺寸的包装。每个目录计为 4 kB,因此在选择阈值时相应地计划(同样,这是一个近似值)。
aptitude -F '%I %p' search "~n^$package\$"
Run Code Online (Sandbox Code Playgroud)
经过反思,我想知道您的意思是虚拟包而不是元包。虚拟包实际上不是包而是Provides:
字段中使用的包名。你可以用 列出它们aptitude search '~v'
。apt-cache show
在一个上运行显示“无法从包 'zcav' 中选择版本,因为它是纯虚拟的”。运行aptitude show
列出了提供它的包。显示虚拟包的一种方便的方法是apt-cache
:这会为非虚拟包打印一行,对于虚拟包可能会打印多行(每个提供者一行)——即使只有一个提供者,您也可以判断该包是否是虚拟的因为提供者的名称不同。
apt-cache -n search "^$package\$"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4690 次 |
最近记录: |