Welcome 微信登录

首页 / 操作系统 / Linux / 使用Linux的alternatives管理多版本的软件

今天捣鼓Oracle的OS Watcher(简称osw) 的时候发现机器上的jdk不太好使,不能运行osw的oswg.jar。比较郁闷,看了一下 /usr/bin/java 是连接到 /etc/alternatives/java ,而 /etc/alternatives/java 是连接到 /usr/lib/jvm/jre-1.4.2-gcj/bin/java , 
1[root@www.linuxidc.com bin]# ll /usr/bin/java
2lrwxrwxrwx  1 root root 22 Dec 17  2009 /usr/bin/java -> /etc/alternatives/java
3[root@www.linuxidc.com bin]# ll /etc/alternatives/java
4lrwxrwxrwx  1 root root 35 Aug 23 14:52 /etc/alternatives/java -> /usr/lib/jvm/jre-1.4.2-gcj/bin/java
发现这个 alternatives 很眼生,于是 google 了一下,发现它是一个管理多版本软件的软件,于是借着升级jdk、jre的契机顺便捣鼓一下这个alternatives 。首先到Oracle的网站下载最新的 jdk 和 jre ,然后安装。这个安装比较恶心,装在什么地方也不说一声,害我找了半天才发现装在 /usr/java/jdk1.6.0_21/ 和 /usr/java/jre1.6.0_21/ 这两个目录中。将jdk和jre的java注册到alternatives中,顺便也将jdk的javac注册到alternatives中。 
1[root@www.linuxidc.com ~]# alternatives --install /usr/bin/java  java  /usr/java/jre1.6.0_21/bin/java  400
2[root@www.linuxidc.com ~]# alternatives --install /usr/bin/java  java  /usr/java/jdk1.6.0_21/bin/java  400
3[root@www.linuxidc.com ~]# alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_21/bin/javac 400
现在可以看看注册的成果了: 
01[root@www.linuxidc.com ~]# alternatives --config java
02  
03There are 3 programs which provide "java".
04  
05  Selection    Command
06-----------------------------------------------
07*+ 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
08   2           /usr/java/jre1.6.0_21/bin/java
09   3           /usr/java/jdk1.6.0_21/bin/java
10  
11Enter to keep the current selection[+], or type selection number:
这里输入想要用的 java 就可以了,例如我选在了第2个。我们看看 /usr/bin/java的变化: 
1[root@www.linuxidc.com ~]# ll /usr/bin/java
2lrwxrwxrwx  1 root root 22 Dec 17  2009 /usr/bin/java -> /etc/alternatives/java
3[root@www.linuxidc.com ~]# ll /etc/alternatives/java
4lrwxrwxrwx  1 root root 30 Aug 23 15:03 /etc/alternatives/java -> /usr/java/jre1.6.0_21/bin/java
可以看到 /usr/bin/java 的连接的地方没有变,改变了的/etc/alternatives/java 的连接,这其实是一个策略模式的实现: /usr/bin/java 的“调用”没有变,还是连接到 /etc/alternatives/java,/etc/alternatives/java的连接却被修改了,这个由 alternatives 管理。通过linux的连接也可以简单地实现这种“接口”和“具体实现”的分离,但是 alternatives 提供一个配置清单,简单选一下就OK了,这为我们提供了很大的便利。 扩充一下,alternatives也可以管理我们自己的软件。例如,我自己写了个软件叫myjava,我也想实现这种基于“策略模式”的版本管理,我可以这样做: 
1alternatives --install /usr/bin/myjava  myjava  /usr/java/jdk1.6.0_21/bin/java  300
2alternatives --install /usr/bin/myjava  myjava  /usr/java/jre1.6.0_21/bin/java  300
使用 alternatives  更换一下我的版本: 
01[root@www.linuxidc.com ~]# ll /usr/bin/myjava
02lrwxrwxrwx  1 root root 24 Aug 23 14:43 /usr/bin/myjava -> /etc/alternatives/myjava
03[root@www.linuxidc.com ~]# ll /etc/alternatives/myjava 
04lrwxrwxrwx  1 root root 30 Aug 23 14:46 /etc/alternatives/myjava -> /usr/java/jre1.6.0_21/bin/java
05[root@www.linuxidc.com ~]
06[root@www.linuxidc.com ~]
07[root@www.linuxidc.com ~]# alternatives  --config myjava
08  
09There are 2 programs which provide "myjava".
10  
11  Selection    Command
12-----------------------------------------------
13*  1           /usr/java/jdk1.6.0_21/bin/java
14 + 2           /usr/java/jre1.6.0_21/bin/java
15  
16Enter to keep the current selection[+], or type selection number: 1
17[root@www.linuxidc.com ~]
18[root@www.linuxidc.com ~]
19[root@www.linuxidc.com ~]# ll /usr/bin/myjava
20lrwxrwxrwx  1 root root 24 Aug 23 14:43 /usr/bin/myjava -> /etc/alternatives/myjava
21[root@www.linuxidc.com ~]# ll /etc/alternatives/myjava 
22lrwxrwxrwx  1 root root 30 Aug 23 15:15 /etc/alternatives/myjava -> /usr/java/jdk1.6.0_21/bin/java
是不是很方便 :-)使用chkconfig来管理Linux的服务超快速搞定Linux的VNC相关资讯      Linux教程 
  • Linux教程:如何在命令行中查看目  (07/28/2014 12:22:23)
  • Linux 修改root密码  (11/03/2012 07:53:38)
  • su - root 与su root的区别  (06/06/2012 00:39:40)
  • Linux进程间通信:消息队列  (01/28/2013 09:43:00)
  • U盘安装Linux开机无法启动解决方法  (10/07/2012 08:55:52)
  • Windows 7/Linux 同步时间  (05/15/2012 06:17:55)
本文评论 查看全部评论 (1)
表情: 姓名: 字数


评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或