zoukankan      html  css  js  c++  java
  • linux下多版本GCC管理 updatealternatives

    引言
    在Debian系统中,我们可能会同时安装有很多功能类似的程序和可选配置,可能会出现同一软件的多个版本并存的场景。比如像是一些编程语言工具,一些系统中自带的是python2.6,而现在python2.7和python3.4使用较多,还有java有1.6,1.7和1.8版本。
    update-alternatives是Debian系统中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本,比如系统中同时安装了open jdk和sun jdk两个版本,而我们又希望系统默认使用sun jdk,通过update-alternatives就可以方便实现管理。

    介绍
    首先我们可以通过update-alternatives --display java来查看java命令的所有可选命令,如下图:


    我们可以看出,/usr/bin/java命令指向了/etc/alternatives/java,而/etc/alternatives/java实际指向的是openjdk1.7的java命令,之所以建立这样两个链接,是为了方便脚本程序的编写和系统的管理。


    命令格式与参数
    命令格式:update-alternatives [<选项> ...] <命令>
    主要参数:

    Commands:
    --install <link> <name> <path> <priority>
    [--slave <link> <name> <path>] ...
    在系统中加入一组替换项.
    --remove <name> <path> 从 <名称> 替换组中去除 <路径> 项.
    --remove-all <name> 从替换系统中删除 <名称> 替换组.
    --auto <name> 将 <名称> 的主链接切换到自动模式.
    --display <name> 显示关于 <名称> 替换组的信息.
    --query <name> machine parseable version of --display <name>.
    --list <name> 列出 <名称> 替换组中所有的可用替换项.
    --get-selections list master alternative names and their status.
    --set-selections read alternative status from standard input.
    --config <name> 列出 <名称> 替换组中的可选项,并就使用其中
    哪一个,征询用户的意见.
    --set <name> <path> 将 <路径> 设置为 <名称> 的替换项.
    --all 对所有可选项一一调用 --config 命令.
    <link> 是指向 /etc/alternatives/<名称> 的符号链接>.
    (e.g. /usr/bin/pager)
    <name> 是该链接替换组的主控名.
    (e.g. pager)
    <path> 是替换项目标文件的位置.
    (e.g. /usr/bin/less)
    <priority> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高.
    Options:
    --altdir <directory> 指定不同的可选项目录.
    --admindir <directory> 指定不同的管理目录.
    --log <file> 设置log文件.
    --force allow replacing files with alternative links.
    --skip-auto skip prompt for alternatives correctly configured
    in automatic mode (relevant for --config only)
    --verbose 详尽的操作进行信息,更多的输出.
    --quiet 安静模式,输出尽可能少的信息.
    --help 显示本帮助信息.
    --version 显示版本信息.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    基本命令
    update-alternatives命令的几个主要选项为:display、install、remove、config。

    display选项
    display选项用来显示一个命令链接的所有可选命令,即查看一个命令链接组的所有信息,包括链接的模式(自动还是手动)、链接priority值、所有可 用的链接命令等等。

    install选项
    install选项的功能就是增加一组新的系统命令链接符。
    使用语法为:update-alternatives --install <link> <name> <path> <priority> [--slave link name path]...。其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录); name为命令链接符名称,如java;path为你所要使用新命令、新软件的所在目录;priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;–slave为从alternative。

    config选项
    config选项用来显示和修改实际指向的候选命令,为在现有的命令链接选择一个作为系统默认。


    remove选项
    remove选项的功能是删除一个命令的link值,其附带的slave也将一起删除。
    使用语法为:update-alternatives --remove name path。其中name与path与install中的一致,如果所删除的链接组中还有其他链接的话,系统将会自动从其他中选择一个priority高的链接作为默认为链接。
    比如:update-alternatives –remove java /usr/lib/jvm/jre1.6.0_20/bin/java

    使用实例
    我使用的LinuxMint默认的JDK是openjdk,现在我要将自己安装的JDK设置为默认的JDK版本,执行下面的代码:

    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/bin/java 1070
    sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/bin/javac 1070
    sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java/bin/jar 1070
    sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/java/bin/javah 1070
    sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/java/bin/javap 1070
    1
    2
    3
    4
    5
    然后执行下面代码选择我们安装的JDK版本:

    sudo update-alternatives --config java
    1
    这样就完成了java版本的切换。

    转载请注明作者Jason Ding及其出处
    Github博客主页(http://jasonding1354.github.io/)
    GitCafe博客主页(http://jasonding1354.gitcafe.io/)
    CSDN博客(http://blog.csdn.net/jasonding1354)
    简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)
    Google搜索jasonding1354进入我的博客主页

    原文链接:https://blog.csdn.net/JasonDing1354/article/details/50470109

    有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
  • 相关阅读:
    SSM实现mysql数据库账号密码加密连接
    获取系统相关信息 (CPU使用率 内存使用率 系统磁盘大小)
    JavaWeb(一) / /* /**的区别
    IDEA(一) 使用IDEA搭建SSM框架项目
    Mysql连接数据库异常汇总【必收藏】
    Java代理模式及动态代理详解
    SpringBoot集成Thymeleaf
    设计师,程序员,当心字体侵权
    Java开发神器Lombok使用详解
    日期格式化跨年bug,是否与你不期而遇?
  • 原文地址:https://www.cnblogs.com/axjlxy/p/15620526.html
Copyright © 2011-2022 走看看