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

Docker에서나 다른 툴에서 이미지를 생성할 때에 많은 사람들이 이미지를 생성한다고도 하고, 굽는다고도 한다.
어릴 때, Daemon tools 등으로 CD 안에 들어있는 내용물을 .lcd 또는 .iso로 변환해서 데이터로 만드는 과정을 '씨디를 굽는다'라고 했는데, 관련이 있을까?

CD의 구조


CD-ROM의 단면을 기준으로 보호층, 반사층, 기판, 인쇄층으로 구성된다.

  1. 보호층(Protective Layer) : 폴리카보네이트 기판 위의 가장 상단에는 레커(lacquer)로 만들어진 얇은 보호층이 있어 물리적 손상이나 산화로부터 CD를 보호한다.
  2. 반사층(Reflective Layer) : 기판과 보호층 사이에는 반사층이 존재한다. 알루미늄(또는 구리나 금)으로 만들어진 이 반사층은 레이저 빛을 반사하여 데이터를 읽을 수 있도록 한다.
  3. 기판(Polycarbonate Substrate) : 이름부터 알 수 있듯 폴리카보네이트 플라스틱으로 만들어져 있고, 레이저가 데이터를 읽을 때 통과하는 역할을 하며 디스크의 물리적 강도를 제공한다.
  4. 라벨(Label) : CD의 상단 표면에는 레이블이나 인쇄된 정보를 자외선으로 건조시킨다.

CD는 데이터를 어떻게 기록할까?

하드 디스크나 플로피 디스크가 디스크 표면에 자성물질이 발라져 있어서, 액추에이터의 헤드에서 자기장을 형성해 자기장의 방향에 따라 0과 1이 기록된다는 사실은 많이 알려져 있다. 그러나 CD는 디스크의 표면의 홈에 레이저 빔을 이용해 발사하고, 반사 굴절효과를 이용해 디지털 정보를 기록한다.
이 때 CD의 기판과 반사층 사이의 염료층에 레이저를 발사해 염료를 태우는 과정에서 열이 많이 발생해 이를 보고 burn(굽는다)는 표현이 나왔다.

추가 : CD의 데이터 읽기




CD에 저장된 데이터를 읽으려면 CD-ROM 드라이브에서는 레이저 빔을 쏴서 반사층의 표면에서 굴절된 레이저 빔을 렌즈를 통해 빛의 길이나 파동 등을 측정한다. CD에는 디스크의 표면에 데이터를 저장하기 위해 반사층과 기판 사이에 미세한 홈(피트)와 평평한 표면(랜드)가 있다.

  • 피트(pit) : 실제적으로 데이터를 저장하는 부분으로, 레이저 빔이 디스크 표면을 태워 만들어진 홈이다. 레이저가 피트에 도달하면 빛이 산란돼서 반사되는 양이 감소한다.
  • 랜드(land) : 레이저 빔이 발사되는 부분으로, 레이저가 랜드와 피트의 반사 신호 차이를 감지해서 데이터를 읽어낸다.
    위에서처럼, 레이저를 쏴서 피트에서 랜드로 또는 랜드에서 피트로 변환되는 부분은 1로, 변화가 없는 부분은 0으로 데이터가 해석된다.

'CS' 카테고리의 다른 글

Update-Alternatives  (0) 2024.07.29

+ Recent posts