¿Qué hace exactamente `update-alternative`?

99

¿Para qué se update-alternativesusa el comando ?

Toma este ejemplo:

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

¿Qué hace? ¿Cómo es diferente de agregar jdk a la ruta?

Digamos que he ejecutado el comando. ¿Cómo volvería al estado original?

Desarrollador Android
fuente
2
También se puede utilizar sudo update-alternatives --config javay javacy javawspara elegir entre las versiones instaladas.
Shayan

Respuestas:

73

Actualiza los enlaces /etc/alternativespara apuntar al programa para este propósito. Hay muchos ejemplos, como x-www-browser, editoretc. que se vincularán al navegador o editor de su preferencia. Algunos scripts o herramientas del sistema pueden querer que edite un archivo manualmente (por ejemplo, conflicto de configuración dpkg) y buscarán las alternativas para darle el editor de su elección. Para java, este es el entorno de tiempo de ejecución de Java: Oracle, OpenJRE, etc.

Los enlaces en /etc/alternativesson solo enlaces simbólicos. Puedes verlos usando por ejemplo

ls -l /etc/alternatives

Además, los /usr/binbinarios regulares también son enlaces simbólicos. P.ej:

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

Entonces, no PATHtiene que ser modificado. Solo usa enlaces simbólicos.

gertvdijk
fuente
En otras palabras, puedo escribir un solo comando y me pedirá opciones. Esa es la única ventaja adicional sobre establecer un camino correcto. También digamos que tengo un proveedor diferente de Java también instalado. ¿Cómo actualizaría Java para señalar a los dos proveedores diferentes?
Desarrollador Android
No puede señalar a ambos como lo describe. Todo su propósito es tener un solo puntero a la implementación de la entrada como en el ejemplo dado. Sin preguntas Y cualquiera de los candidatos debería funcionar, debería ser solo una preferencia del administrador. Y de nuevo: no tiene nada que ver con el PATHs.
gertvdijk
1
Bueno. Eso aclara las cosas. Sé que estoy volviendo a los caminos, pero solo quiero entender la diferencia entre ellos. En el caso de una ruta, tenemos que especificar explícitamente la ubicación, pero en este caso solo enlaza enlaces simbólicos para que cuando escribamos java busque primero / etc / alternativas. ¿O me equivoco al hacer esta suposición?
Desarrollador Android