Ubuntu와 같은 Debian 계열의 리눅스에서는 여러 버전의 프로그램들이 설치되어 있을 때 기본으로 사용할 프로그램을 선택하고 관리하는 데 사용되는 명령어입니다. 이 명령어는 주로 다양한 버전의 자바, 에디터, 컴파일러 등 여러 버전이 설치된 프로그램들 사이에서 하나의 기본 프로그램을 설정하는 데 사용됩니다.
Update-Alternatives의 사용법
선택
자바로 예를 들자면, 간단하게 사용할 수 있습니다.
sudo update-alternatives --config <name>
sudo update-alternatives --config java
# 예시 결과
ubuntu@ip-:~/$ sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/jdk-17.0.12/bin/java 1 manual mode
이렇게 openJDK 11과 Oracle JDK 17이 깔려있을 때, '시스템 전반적으로' 사용할 자바 버전을 지정해 줄 수 있습니다. 물론 자바 컴파일러도 같습니다. 위의 shell 명령어에서, --config java 대신 --config javac를 입력해주면 컴파일러도 지정이 가능합니다.
등록
Selection에 새로운 자바 버전을 등록하고 싶다면, 다음과 같이 할 수 있습니다.
sudo update-alternatives --install <link> <name> <path> <priority>
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/~
이 외에도 display로 특정 목록을 보여준다든지, remove로 Selection에서 제거한다든지, --auto로 Priority가 가장 높은 대체 프로그램을 선택한다든지 등을 할 수 있습니다.
주의할 점
update-alternatives와 SDK 관리 도구(예 : SDKMAN)는 서로 독립적으로 작동합니다. 따라서 update-alternatives로 설정된 자바 버전이 SDK 관리 도구에서 설정된 자바 버전보다 우선적으로 작용할지는 상황에 따라 다릅니다.
SDK를 통해 활성화된 자바 버전은 현재 세션이나 쉘에서만 적용됩니다. 예를 들어 터미널 세션에서 sdk use java <version> 명령어로 설정한 자바 버전은, 그 세션에서만 유효합니다.
그러나 update-alternatives에서 사용되는 자바는 시스템 전반에서 사용되는 기본 자바 버전을 설정합니다.
따라서 현재 터미널 세션에서는 SDK 관리 도구에서 설정해준 자바가 우선되지만, 시스템 전체에서는 update-alternatives가 우선됩니다.
예를 들어, 터미널 세션을 열고 들어가서 자바 파일을 실행하는 경우에는 SDK 관리 도구에서 설정해준, --version으로 확인할 수 있는 자바 버전이 우선이지만, 직접 터미널을 통하지 않고 CICD 툴들을 통해 .class파일로 만든 파일들을 컴파일하는것은 update-alternatives에 설정되어 있는 자바가 합니다.
추가 : '세션'이란?
여기서 말하는 세션이란 사용자가 터미널 창을 열고 그 안에서 수행하는 작업의 기간을 의미합니다. 세션은 터미널 창이 열려있는 동안 지속되며, 터미널 창을 닫으면 세션이 종료됩니다.
터미널 세션은 사용자가 터미널을 열고 명령어를 입력하는 기간이며, 세션은 터미널 창이 열려 있는 동안 계속됩니다. 사용자가 터미널 창을 닫으면 그 세션도 종료됩니다.
터미널 세션 동안 사용자가 설정한 환경 변수나 경로는 그 세션에만 영향을 미칩니다. 예를 들어, export PATH = ~ 명령어로 PATH 환경 변수를 수정하였다면, 그 변경 사항은 현재 세션에만 적용되고, 터미널을 닫게 되면 초기화됩니다.
'CS' 카테고리의 다른 글
도커 이미지를 구워주세요? - 굽는다는 것은 무엇일까? (0) | 2024.07.22 |
---|