Que fait exactement `update-alternatives`?

99

A quoi sert la commande update-alternatives?

Prenons cet exemple:

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

Qu'est ce que ça fait? En quoi est-ce différent d’ajouter jdk au chemin?

Disons que j'ai exécuté la commande. Comment pourrais-je revenir à l'état d'origine?

Développeur Android
la source
2
Vous pouvez également utiliser sudo update-alternatives --config javaet javacet javawspour choisir entre les versions installées.
Shayan

Réponses:

73

Il met à jour les liens /etc/alternativespour pointer vers le programme à cet effet. Il existe de nombreux exemples, tels que x-www-browser, editoretc., qui renverront au navigateur ou à l'éditeur de votre choix. Certains scripts ou outils système peuvent dpkgvous demander d’éditer un fichier manuellement (par exemple, un conflit de configuration dans ) et ils examineront les alternatives pour vous donner l’éditeur de choix. Car javail s’agit de l’environnement d’exécution Java - Oracle, OpenJRE, etc.

Les liens en /etc/alternativessont juste des liens symboliques. Vous pouvez les voir en utilisant par exemple

ls -l /etc/alternatives

De plus, les /usr/binfichiers binaires réguliers sont également des liens symboliques. Par exemple:

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

Donc, non PATHdoit être modifié. Il utilise simplement des liens symboliques.

Gertvdijk
la source
Donc, en d'autres termes, je peux taper une seule commande et cela me demandera des choix. C'est le seul avantage supplémentaire par rapport à la définition d'un chemin correct. Disons également que j'ai un autre fournisseur de Java également installé. Comment puis-je mettre à jour Java pour qu'il pointe vers les deux fournisseurs?
Développeur Android
Vous ne pouvez pas pointer les deux comme vous le décrivez. L’objectif principal est d’avoir un seul pointeur sur l’implémentation de l’entrée, comme dans l’exemple donné. Sans questions. Et n'importe lequel des candidats devrait travailler - cela devrait juste être une préférence de l'administrateur. Et encore: cela n’a rien à voir avec PATHs.
gertvdijk
1
D'accord. Cela clarifie les choses. Je sais que je reviens sur des chemins mais je veux juste comprendre la différence entre eux. Dans le cas d'un chemin, nous devons spécifier explicitement l'emplacement, mais dans ce cas, il ne s'agit que de liens sym afin que, lorsque nous tapons java, il recherche d'abord / etc / alternatives. Ou ai-je tort de faire cette hypothèse?
Développeur Android