리눅스 시스템에서 여러 가지 버전의 패키지를 설치하여 사용 할 경우가 많음. 이럴 때 alternatives
커맨드라인 툴을 이용하여 여러 버전의 패키지를 관리하여 필요에 따라 유동적으로 원하는 버전 선택 가능
alternatives는 심볼릭 링크를 생성, 제거, 관리, 조회 할 수 있는 기능을 제공하는 GNU 라이센스의 커맨드라인 툴
현재 alternatives 설정에는 jdk7, jdk8 가 설치되어 있음
[root@localhost java]# alternatives --config java
심볼릭 링크 생성하기 ( jdk 11 설치과정 생략 )
[root@localhost java]# alternatives --install /usr/bin/java java /usr/local/java/jdk-11.0.9/bin/java 1
Redhat 기준 alternatives 는 기본적으로
/etc/alternatives<name>
의 경로에 링크가 생성되고 priority, link, path 등 관련정보를/var/lib/alternatives/<name>
의 경로에 저장
① -> <link> : 심볼릭 링크의 경로
② -> <name> : alternatives 에서 관리 할 심볼릭 링크 그룹명
③ -> <path> : 패키지의 절대 경로
④ -> <priority> : 링크 그룹 내에서 우선순위 지정. 정수로 입력하며 클 수록 우선순위
설정 값을 확인하면 이전에는 등록되지 않았던 java 그룹 내 jdk11 버전 확인 가능하며 목록 내 자바 버전으로 수정 가능
JAVA_HOME 환경변수 설정을 위해 /etc/profile
파일을 열어 하단에 명령어 추가 후 변경사항 반영
[root@localhost java]# vi /etc/profile
# add line
export JAVA_HOME=$(readlink -f /usr/bin/java) | sed "s:bin/java::")
[root@localhost java]# . /etc/profile
readlink -f
의 의미는 심볼릭 링크에서 원본파일을 추출하는 명령어
포스트 내용대로 진행했다면readlink -f /usr/bin/java
명령어의 결과는/usr/local/java/jdk-11.0.9/bin/java
sed
는 유닉스에서 텍스트를 변환하기 위한 프로그램
s
: 행마다 처음 검색된 텍스트를 원하는 텍스트로 바꿈
:
: 토큰을 기준으로 bin/java 텍스트를 공백으로 치환
포스트 내용대로 진행했다면JAVA_HOME
환경변수에/usr/local/java/jdk-11.0.9/
텍스트 대입
안녕하세요.
올려주신 글 덕분에 Java 설치에 많은 도움이 되었습니다.
환경변수에서 readlink 앞에 괄호가 한개 빠진 것 같습니다.
프로파일 불러 올 때 오류가 발생해서 괄호를 한 개 더 넣어 수정했더니 잘 적용되었습니다.
export JAVA_HOME=$((readlink -f /usr/bin/java) | sed "s:/bin/java::")
그리고 alternatives 를 이용하여 Java 버전 변경했을 때 "java -version" 명령어를 쳐보면
기존 버전으로 계속 표기가 되더라구요. . /etc/profile 명령어를 치더라도 같은 결과 입니다.
반드시 로그아웃을 했다가 다시 로그인 해야만 변경된 JAVA_HOME 경로가 적용되는 것 같은데 무슨 방법이 없을까요?
개발자가 아니라 두서없는 내용으로 문의 드립니다.^^
감사합니다.