O que exatamente o `update-alternative` faz?

99

Para que é update-alternativesutilizado o comando ?

Veja este exemplo:

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

O que isso faz? Como é diferente de adicionar o jdk ao caminho?

Digamos que eu executei o comando. Como eu voltaria ao estado original?

Desenvolvedor Android
fonte
2
Você também pode usar sudo update-alternatives --config javae javace javawsescolher entre versões instaladas.
Shayan

Respostas:

73

Ele atualiza os links /etc/alternativespara apontar para o programa para esse fim. Existem muitos exemplos, como x-www-browser, editoretc., que serão vinculados ao navegador ou editor de sua preferência. Alguns scripts ou ferramentas do sistema podem querer que você edite um arquivo manualmente (por exemplo, conflito de configuração dpkg) e eles pesquisam as alternativas para fornecer o editor de sua escolha. Para java, este é o ambiente de tempo de execução Java - Oracle, OpenJRE, etc.

Os links /etc/alternativessão apenas links simbólicos. Você pode vê-los usando, por exemplo

ls -l /etc/alternatives

Além disso, os /usr/binbinários regulares também são links simbólicos. Por exemplo:

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

Portanto, não PATHprecisa ser modificado. Apenas usa links simbólicos.

gertvdijk
fonte
Portanto, em outras palavras, eu posso digitar um único comando e ele me pedirá opções. Essa é a única vantagem adicional de definir o caminho certo. Digamos também que eu tenho um fornecedor diferente de java instalado. Como eu atualizaria o java para apontar para os dois fornecedores diferentes?
Desenvolvedor Android
Você não pode apontar para os dois como descreve. Todo o objetivo é ter um ponteiro único para a implementação da entrada, como no exemplo dado. Sem perguntas. E qualquer um dos candidatos deve funcionar - deve ser apenas uma preferência do administrador. E novamente: não tem nada a ver com PATHs.
gertvdijk
1
OK. Isso esclarece as coisas. Sei que estou voltando aos caminhos, mas só quero entender a diferença entre eles. No caso de um caminho, temos que especificar explicitamente a localização, mas, neste caso, apenas simboliza links para que, quando digitarmos java, procure primeiro o / etc / alternative. Ou estou errado em fazer essa suposição?
Desenvolvedor Android