`update-alternatives` 到底做了什么?

Dev*_*oid 122 update-alternatives

命令是update-alternatives用来做什么的?

拿这个例子:

sudo update-alternatives --install /usr/bin/java java /usr/local/java/jre1.7.0_09/bin/java 1
Run Code Online (Sandbox Code Playgroud)

它有什么作用?和路径加jdk有什么区别?

假设我已经运行了命令。我如何恢复到原来的状态?

ger*_*ijk 91

/etc/alternatives为此,它会更新链接以指向程序。有很多示例,例如x-www-browsereditor等,它们将链接到您喜欢的浏览器或编辑器。某些脚本或系统工具可能希望您手动编辑文件(例如 中的配置冲突dpkg),他们会研究替代方案以提供您选择的编辑器。对于java,这是 Java 运行时环境 - Oracle 的、OpenJRE 等。

中的链接/etc/alternatives只是符号链接。你可以看到他们使用例如

ls -l /etc/alternatives
Run Code Online (Sandbox Code Playgroud)

此外,常规/usr/bin二进制文件也是符号链接。例如:

ls -l /usr/bin/java
  lrwxrwxrwx 1 root root 22 Aug 14 10:33 /usr/bin/java -> /etc/alternatives/java
ls -l /etc/alternatives/java
  lrwxrwxrwx 1 root root 46 Aug 14 10:33 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
Run Code Online (Sandbox Code Playgroud)

所以,不需要PATH修改。它只是使用符号链接。


map*_*pto 6

虽然 @gertvdjik 的答案很好地解释了替代方案如何在较低级别工作,但它没有明确说明如何恢复原始状态。

我发现使用galternatives作为软件包提供的相应 GUI 更容易。要安装它,只需运行:

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

那么管理替代方案就会变得容易得多。特别是对于 java,您有很多必须更新的辅助二进制文件,并且在 GUI 中概述它们会更快。