我update-alternatives
查了好几次手册,但我找不到如何显示指向特定替代方案的当前链接,并且在添加新替代方案时需要该信息。
从update-alternatives
手册:
--install <link> <name> <path> <priority>
Run Code Online (Sandbox Code Playgroud)
假设我想添加新版本的 Java Runtime Edition,但我不知道链接到替代项(<link>
参数)的当前符号链接。我目前做的是:
sudo update-alternatives --install /tmp/randomStuff java /usr/local/java/jre1.7.0_25/bin/java 0
Run Code Online (Sandbox Code Playgroud)
该命令将输出:
update-alternatives: renaming java link from /usr/local/bin/java to /tmp/randomStuff.
Run Code Online (Sandbox Code Playgroud)
阅读输出我找到了指向替代的旧链接,所以我终于可以使用正确的<link>
参数再次运行我的命令,更改/tmp/randomStuff
为/usr/local/bin/java
:
sudo update-alternatives --install /usr/local/bin/java java /usr/local/java/jre1.7.0_25/bin/java 0
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如您所见,使用/tmp/randomStuff
as<link>
参数运行命令非常尴尬。
因此,问题来了:(1)是否有任何update-alternative
参数可以输出指向特定替代方案的当前链接,或者(2)是否有一种方法可以安装新替代方案而无需提供新参数,只需保持当前<link>
?
我一直试图找出将 OpenJDK Java 运行时作为我的 Fedora 机器的默认 Java 运行的最佳方法,并使用 Oracle JDK 6 进行 Android 开发,即从 Android Bundle 运行 Android SDK Manager、Android Studio 和 Eclipse。
我从 Fedora 存储库安装了 OpenJDK Java Runtime,它具有如下设置替代方案。
[donnie@fedora ~]$ alternatives --list | grep java
jre_openjdk auto /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
jre_1.7.0 auto /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
java auto /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre/bin/java
libjavaplugin.so.x86_64 auto /usr/lib64/IcedTeaPlugin.so
Run Code Online (Sandbox Code Playgroud)
我已经使用 Oracle 提供的 rpm 安装了 Oracle JDK 6。
我可以通过在.bashrc
.
export JAVA_HOME=/usr/java/jdk1.6.0_45/
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
我注意到 Chrome 仍然使用 OpenJDK(因为我仍然需要链接插件)。
JAVA_HOME 和使用替代品有什么区别?
当我跑
$ update-alternatives --config java
Run Code Online (Sandbox Code Playgroud)
我得到几行:
自动模式和手动模式有什么区别?
Debian 发行版有Debian Alternatives System。来自维基:
Debian 替代系统为实现相同或相似功能的多个程序创建了一种方法,这些程序将被列为同时安装的替代实现,但其中一个特定实现被指定为默认实现。例如,许多系统同时安装了多个文本编辑器。vi 程序是一个经典的编辑器示例,它有许多实现,例如 nvi、elvis、vim 等,但是应该指定哪一个作为默认?
通常,Debian 中有多个软件包提供了特定的替代方案。如何获得 Debian 存储库中存在的所有此类软件包的完整列表?让我们以 vi 替代品为例。
注意:对已安装的软件包列表进行这样的查询很容易,但这不是这个问题所要问的。
我正在使用共享服务器。在该服务器上安装了不同版本的 Java:
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 auto mode
* 1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 manual mode
2 /usr/lib/jvm/java-6-sun/jre/bin/java 63 manual mode
Run Code Online (Sandbox Code Playgroud)
我想选择第二个选项,但如果我尝试这样做,它会抱怨我没有权限(我不是 root)。
有没有办法在“用户空间”中做到这一点?
Root 用户可以让这个首选项只对我有用吗?
lrwxrwxrwx 1 root root 19 Apr 14 14:36 /etc/alternatives/x-terminal-emulator -> /usr/bin/xterm
使用这两个调用运行它:
/usr/bin/xterm
/etc/alternatives/x-terminal-emulator
首先以黑色背景开始,其他以白色开始。有哪些可能的原因是配置不一样?如何调试它?
我正在创建Ubuntu 20.04的 AMI (Focal Fossa),并且我希望默认的 Python 版本为 3.6。
我安装了 Python 3.6,也是正确的 pip,然后像这样设置替代方案:
update-alternatives --install \
/usr/bin/python3 \
python3 \
/usr/bin/python3.6 \
10
Run Code Online (Sandbox Code Playgroud)
但是后来我遇到了许多与CPython包相关的问题,例如python3-apt
(apt_pkg, apt_inst),netifaces
,可能还有更多我还没有发现。
它们都位于/usr/lib/python3/dist-packages
并且包名称采用以下格式:
{name}.cpython-38-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为 Ubuntu 20.04 的默认 Python 版本是 Python 3.8。
谷歌搜索的直接解决方案是像这样链接名称:
ln -s {name}.cpython-38-x86_64-linux-gnu.so {name}.so
Run Code Online (Sandbox Code Playgroud)
IE:
ln -s apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so
ln -s netifaces.cpython-38-x86_64-linux-gnu.so netifaces.so
Run Code Online (Sandbox Code Playgroud)
我尝试apt install --reinstall python3-apt
在默认 Python 版本为 3.6 时重新安装相关的包 ( ),但它不起作用,而这种链接的解决方案*.so
文件的不可扩展!
有没有办法让 Python 3.6 与系统的默认 CPython 包一起工作?
我决定最终学习 vi 并且当我这样做时,我意识到 vi 的行为不像我预期的那样。我从另一篇文章中了解到,这是因为在 Ubuntu 上,默认情况下安装了 vim-tiny。
在我得知我选择使用以下命令安装完整版 vim 后:
sudo apt-get install vim
Run Code Online (Sandbox Code Playgroud)
在我这样做之后,我开始对一些事情感到好奇:
我正在使用 Ubuntu Server 12.04 LTS。
我正在尝试将 clang++ 设置为 Fedora 18 上的系统 C++ 编译器。我已经安装了 clang 并将其添加到其中,alternatives
但它似乎不起作用。
[user@localhost ~]$ alternatives --display c++
c++ - status is auto.
link currently points to /usr/bin/clang++
/usr/bin/clang++ - priority 1
Current `best' version is /usr/bin/clang++.
[user@localhost ~]$ c++ --version
c++ (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)
c++
尽管 …
On my Ubuntu 15.04, sudo update-alternatives --config java
shows:
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1074 auto mode
1 /opt/java32/jdk1.7.0_71/jre/bin/java 1 manual mode
2 /usr/lib/jvm/java-1.7.0-openjdk-i386/jre/bin/java 10 manual mode
3 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 manual mode
4 /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java 1070 manual mode
* 5 /usr/lib/jvm/java-8-oracle/jre/bin/java 1074 manual mode
Run Code Online (Sandbox Code Playgroud)
为什么单个路径/usr/lib/jvm/java-8-oracle/jre/bin/java
有两个条目,一个auto
在manual
模式中,另一个在模式中?
即使两条路径具有相同的优先级 1024,并且manual
路径被标记为默认路径。手动模式总是比自动模式有更高的偏好吗?
alternatives ×10
debian ×2
java ×2
ubuntu ×2
apt ×1
c++ ×1
command-line ×1
executable ×1
fedora ×1
linux-mint ×1
python3 ×1
x-resources ×1
xterm ×1