事情缘由


今天在centos安装java开发环境,想当然的用了以下命令完成安装:

# yum groupinstall "Java 平台"


谁知道,安装完毕做编译测试是却发现一个命令:"javac"愣是找不到。这下我就郁闷了,你说安装java吧,我把java的平台相关的安装包都安装了。这个javac到底是哪里来的?


网上找一下,终于发现一个有用的命令:

yum provides "*/javac"


一查,结果如下:

1:java-1.6.0-openjdk-devel-1.6.0.0-1.57.1.11.9.el6_4.x86_64 : OpenJDK Development Environment
Repo        : base
Matched from:
Filename    : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/bin/javac


原来 javac 在rpm包 "java-1.6.0-openjdk-devel" 里,运行

yum install java-1.6.0-openjdk-devel

然后检查:

# which javac

得出结果:

/usr/bin/javac


终于找到你了!!


关于“yum provides ”

provides 功能检测软件包中包含的文件以及软件提供的功能。与 search 相比,这个选项要求 yum 下载并读取一个很大的索引文件。

要搜索所有包含文件 command_file 的软件包,输入:

su -c 'yum provides command_file'

运行就可以值得关于某个命令(其实就是文件)相关的rpm包。


注意

新版yum似乎格式已经改变了,直接敲打上述命令,会报错:

# yum provides "command_file"
Warning: 3.0.x versions of yum would erroneously match against filenames.
 You can use "*/command_file" and/or "*bin/command_file" to get that behaviour
No Matches found

遇到这个错误,可以使用新的格式查询rpm包:

# yum provides "/command_file"