CentOS 7默認的jdk 1.7升級方法(到1.8) - alternatives的功能

要搞整最新2.1版本的elasticsearch,最好用jdk 1.8。CentOS7默認的卻是1.7,所以得升個級。

首先看圖一目瞭解java的架構

JDK 8 is a superset of JRE 8, and contains everything that is inJRE 8, plus tools such as the compilers and debuggers necessary fordeveloping applets and applications. JRE 8 provides the libraries,the Java Virtual Machine (JVM), and other components to run appletsand applications written in the Java programming language. Notethat the JRE includes components not required by the Java SEspecification, including both standard and non-standard Javacomponents.

一、CenOS7默認的jdk 1.7

/usr/bin/java首先鏈接到/etc/alternatives/java,再鏈接到具體的openjdk

# java -version
java version "1.7.0_91"
OpenJDK Runtime Environment (rhel-2.6.2.1.el7_1-x86_64 u91-b00)
OpenJDK 64-Bit Server VM (build 24.91-b01, mixed mode)
# which java
/usr/bin/java
# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 Dec  2 00:46 /usr/bin/java -> /etc/alternatives/java
# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 74 Dec  2 00:46 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/java
]# rpm -qa | grep java
java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
javapackages-tools-3.4.1-6.el7_0.noarch
python-javapackages-3.4.1-6.el7_0.noarch
tzdata-java-2015g-1.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.1.el7_1.x86_64
# rpm -qa | grep jdk
java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.1.el7_1.x86_64
# ll /usr/share/
......
drwxr-xr-x.   2 root root    94 Sep 20 21:37 java
drwxr-xr-x.   2 root root     6 Aug 14  2014 java-1.5.0
drwxr-xr-x.   2 root root     6 Aug 14  2014 java-1.6.0
drwxr-xr-x.   2 root root     6 Aug 14  2014 java-1.7.0
drwxr-xr-x.   2 root root     6 Aug 14  2014 java-1.8.0
drwxr-xr-x.   2 root root     6 Aug 14  2014 javadoc
drwxr-xr-x.   2 root root     6 Aug 14  2014 java-ext
drwxr-xr-x.   2 root root  4096 Sep 20 21:33 java-utils
drwxr-xr-x.  13 root root  4096 Oct 10 05:56 javazi
drwxr-xr-x.   2 root root    21 Oct 10 05:56 javazi-1.8
drwxr-xr-x.   2 root root     6 Aug 14  2014 jvm
drwxr-xr-x.   2 root root     6 Aug 14  2014 jvm-commmon
......
上面的幾個版本從1.5到1.8的文件夾都是空的。
# ll /usr/lib/
......
drwxr-xr-x.  2 root root    6 Aug 14  2014 java
drwxr-xr-x.  2 root root    6 Aug 14  2014 java-1.5.0
drwxr-xr-x.  2 root root    6 Aug 14  2014 java-1.6.0
drwxr-xr-x.  2 root root    6 Aug 14  2014 java-1.7.0
drwxr-xr-x.  2 root root    6 Aug 14  2014 java-1.8.0
drwxr-xr-x.  2 root root    6 Aug 14  2014 java-ext
drwxr-xr-x.  3 root root 4096 Dec  2 00:46 jvm
drwxr-xr-x.  2 root root    6 Aug 14  2014 jvm-commmon
drwxr-xr-x.  3 root root 4096 Dec  2 00:46 jvm-exports
drwxr-xr-x.  3 root root   61 Nov 21 18:47 jvm-private
......
而這幾個文件夾從java到java-1.8.0到java-ext都是空的;jre文件全都在/usr/lib/jvm文件夾中
# ll /usr/lib/jvm
total 8
drwxr-xr-x.  3 root root 4096 Dec  2 00:46 .
dr-xr-xr-x. 42 root root 4096 Nov 25 17:22 ..
drwxr-xr-x.  4 root root   95 Nov 21 18:46 java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.  1 root root   21 Dec  2 00:46 jre -> /etc/alternatives/jre
lrwxrwxrwx.  1 root root   27 Nov 21 18:47 jre-1.7.0 -> /etc/alternatives/jre_1.7.0
lrwxrwxrwx.  1 root root   35 Nov 21 18:47 jre-1.7.0-openjdk -> /etc/alternatives/jre_1.7.0_openjdk
lrwxrwxrwx.  1 root root   52 Nov 21 18:46 jre-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64 -> java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre
lrwxrwxrwx.  1 root root   29 Nov 21 18:47 jre-openjdk -> /etc/alternatives/jre_openjdk
這裏看到很多東西鏈接到了/etc/alternatives,這個alternatives感覺像是個跳板或者統一接口API之類的一樣的性質

$ ll /etc/alternatives/ | grep -E "java|jre"
lrwxrwxrwx.   1 root root   74 Nov 21 18:47 java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/java
lrwxrwxrwx.   1 root root   78 Nov 21 18:47 java.1.gz -> /usr/share/man/man1/java-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   21 Sep 20 09:41 javaws -> /usr/bin/javaws.itweb
lrwxrwxrwx.   1 root root   37 Sep 20 09:41 javaws.1.gz -> /usr/share/man/man1/javaws-itweb.1.gz
lrwxrwxrwx.   1 root root   65 Nov 21 18:47 jre -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre
lrwxrwxrwx.   1 root root   65 Nov 21 18:47 jre_1.7.0 -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre
lrwxrwxrwx.   1 root root   69 Nov 21 18:47 jre_1.7.0_exports -> /usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   60 Nov 21 18:47 jre_1.7.0_openjdk -> /usr/lib/jvm/jre-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   69 Nov 21 18:47 jre_1.7.0_openjdk_exports -> /usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   69 Nov 21 18:47 jre_exports -> /usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   65 Nov 21 18:47 jre_openjdk -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre
lrwxrwxrwx.   1 root root   69 Nov 21 18:47 jre_openjdk_exports -> /usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   77 Nov 21 18:47 keytool -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/keytool
lrwxrwxrwx.   1 root root   81 Nov 21 18:47 keytool.1.gz -> /usr/share/man/man1/keytool-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   27 Sep 20 09:41 libjavaplugin.so.x86_64 -> /usr/lib64/IcedTeaPlugin.so
lrwxrwxrwx.   1 root root   74 Nov 21 18:47 orbd -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/orbd
lrwxrwxrwx.   1 root root   78 Nov 21 18:47 orbd.1.gz -> /usr/share/man/man1/orbd-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   77 Nov 21 18:47 pack200 -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/pack200
lrwxrwxrwx.   1 root root   81 Nov 21 18:47 pack200.1.gz -> /usr/share/man/man1/pack200-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   74 Nov 21 18:47 rmid -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/rmid
lrwxrwxrwx.   1 root root   78 Nov 21 18:47 rmid.1.gz -> /usr/share/man/man1/rmid-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   81 Nov 21 18:47 rmiregistry -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/rmiregistry
lrwxrwxrwx.   1 root root   85 Nov 21 18:47 rmiregistry.1.gz -> /usr/share/man/man1/rmiregistry-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   80 Nov 21 18:47 servertool -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/servertool
lrwxrwxrwx.   1 root root   84 Nov 21 18:47 servertool.1.gz -> /usr/share/man/man1/servertool-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   79 Nov 21 18:47 tnameserv -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/tnameserv
lrwxrwxrwx.   1 root root   83 Nov 21 18:47 tnameserv.1.gz -> /usr/share/man/man1/tnameserv-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   79 Nov 21 18:47 unpack200 -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/unpack200
lrwxrwxrwx.   1 root root   83 Nov 21 18:47 unpack200.1.gz -> /usr/share/man/man1/unpack200-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
看下手冊,的確是一個接口性質的東西

NAME
       alternatives - maintain symbolic links determining default commands

SYNOPSIS
       alternatives [options] --install link name path priority [--slave link name path]...  [--initscript service]

       alternatives [options] --remove name path

       alternatives [options] --set name path

       alternatives [options] --auto name

       alternatives [options] --display name

       alternatives [options] --config name

       alternatives [options] --list name
ok,看下java相關的

# alternatives --display java
java - status is auto.
 link currently points to /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/java
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/java - priority 1700091
 slave ControlPanel: (null)
......
Current `best' version is /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/java.

二、下載安裝設置jdk1.8。

首先Java官方下載jdk的rpm包,這個東西方便,如果對默認安裝目錄不那麼在乎的話;另外一個就是.tar.gz包了。

# yum localinstall jdk-8u66-linux-x64.rpm -y /*yum安裝,方便*/
看默認安裝的目錄和其中的文件

# ll /usr/java/
total 8
drwxr-xr-x.  3 root root   51 Dec  2 00:46 .
drwxr-xr-x. 14 root root 4096 Oct  7 08:42 ..
lrwxrwxrwx.  1 root root   16 Dec  2 00:46 default -> /usr/java/latest
drwxr-xr-x.  9 root root 4096 Dec  2 00:46 jdk1.8.0_66
lrwxrwxrwx.  1 root root   21 Dec  2 00:46 latest -> /usr/java/jdk1.8.0_66
如果這個時候來查看java的版本,依然是1.7。也就是說,這個新版本安裝並不會去自動更新那個/usr/bin/java或者說是那個alternative的鏈接目的地;發現沒有,這個alternative的作用,應該就是爲了版本控制,使得某個軟件的多個版本並存並且自定義的切換啓用

]# ll /etc/alternatives/ | grep -E "java|jre"
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 appletviewer -> /usr/java/jdk1.8.0_66/bin/appletviewer
lrwxrwxrwx.   1 root root   45 Dec  2 00:46 appletviewer.1 -> /usr/java/jdk1.8.0_66/man/man1/appletviewer.1
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 ControlPanel -> /usr/java/jdk1.8.0_66/bin/ControlPanel
lrwxrwxrwx.   1 root root   34 Dec  2 00:46 extcheck -> /usr/java/jdk1.8.0_66/bin/extcheck
lrwxrwxrwx.   1 root root   41 Dec  2 00:46 extcheck.1 -> /usr/java/jdk1.8.0_66/man/man1/extcheck.1
lrwxrwxrwx.   1 root root   30 Dec  2 00:46 idlj -> /usr/java/jdk1.8.0_66/bin/idlj
lrwxrwxrwx.   1 root root   37 Dec  2 00:46 idlj.1 -> /usr/java/jdk1.8.0_66/man/man1/idlj.1
lrwxrwxrwx.   1 root root   29 Dec  2 00:46 jar -> /usr/java/jdk1.8.0_66/bin/jar
lrwxrwxrwx.   1 root root   36 Dec  2 00:46 jar.1 -> /usr/java/jdk1.8.0_66/man/man1/jar.1
lrwxrwxrwx.   1 root root   35 Dec  2 00:46 jarsigner -> /usr/java/jdk1.8.0_66/bin/jarsigner
lrwxrwxrwx.   1 root root   42 Dec  2 00:46 jarsigner.1 -> /usr/java/jdk1.8.0_66/man/man1/jarsigner.1
lrwxrwxrwx.   1 root root   74 Dec  2 00:46 java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/java
lrwxrwxrwx.   1 root root   37 Dec  2 00:46 java.1 -> /usr/java/jdk1.8.0_66/man/man1/java.1
lrwxrwxrwx.   1 root root   78 Dec  2 00:46 java.1.gz -> /usr/share/man/man1/java-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   31 Dec  2 00:46 javac -> /usr/java/jdk1.8.0_66/bin/javac
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 javac.1 -> /usr/java/jdk1.8.0_66/man/man1/javac.1
lrwxrwxrwx.   1 root root   33 Dec  2 00:46 javadoc -> /usr/java/jdk1.8.0_66/bin/javadoc
lrwxrwxrwx.   1 root root   40 Dec  2 00:46 javadoc.1 -> /usr/java/jdk1.8.0_66/man/man1/javadoc.1
lrwxrwxrwx.   1 root root   40 Dec  2 00:46 javafxpackager -> /usr/java/jdk1.8.0_66/bin/javafxpackager
lrwxrwxrwx.   1 root root   47 Dec  2 00:46 javafxpackager.1 -> /usr/java/jdk1.8.0_66/man/man1/javafxpackager.1
lrwxrwxrwx.   1 root root   31 Dec  2 00:46 javah -> /usr/java/jdk1.8.0_66/bin/javah
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 javah.1 -> /usr/java/jdk1.8.0_66/man/man1/javah.1
lrwxrwxrwx.   1 root root   31 Dec  2 00:46 javap -> /usr/java/jdk1.8.0_66/bin/javap
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 javap.1 -> /usr/java/jdk1.8.0_66/man/man1/javap.1
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 javapackager -> /usr/java/jdk1.8.0_66/bin/javapackager
lrwxrwxrwx.   1 root root   45 Dec  2 00:46 javapackager.1 -> /usr/java/jdk1.8.0_66/man/man1/javapackager.1
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 java-rmi.cgi -> /usr/java/jdk1.8.0_66/bin/java-rmi.cgi
lrwxrwxrwx.   1 root root   32 Dec  2 00:46 javaws -> /usr/java/jdk1.8.0_66/bin/javaws
lrwxrwxrwx.   1 root root   39 Dec  2 00:46 javaws.1 -> /usr/java/jdk1.8.0_66/man/man1/javaws.1
lrwxrwxrwx.   1 root root   37 Sep 20 09:41 javaws.1.gz -> /usr/share/man/man1/javaws-itweb.1.gz
lrwxrwxrwx.   1 root root   30 Dec  2 00:46 jcmd -> /usr/java/jdk1.8.0_66/bin/jcmd
lrwxrwxrwx.   1 root root   37 Dec  2 00:46 jcmd.1 -> /usr/java/jdk1.8.0_66/man/man1/jcmd.1
lrwxrwxrwx.   1 root root   34 Dec  2 00:46 jconsole -> /usr/java/jdk1.8.0_66/bin/jconsole
lrwxrwxrwx.   1 root root   41 Dec  2 00:46 jconsole.1 -> /usr/java/jdk1.8.0_66/man/man1/jconsole.1
lrwxrwxrwx.   1 root root   34 Dec  2 00:46 jcontrol -> /usr/java/jdk1.8.0_66/bin/jcontrol
lrwxrwxrwx.   1 root root   29 Dec  2 00:46 jdb -> /usr/java/jdk1.8.0_66/bin/jdb
lrwxrwxrwx.   1 root root   36 Dec  2 00:46 jdb.1 -> /usr/java/jdk1.8.0_66/man/man1/jdb.1
lrwxrwxrwx.   1 root root   31 Dec  2 00:46 jdeps -> /usr/java/jdk1.8.0_66/bin/jdeps
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 jdeps.1 -> /usr/java/jdk1.8.0_66/man/man1/jdeps.1
lrwxrwxrwx.   1 root root   30 Dec  2 00:46 jhat -> /usr/java/jdk1.8.0_66/bin/jhat
lrwxrwxrwx.   1 root root   37 Dec  2 00:46 jhat.1 -> /usr/java/jdk1.8.0_66/man/man1/jhat.1
lrwxrwxrwx.   1 root root   31 Dec  2 00:46 jinfo -> /usr/java/jdk1.8.0_66/bin/jinfo
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 jinfo.1 -> /usr/java/jdk1.8.0_66/man/man1/jinfo.1
lrwxrwxrwx.   1 root root   29 Dec  2 00:46 jjs -> /usr/java/jdk1.8.0_66/bin/jjs
lrwxrwxrwx.   1 root root   36 Dec  2 00:46 jjs.1 -> /usr/java/jdk1.8.0_66/man/man1/jjs.1
lrwxrwxrwx.   1 root root   30 Dec  2 00:46 jmap -> /usr/java/jdk1.8.0_66/bin/jmap
lrwxrwxrwx.   1 root root   37 Dec  2 00:46 jmap.1 -> /usr/java/jdk1.8.0_66/man/man1/jmap.1
lrwxrwxrwx.   1 root root   29 Dec  2 00:46 jmc -> /usr/java/jdk1.8.0_66/bin/jmc
lrwxrwxrwx.   1 root root   36 Dec  2 00:46 jmc.1 -> /usr/java/jdk1.8.0_66/man/man1/jmc.1
lrwxrwxrwx.   1 root root   33 Dec  2 00:46 jmc.ini -> /usr/java/jdk1.8.0_66/bin/jmc.ini
lrwxrwxrwx.   1 root root   29 Dec  2 00:46 jps -> /usr/java/jdk1.8.0_66/bin/jps
lrwxrwxrwx.   1 root root   36 Dec  2 00:46 jps.1 -> /usr/java/jdk1.8.0_66/man/man1/jps.1
lrwxrwxrwx.   1 root root   65 Dec  2 00:46 jre -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre
lrwxrwxrwx.   1 root root   65 Nov 21 18:47 jre_1.7.0 -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre
lrwxrwxrwx.   1 root root   69 Nov 21 18:47 jre_1.7.0_exports -> /usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   60 Nov 21 18:47 jre_1.7.0_openjdk -> /usr/lib/jvm/jre-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   69 Nov 21 18:47 jre_1.7.0_openjdk_exports -> /usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   69 Dec  2 00:46 jre_exports -> /usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   65 Nov 21 18:47 jre_openjdk -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre
lrwxrwxrwx.   1 root root   69 Nov 21 18:47 jre_openjdk_exports -> /usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64
lrwxrwxrwx.   1 root root   36 Dec  2 00:46 jrunscript -> /usr/java/jdk1.8.0_66/bin/jrunscript
lrwxrwxrwx.   1 root root   43 Dec  2 00:46 jrunscript.1 -> /usr/java/jdk1.8.0_66/man/man1/jrunscript.1
lrwxrwxrwx.   1 root root   35 Dec  2 00:46 jsadebugd -> /usr/java/jdk1.8.0_66/bin/jsadebugd
lrwxrwxrwx.   1 root root   42 Dec  2 00:46 jsadebugd.1 -> /usr/java/jdk1.8.0_66/man/man1/jsadebugd.1
lrwxrwxrwx.   1 root root   32 Dec  2 00:46 jstack -> /usr/java/jdk1.8.0_66/bin/jstack
lrwxrwxrwx.   1 root root   39 Dec  2 00:46 jstack.1 -> /usr/java/jdk1.8.0_66/man/man1/jstack.1
lrwxrwxrwx.   1 root root   31 Dec  2 00:46 jstat -> /usr/java/jdk1.8.0_66/bin/jstat
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 jstat.1 -> /usr/java/jdk1.8.0_66/man/man1/jstat.1
lrwxrwxrwx.   1 root root   32 Dec  2 00:46 jstatd -> /usr/java/jdk1.8.0_66/bin/jstatd
lrwxrwxrwx.   1 root root   39 Dec  2 00:46 jstatd.1 -> /usr/java/jdk1.8.0_66/man/man1/jstatd.1
lrwxrwxrwx.   1 root root   35 Dec  2 00:46 jvisualvm -> /usr/java/jdk1.8.0_66/bin/jvisualvm
lrwxrwxrwx.   1 root root   42 Dec  2 00:46 jvisualvm.1 -> /usr/java/jdk1.8.0_66/man/man1/jvisualvm.1
lrwxrwxrwx.   1 root root   33 Dec  2 00:46 keytool -> /usr/java/jdk1.8.0_66/bin/keytool
lrwxrwxrwx.   1 root root   40 Dec  2 00:46 keytool.1 -> /usr/java/jdk1.8.0_66/man/man1/keytool.1
lrwxrwxrwx.   1 root root   81 Dec  2 00:46 keytool.1.gz -> /usr/share/man/man1/keytool-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   27 Sep 20 09:41 libjavaplugin.so.x86_64 -> /usr/lib64/IcedTeaPlugin.so
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 native2ascii -> /usr/java/jdk1.8.0_66/bin/native2ascii
lrwxrwxrwx.   1 root root   45 Dec  2 00:46 native2ascii.1 -> /usr/java/jdk1.8.0_66/man/man1/native2ascii.1
lrwxrwxrwx.   1 root root   30 Dec  2 00:46 orbd -> /usr/java/jdk1.8.0_66/bin/orbd
lrwxrwxrwx.   1 root root   37 Dec  2 00:46 orbd.1 -> /usr/java/jdk1.8.0_66/man/man1/orbd.1
lrwxrwxrwx.   1 root root   78 Dec  2 00:46 orbd.1.gz -> /usr/share/man/man1/orbd-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   33 Dec  2 00:46 pack200 -> /usr/java/jdk1.8.0_66/bin/pack200
lrwxrwxrwx.   1 root root   40 Dec  2 00:46 pack200.1 -> /usr/java/jdk1.8.0_66/man/man1/pack200.1
lrwxrwxrwx.   1 root root   81 Dec  2 00:46 pack200.1.gz -> /usr/share/man/man1/pack200-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   36 Dec  2 00:46 policytool -> /usr/java/jdk1.8.0_66/bin/policytool
lrwxrwxrwx.   1 root root   43 Dec  2 00:46 policytool.1 -> /usr/java/jdk1.8.0_66/man/man1/policytool.1
lrwxrwxrwx.   1 root root   30 Dec  2 00:46 rmic -> /usr/java/jdk1.8.0_66/bin/rmic
lrwxrwxrwx.   1 root root   37 Dec  2 00:46 rmic.1 -> /usr/java/jdk1.8.0_66/man/man1/rmic.1
lrwxrwxrwx.   1 root root   30 Dec  2 00:46 rmid -> /usr/java/jdk1.8.0_66/bin/rmid
lrwxrwxrwx.   1 root root   37 Dec  2 00:46 rmid.1 -> /usr/java/jdk1.8.0_66/man/man1/rmid.1
lrwxrwxrwx.   1 root root   78 Dec  2 00:46 rmid.1.gz -> /usr/share/man/man1/rmid-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   37 Dec  2 00:46 rmiregistry -> /usr/java/jdk1.8.0_66/bin/rmiregistry
lrwxrwxrwx.   1 root root   44 Dec  2 00:46 rmiregistry.1 -> /usr/java/jdk1.8.0_66/man/man1/rmiregistry.1
lrwxrwxrwx.   1 root root   85 Dec  2 00:46 rmiregistry.1.gz -> /usr/share/man/man1/rmiregistry-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   35 Dec  2 00:46 schemagen -> /usr/java/jdk1.8.0_66/bin/schemagen
lrwxrwxrwx.   1 root root   42 Dec  2 00:46 schemagen.1 -> /usr/java/jdk1.8.0_66/man/man1/schemagen.1
lrwxrwxrwx.   1 root root   35 Dec  2 00:46 serialver -> /usr/java/jdk1.8.0_66/bin/serialver
lrwxrwxrwx.   1 root root   42 Dec  2 00:46 serialver.1 -> /usr/java/jdk1.8.0_66/man/man1/serialver.1
lrwxrwxrwx.   1 root root   36 Dec  2 00:46 servertool -> /usr/java/jdk1.8.0_66/bin/servertool
lrwxrwxrwx.   1 root root   43 Dec  2 00:46 servertool.1 -> /usr/java/jdk1.8.0_66/man/man1/servertool.1
lrwxrwxrwx.   1 root root   84 Dec  2 00:46 servertool.1.gz -> /usr/share/man/man1/servertool-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   35 Dec  2 00:46 tnameserv -> /usr/java/jdk1.8.0_66/bin/tnameserv
lrwxrwxrwx.   1 root root   42 Dec  2 00:46 tnameserv.1 -> /usr/java/jdk1.8.0_66/man/man1/tnameserv.1
lrwxrwxrwx.   1 root root   83 Dec  2 00:46 tnameserv.1.gz -> /usr/share/man/man1/tnameserv-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   35 Dec  2 00:46 unpack200 -> /usr/java/jdk1.8.0_66/bin/unpack200
lrwxrwxrwx.   1 root root   42 Dec  2 00:46 unpack200.1 -> /usr/java/jdk1.8.0_66/man/man1/unpack200.1
lrwxrwxrwx.   1 root root   83 Dec  2 00:46 unpack200.1.gz -> /usr/share/man/man1/unpack200-java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64.1.gz
lrwxrwxrwx.   1 root root   31 Dec  2 00:46 wsgen -> /usr/java/jdk1.8.0_66/bin/wsgen
lrwxrwxrwx.   1 root root   38 Dec  2 00:46 wsgen.1 -> /usr/java/jdk1.8.0_66/man/man1/wsgen.1
lrwxrwxrwx.   1 root root   34 Dec  2 00:46 wsimport -> /usr/java/jdk1.8.0_66/bin/wsimport
lrwxrwxrwx.   1 root root   41 Dec  2 00:46 wsimport.1 -> /usr/java/jdk1.8.0_66/man/man1/wsimport.1
lrwxrwxrwx.   1 root root   29 Dec  2 00:46 xjc -> /usr/java/jdk1.8.0_66/bin/xjc
lrwxrwxrwx.   1 root root   36 Dec  2 00:46 xjc.1 -> /usr/java/jdk1.8.0_66/man/man1/xjc.1
發現了1.8的身影,具體點看下java的鏈接

# alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/bin/java
   2           /usr/java/jdk1.8.0_66/jre/bin/java

Enter to keep the current selection[+], or type selection number: 
哦哦,這裏可以設置更改爲第二個,也就是1.8版本的。

# java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
再來覈實下一開始就發現的兩個鏈接,發現的確只是更改了alternative中的鏈接目的地

# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 Dec  2 05:41 /usr/bin/java -> /etc/alternatives/java
# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 34 Dec  2 05:41 /etc/alternatives/java -> /usr/java/jdk1.8.0_66/jre/bin/java
那麼其他的地方會自動的跟隨上面的切換而自動切換麼?覈實下

# ll /etc/alternatives/jar
lrwxrwxrwx. 1 root root 29 Dec  2 00:46 /etc/alternatives/jar -> /usr/java/jdk1.8.0_66/bin/jar
# ll /etc/alternatives/javac
lrwxrwxrwx. 1 root root 31 Dec  2 00:46 /etc/alternatives/javac -> /usr/java/jdk1.8.0_66/bin/javac
# ll /etc/alternatives/jconsole
lrwxrwxrwx. 1 root root 34 Dec  2 00:46 /etc/alternatives/jconsole -> /usr/java/jdk1.8.0_66/bin/jconsole
# ll /etc/alternatives/jcmd
lrwxrwxrwx. 1 root root 30 Dec  2 00:46 /etc/alternatives/jcmd -> /usr/java/jdk1.8.0_66/bin/jcmd
jar和javac都自動跟隨切換了,所以到此我可以認爲,一切都就緒不需要額外的人工設置了。所以整個從1.7到1.8的升級過程爲下面簡單兩步:

1. 下載1.8的rpm包並yum安裝

2. # alternatives --config java來切換爲新版本


另外,alternatives還有個操作是--install,在手工安裝例如tar.gz包的時候,就可以去手動添加並全局切換/etc/alternatives/java鏈接。類似地,可以用alternatives來混搭升級安裝的Phthon3(CentOS7默認的還是2.7),見下面的腳本,默認就啓用了Python3:

if [ $(ls /usr/bin/python* | grep -c python2) -ge 1 ]; then
    python_old_version=$(ls -l /usr/bin/python* | grep '/usr/bin/python2 -> ' | awk '{print $11}' | awk -F python '{print $2}')
    alternatives --install /usr/bin/python python /usr/bin/python${python_old_version} 1
    alternatives --install /usr/bin/python python /usr/local/bin/python3.5 2    
    # Keep python2 for /usr/bin/yum and /usr/libexec/urlgrabber-ext-down (firewalld not compatible with python3)
    sed -i "s@^#\!/usr/bin/python@#\!/usr/bin/python${python_old_version}@" /usr/bin/yum
    sed -i "s@^#\! /usr/bin/python@#\! /usr/bin/python${python_old_version}@" /usr/libexec/urlgrabber-ext-down 
fi

而如果是去直接更改/usr/bin/java的鏈接,那就搞麻煩了,如此就會忽略掉alternative的用處不太好去統一管理。至於諸如下面這種修改/etc/profile的方法,不推薦使用 - 麻煩!

# vim /etc/profile
export JAVA_HOME=/path/to/java_version_dir
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JRE_HOME/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章