Se você já configurou um ambiente de desenvolvimento, provavelmente já precisou criar uma variável executável, como por exemplo:
$ python --version
Python 3.7.2
$ java -version
Java version "1.8.0_271"
Java (TM) SE Runtime Environment (version 1.8.0_271-b08)
Java HotSpot (TM) 64-Bit Server VM (version 25.271-b08, mixed mode)
Talvez até mesmo teve que gerenciar várias versões do mesmo comando… Muito comum quando você trabalha com mais de uma aplicação:
$ java -version
Java version "1.8.0_271"
$ export PATH=$PATH:/opt/jdk15/bin
$ java -version
Java version "15.0.2" 2021-01-19
Nesse caso, uma atividade tão simples como abrir o arquivo de configuração, e alterar a variável $PATH
, se transforma em um inferno diário!
Porém você pode contornar essa situação ao usar o comando update-alternatives
para:
- Definir uma nova variável de ambiente;
- E até alternar entre suas várias versões.
Tudo com muita facilidade e com um simples comando…
Então continue lendo esse artigo para aprender a utilizar o update-alternatives
de um jeito prático e intuitivo.
update-alternatives –install : Criando suas variáveis executáveis
Em primeiro lugar, você precisa ter em mente que…
O update-alternatives
na verdade cria, remove e gerencia links simbólicos no sistema.
Portanto é uma ferramenta muito útil em várias situações, mas nesse artigo vamos lidar apenas com a criação de variáveis executáveis.
Então, imagine que você possui os arquivos binários do Java 8 baixados no caminho /opt/jdk8/bin
. E deseja configurar o comando java
para executar esses arquivos.
Para isso, você pode usar o update-alternatives --install
da seguinte maneira:
$ sudo update-alternatives --install [symlink] [name] [path] [priority]
Sendo que você deve substituir os parâmetros abaixo pelos valores necessários:
[symlink]
É onde será criado o link simbólico;[name]
Nome da alternativa (escolha algo fácil de lembrar e intuitivo);[path]
Para onde o link simbólico irá apontar;[priority]
Nível de prioridade que a alternativa vai possuir (importante quando você tiver 2 ou mais variáveis);
Dessa forma, para instalar o java, teríamos algo parecido com:
$ sudo update-alternatives --install /usr/bin/java java /opt/jdk8/bin/java 20
Como configurar 2 variáveis ou mais
Do mesmo jeito que no tópico anterior, você instala outra alternativa de variável através da opção --install
.
Então, caso você queira configurar o comando java
para executar o Java 15, teria que fazer algo parecido com:
$ sudo update-alternatives --install /usr/bin/java java /opt/jdk15/bin/java 40
Nesse exemplo, o link simbólico /usr/bin/java
aponta para os binários do Java 15 em /opt/jdk15/bin/java
.
Note que o nome da alternativa é o mesmo tanto para o Java 8 quanto para o Java 15. Assim apenas uma das versões pode funcionar de cada vez.
Porém a prioridade é diferente entre as 2 alternativas (sendo 20
e 40
, respectivamente). Dessa forma, o sistema sabe qual versão você tem preferência por padrão.
update-alternatives –query : Liste as alternativas criadas
Você deve ter percebido que é fácil se perder depois de criar várias variáveis.
Nesse momento, você pode executar o comando update-alternatives --query
para listar todas as alternativas criadas:
$ sudo update-alternatives --query java
Veja que o nome “java” possui 2 comandos alternativos:
/opt/jdk8/bin/java
com prioridade20
;- E
/opt/jdk15/bin/java
com prioridade40
;
O que é o modo automático e como funciona as prioridades?
O comando update-alternatives possui 2 modos: automático e manual.
No modo automático, é selecionada a alternativa/comando/executável com a maior prioridade.
No modo manual, você seleciona a alternativa/comando/executável manualmente. Ignorando as prioridades definidas.
E como você pode ver abaixo, o update-alternatives
inicia sempre no modo (status) automático:
Note também que o Java 15 é escolhido como valor padrão por ter uma prioridade maior que o Java 8.
Você pode confirmar isso executando um java -version
no terminal:
$ java -version
Java version "15.0.2" 2021-01-19
Java (TM) SE Runtime Environment (build 15.0.2+7-27)
Java HotSpot (TM) 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)
Mas como trocar para o modo manual?
Alterando o update-alternatives para modo manual
Claro, em algum momento você vai precisar usar um comando/executável com prioridade menor.
Para isso, conte com a opção --config
…
Por exemplo, para selecionar a alternativa do Java 8 manualmente, execute no terminal:
$ sudo update-alternatives --config java
Assim o update-alternatives
listará todas as alternativas instaladas para o nome “java”:
Em seguida, você deve escolher uma versão através de sua numeração. Sendo o número zero como modo automático e o restante manual.
Portanto, para selecionar o Java 8, pressione 1
e depois Enter
.
Veja que o modo (status) agora é manual e o valor da alternativa é /opt/jdk8/bin/java
, mesmo ele tendo uma prioridade menor:
E se você quiser voltar para o modo automático? Basta usar a opção --auto
:
$ sudo update-alternatives --auto java
Como remover uma alternativa
Por último, caso você instale uma alternativa de maneira incorreta, pode remove-la com o seguinte passo a passo…
Primeiro, liste todas as alternativas disponíveis com o nome “java”:
$ sudo update-alternatives --query java
Depois copie o caminho da alternativa que deseja remover, como por exemplo /opt/jdk8/bin/java
. E execute o seguinte comando:
$ sudo update-alternatives --remove java /opt/jdk8/bin/java
Agora, se você listar novamente, verá que a configuração do Java 8 foi removida:
Por fim, você também pode remover todas as alternativas de uma vez com a opção --remove-all
:
$ sudo update-alternatives --remove-all java
Parabéns por ter chegado até aqui!
Na minha opinião, o update-alternatives não é um dos comandos mais fáceis do linux…
Porém ajuda muito na criação de ambientes, tanto de desenvolvimento quanto de servidores.
Então busque usa-lo quando tiver oportunidade, vale muito a pena.
E se você gostou desse artigo, ou ficou com alguma dúvida, não deixe de comentar abaixo:
Hey,
o que você achou deste conteúdo? Conte nos comentários.
Ótimo artigo! Muito bem explicado.
Valeu! 😉
Referências:
manpages ubuntu
linuxhint