Was genau macht "Update-Alternativen"?

99

Wofür wird der Befehl update-alternativesverwendet?

Nehmen Sie dieses Beispiel:

sudo update-alternatives --install /usr/bin/java java /usr/local/java/jre1.7.0_09/bin/java 1

Was tut es? Wie unterscheidet es sich vom Hinzufügen von jdk zum Pfad?

Angenommen, ich habe den Befehl ausgeführt. Wie würde ich zum ursprünglichen Zustand zurückkehren?

Entwickler Android
quelle
2
Sie können auch sudo update-alternatives --config javaund javacund verwenden javaws, um zwischen installierten Versionen zu wählen.
Shayan

Antworten:

73

Es aktualisiert die Links in /etc/alternatives, um zu diesem Zweck auf das Programm zu verweisen. Es gibt viele Beispiele, wie x-www-browser, editorusw. , die an den Browser oder Editor Ihrer Wahl verbinden wird. Einige Skripte oder System-Tools möchten möglicherweise, dass Sie eine Datei manuell bearbeiten (z. B. Konfigurationskonflikt in dpkg), und sie prüfen die Alternativen, um Ihnen den Editor Ihrer Wahl zu geben. Für javadiese ist die Java - Laufzeitumgebung - Oracle, OpenJRE usw.

Die Links in /etc/alternativessind nur symbolische Links. Sie können sie zum Beispiel sehen

ls -l /etc/alternatives

Darüber hinaus sind die regulären /usr/binBinärdateien auch Symlinks. Z.B:

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

Also muss kein PATHmodifiziert werden. Es werden nur symbolische Links verwendet.

gertvdijk
quelle
Mit anderen Worten, ich kann einen einzelnen Befehl eingeben und er fordert mich zur Auswahl auf. Dies ist der einzige zusätzliche Vorteil gegenüber dem Festlegen eines richtigen Pfades. Nehmen wir auch an, ich habe einen anderen Java-Anbieter installiert. Wie würde ich Java aktualisieren, um auf die beiden unterschiedlichen Anbieter zu verweisen?
Entwickler Android
Sie können nicht auf beide zeigen, wie Sie es beschreiben. Der gesamte Zweck besteht darin, einen einzelnen Zeiger auf die Implementierung des Eintrags zu haben, wie im angegebenen Beispiel. Ohne Fragen. Und jeder der Kandidaten sollte funktionieren - es sollte nur eine Präferenz des Administrators sein. Und nochmal: es hat nichts mit PATHs zu tun .
Gertvdijk
1
Okay. Das klärt die Dinge auf. Ich weiß, dass ich auf Pfade zurückkomme, aber ich möchte nur den Unterschied zwischen ihnen verstehen. Im Falle eines Pfades müssen wir den Ort explizit angeben, aber in diesem Fall ist es nur sym links, so dass es bei der Eingabe von java zuerst nach / etc / alternatives sucht. Oder irre ich mich bei dieser Annahme?
Entwickler Android