我启动了一个新的 AWS EC2 实例 (Amazon Linux AMI)。我可以像这样在机器上安装 Java 1.8.0:
sudo yum install java-1.8.0
我还可以使用以下命令安装:
sudo yum install java-1.8.0-openjdk
两种情况下都会安装相同的软件包和依赖项。当我执行以下操作时,我收到“没有要列出的匹配包”:
yum info java-1.8.0
当我执行以下操作时,“java-1.8.0”不会出现在列表中,仅出现“java-1.8.0-openjdk”:
yum search java-1.8.0
我的相关问题是:
- 为什么“sudo yum install java-1.8.0”有效?它是 yum 存储库上的别名吗?
- 如果这确实是别名,我怎么知道它存在?有没有办法搜索或列出别名?
最佳答案
如果“yum install”找不到具有指定名称的软件包,它将查找提供具有该名称的功能的软件包。从 yum 手册页的安装部分:
If the name doesn’t match a package, then package "provides" are searched (e.g. "_sqlite-cache.so()(64bit)") as are filelists (Eg. "/usr/bin/yum").
“java-1.8.0”被列为 java-1.8.0-openjdk RPM 中的一项功能,这就是通过“yum install java-1.8.0-openjdk”安装它的原因。如果 yum 中有其他软件包提供该功能,您也可以轻松地获得其中一个软件包。我不确定 yum 如何在提供相同功能的多个软件包之间进行选择,但如果应用程序的特定风格/版本对您来说非常重要,那么我不会依赖它。
如果您安装 yum-utils,repoquery 命令可以向您显示有关软件包功能的信息(以及许多其他内容)。例如,repoquery --provides java-1.8.0-openjdk 将列出该包提供的所有功能。要搜索提供 java-1.8.0 功能的所有包,您可以使用 repoquery --whatprovides java-1.8.0
或仅 yumprovided java-1.8.0
>。请注意,在 yum 中,“whatprovides”与“provides”相同;两者都搜索提供指定功能的包。如果想要获取指定包中的功能,则需要使用repoquery。 (如果您已经安装或下载了要查询的软件包,则 rpm 命令也可以使用。)
关于java - 'yum install java-1.8.0' 是某种别名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39551163/