저번에 update-alternatives 명령어를 쓰면서, 이런 의문이 들었습니다. javac의 버전? 비슷한 것을 선택할 수 있는 것은 어디서 정보를 얻어올까? 보통 파일을 열고 닫는 연산을 하게 되면, open 이나 close 같은 시스템 콜 함수는 호출하게 되어 있으니, strace로 간단하게 보도록 하겠습니다.

 


 strace update-alternatives --config javac를 쳐 보겠습니다. 그러면 execve 같은 시스템 콜 함수들이 잔뜩 보일 텐데요. 제가 관심있는 것은 open 계열의 함수들입니다.

 

 

 쭉 보니까, /var/lib/dpkg/alternatives/javac 파일을 열어버리는 게 보입니다. 제가 데비안 계열의 우분투를 쓰고 있긴 하니, 이해는 가네요. /var/lib/dpkg 밑에 있는 alternatives 디렉토리로 이동해 보겠습니다.

 

 

 보시면 awk, jmap, jmod 같은 여러 패키지(?) 들이 있는데요. 이 중에서 java의 내용을 열어보겠습니다.

 

 

 update-alternatives --config java를 쳤을 때 나오는 결과들과 비슷한 내용들이 저장되어 있음을 볼 수 있어요. 여담으로 /var는 변경될 수 있는, variable과 관련이 있습니다. 변경될 수 있는 무언가인데요. 어떻게 변경되는지, jdk를 설치하면서 보도록 하겠습니다.

 

 


 이제 jdk17을 깔아보겠습니다. apt search jdk를 입력하면, jdk를 키워드로 하는 패키지들이 나오는데요. openjdk-17-jdk를 깔아봅시다.

 

 

 그러면 요래 입력하면 될 겁니다. 설치가 끝나고 다시 update-alternatives 명령어를 입력해 봅시다.

 

 

 그러면, 아까와는 다르게 1711이 추가되었음을 볼 수 있어요. 이는 jdk17을 의미합니다.

 

 

 다시 alternatives 밑에 있는 java와 javac가 언제 변경되었는지 출력해 봅시다. stat 명령어로 할 수 있는데요. 12월 24일 18:38에 변경되었음을 알 수 있습니다. 제가 jdk17을 설치 한 시점과 일치합니다. 이제 java와 javac에 어떤 내용이 들어갔는지 보겠습니다.

 

 

 java에는 1711에 대한 정보가 추가되었습니다.

 

 

 javac에도 1711에 대한 정보가 추가되었습니다. 이 파일을 읽어와서, 사용 가능한 패키지 버전은 이러 이러한 것이 있는데 무엇을 선택할지 물어볼 수 있게 됩니다.