标签: alternatives

使用更新替代品添加替代品的更好方法?

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/randomStuffas<link>参数运行命令非常尴尬。

因此,问题来了:(1)是否有任何update-alternative参数可以输出指向特定替代方案的当前链接,或者(2)是否有一种方法可以安装新替代方案而无需提供新参数,只需保持当前<link>

command-line alternatives

22
推荐指数
2
解决办法
4万
查看次数

JAVA_HOME 和 update-alternatives 有什么区别?

我一直试图找出将 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 和使用替代品有什么区别?

java alternatives

16
推荐指数
1
解决办法
2万
查看次数

update-alternatives 中自动模式和手动模式的区别

当我跑

$ update-alternatives --config java  
Run Code Online (Sandbox Code Playgroud)

我得到几行:

在此处输入图片说明

自动模式和手动模式有什么区别?

linux-mint alternatives

16
推荐指数
2
解决办法
2万
查看次数

在 Debian 中查找提供特定替代方案的所有软件包

Debian 发行版有Debian Alternatives System。来自维基:

Debian 替代系统为实现相同或相似功能的多个程序创建了一种方法,这些程序将被列为同时安装的替代实现,但其中一个特定实现被指定为默认实现。例如,许多系统同时安装了多个文本编辑器。vi 程序是一个经典的编辑器示例,它有许多实现,例如 nvi、elvis、vim 等,但是应该指定哪一个作为默认?

通常,Debian 中有多个软件包提供了特定的替代方案。如何获得 Debian 存储库中存在的所有此类软件包的完整列表?让我们以 vi 替代品为例。

注意:对已安装的软件包列表进行这样的查询很容易,但这不是这个问题所要问的。

debian package-management alternatives

13
推荐指数
4
解决办法
1200
查看次数

仅适用于一位用户的更新替代品

我正在使用共享服务器。在该服务器上安装了不同版本的 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 用户可以让这个首选项只对我有用吗?

debian java executable not-root-user alternatives

9
推荐指数
1
解决办法
4951
查看次数

当 xterm 指向同一个可执行文件时,为什么 xterm 的行为与 x-terminal-emulator 不同?

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

首先以黑色背景开始,其他以白色开始。有哪些可能的原因是配置不一样?如何调试它?

xterm alternatives x-resources

9
推荐指数
1
解决办法
1217
查看次数

更改 Python 的默认版本会破坏 Ubuntu 20.04

我正在创建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 包一起工作?

ubuntu alternatives python3

6
推荐指数
2
解决办法
906
查看次数

APT 如何处理同名的不同程序?

我决定最终学习 vi 并且当我这样做时,我意识到 vi 的行为不像我预期的那样。我从另一篇文章中了解到,这是因为在 Ubuntu 上,默认情况下安装了 vim-tiny。

在我得知我选择使用以下命令安装完整版 vim 后:

sudo apt-get install vim
Run Code Online (Sandbox Code Playgroud)

在我这样做之后,我开始对一些事情感到好奇:

  1. 我注意到 vi 和 vim 命令现在与完整版的 vim 而不是 vim-tiny 相关联。这是怎么发生的?(即名称查找如何工作?)
  2. 如何显式执行 vim-tiny 或full vim?
  3. Linux/Ubuntu/apt 如何管理具有名称冲突的库和可执行文件?不同的版本怎么样?

我正在使用 Ubuntu Server 12.04 LTS。

ubuntu apt package-management alternatives

5
推荐指数
1
解决办法
480
查看次数

如何将 clang++ 设置为 C++ 编译器?

我正在尝试将 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++尽管 …

fedora c++ alternatives

5
推荐指数
1
解决办法
2万
查看次数

update-alternatives has two entries, one in auto and other in manual

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有两个条目,一个automanual模式中,另一个在模式中?

即使两条路径具有相同的优先级 1024,并且manual路径被标记为默认路径。手动模式总是比自动模式有更高的偏好吗?

alternatives

5
推荐指数
1
解决办法
4628
查看次数