作者:fbysss
前言:Centos下,Java已经安装好了,1.7版本的,但是并没有JAVA_HOME等环境变量。于是:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
但是,OpenJDK和Oracle的JDK还是有所不同。安装官方的版本感觉更好。
于是,下载Jdk7进行安装。
问题1:centos下,rz,sz这样的传输文件命令没有
解决1:
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz
或者wget ftp://rpmfind.net/linux/centos/6.5/os/x86_64/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm
问题又来了:
rpm -rvh ./lrzsz-0.12.20-27.1.el6.x86_64.rpm
出现错误:
rpm: arguments to --root (-r) must begin with a /
解决2:
原来是命令敲错了。应该是
rpm -ivh./lrzsz-0.12.20-27.1.el6.x86_64.rpm
rpm -ivh jdk-7u71-linux-x64.rpm
Preparing... ########################################### [100%]
packagejdk-2000:1.7.0_71-fcs.x86_64 is already installed
那么,java到底安装到哪里了?
rpm -ql jdk-7u71-linux-x64
输出:
package jdk-7u71-linux-x64 is not installed
Why?搞什么东东呢
rpm -qa |grep java 查看已安装的包
Tips:如果要看更详细内容,可以用rpm -qai
[root@localhost sss]# rpm -qa |grep jdk
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
jdk-1.7.0_71-fcs.x86_64
原来centos已经安装了这个玩意。在rpm自己的jdk的时候,并不是提示成功,而是提示已经有一个jdk了,就没有安装成功。
rpm -e jdk-1.7.0_71-fcs.x86_64
rpm -e java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
这样一来,至少1.7版的java不会再有了。
jdk-1.7.0_71-fcs.x86_64重新安装上了(注意,和rpm包名并不相同)
如此说来,原来可能也已经安装好了?也许刚才不用卸载也可以,不过是有两个1.7而已,通过JAVA_HOME,PATH和CLASSPATH等设置就可以了。
ls -l --full-time /usr/java/jdk1.7.0_71可以看到,完整安装时间,表示的确是刚才安装的。
[root@localhost sss]# /usr/java/jdk1.7.0_71/bin/java-version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixedmode)
可以看到,这个java已经不是open jdk了。
ok。
vi /etc/profile
在文件尾部加入
export JAVA_HOME=/usr/java/jdk1.7.0_71
exportCLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
但是问题来了。
java -verion
出现的居然是
OpenJDK Runtime Environment (IcedTea6 1.13.0pre)(rhel-1.66.1.13.0.el6-x86_64)
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)
很容易查到,/usr/bin下面有一个java
[sss@localhost ~]$ ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 Jan 5 20:30/usr/bin/java -> /etc/alternatives/java
发现这是一个链接
[sss@localhost ~]$ ll /etc/alternatives |grep java
可以看到更进一步的链接
lrwxrwxrwx. 1 root root 46 Jan 5 20:30 java ->/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
删除这个链接:
alternatives --remove java /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
[sss@localhost ~]$ ll /etc/alternatives |grep java
java -> /usr/lib/jvm/jre-1.5.0-gcj/bin/java
我去。。。居然自动链接了下一个版本。
看来这个alternatives是有来头的。
看了这篇文章,知道怎么做了。
可以想象,使用
alternatives --config java
就可以看到多个版本的java管理起来了。
现在也不迟,还有一个1.5版本,我们不卸载了。直接增加一个sun的1.7版本:
如果中间弄错了,可以remove。要修改优先级的话,直接就是覆盖install,再打一遍
比如 alternatives --remove java/usr/java/jdk1.7.0_71/java ——这个路径不存在,有问题,remove了。
[root@localhost sss]# alternatives --display java
java - status is manual.
link currently points to /usr/java/jdk1.7.0_71/bin/java
/usr/lib/jvm/jre-1.5.0-gcj/bin/java - priority 1500
slave keytool: /usr/lib/jvm/jre-1.5.0-gcj/bin/keytool
slave rmiregistry:/usr/lib/jvm/jre-1.5.0-gcj/bin/rmiregistry
slave jre_exports: /usr/lib/jvm-exports/jre-1.5.0-gcj
slave jre: /usr/lib/jvm/jre-1.5.0-gcj
/usr/java/jdk1.7.0_71/bin/java - priority 1000
slave keytool: (null)
slave rmiregistry: (null)
slave jre_exports: (null)
slave jre: (null)
Current `best' version is/usr/lib/jvm/jre-1.5.0-gcj/bin/java.
为啥还是1.5是 best呢?
原来是优先级的问题。
alternatives --install /usr/bin/java java/usr/java/jdk1.7.0_71/bin/java 1600
这样就改过来了。
Current `best' version is /usr/java/jdk1.7.0_71/bin/java.
这里还有两个非常实用的命令:
which和whereis
因为我们在打命令的时候,比如javac,有时候并不知道是哪个版本,javac没有版本号这个参数,至少可以通过which javac看看它在哪个路径。
whereis则是把命令所在的目录都列出来。
这两个命令查找的都是环境变量$PATH(非全盘扫描),但which只找第一个,whereis全部。
/usr/bin/javac 没法知道版本,咋整呢?
ll /usr/bin/javac
[root@localhost sss]# ll /usr/bin/javac
lrwxrwxrwx. 1 root root 27 Jan 5 20:32/usr/bin/javac -> /usr/java/default/bin/javac
ll /usr/java/default/bin/,原来这个目录下也有java
java -version,ok,是正确的jdk
java和javac在同一目录,java没问题,javac也没问题。
ll --full-time /usr/java/default/ 也可以看到bin目录是刚才创建的。