PATH

  • shell에 명령어를 입력하게 되면 환경 변수 `` PATH``에 등록된 경로를 차례로 뒤져가면서 해당 명령어와 일치하는 바이너리가 있는지 찾는다.
  • `` /usr/bin``에 위치한 바이너리가 쉘에서 별도의 prefix 없이 명령어로서 사용할 수 있는 것은, 이 경로는 기본으로 `` PATH``에 등록되어 있기 때문

 

패키지를 수동 설치 하거나 바이너리를 직접 가져온 경우, 이를 명령어로 등록하고 싶다면?

  • 해당 바이너리가 위치한 경로를 환경변수 `` PATH``에 추가하는 방법
    • PATH 관리가 좀 지저분해질 수 있다.
  • 해당 바이너리만 `` /usr/bin``으로 직접 symbolic link하는 방법
    • 가능은 하지만 단점이 있음. 버전이 여러 개인 경우.
    • 예를 들면 java8, java12나 python2, python3 처럼 버전이 여러 개라면 관리가 난감할 수 있다. 
  • 버전 관리 도구를 사용하는 방법.
    • 추천

 

이런 경우 버전 관리가 가능한 별도 도구를 사용하는 것이 좋다.

  • 자바의 경우 `` jenv``를 사용할 수 있다.
    • 하지만 update-alternatives를 쓰는게 더 나아보인다.
  • 파이썬은 `` pyenv``를 사용할 수 있다.
    • 특정 프로젝트에 패키지를 아예 가두려면 `` virtualenv``를 쓰는게 좋고.
  • 둘 다 못쓰는 일반 바이너리라면 리눅스에서 제공하는 `` update-alternatives`` 를 사용하면 된다.
  • https://blog.benelog.net/installing-jdk.html#update_alternatives_alternatives
update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_171/bin/java" 1;
update-alternatives --set java /usr/local/java/jdk1.7.0_45/bin/java;
root@ubuntu:/usr/bin# update-alternatives --config java
There is 1 choice for the alternative java (providing /usr/bin/java).

  Selection    Path                                   Priority   Status
------------------------------------------------------------
  0            /usr/local/java/jdk1.8.0_171/bin/java   1         auto mode
* 1            /usr/local/java/jdk1.8.0_171/bin/java   1         manual mode
Press <enter> to keep the current choice[*], or type selection number:

``c /usr/bin/java -> /etc/alternatives/java``로 심볼릭 링크를 생성해준다.

 

java는 그냥 /usr/libexec/java_home 쓰면 된다

❯ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
    19.0.2 (arm64) "Amazon.com Inc." - "Amazon Corretto 19" /Users/user/Library/Java/JavaVirtualMachines/corretto-19.0.2/Contents/Home
    17.0.8 (arm64) "Azul Systems, Inc." - "Zulu 17.44.15" /Users/user/Library/Java/JavaVirtualMachines/azul-17.0.8/Contents/Home
    1.8.0_382 (arm64) "Azul Systems, Inc." - "Zulu 8.72.0.17" /Users/user/Library/Java/JavaVirtualMachines/azul-1.8.0_382/Contents/Home
/Users/user/Library/Java/JavaVirtualMachines/corretto-19.0.2/Contents/Home


---

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

 

bash 환경변수 명시 스크립트 불러오는 순서

각 스크립트를 열어보면 `` if 있으면 then 그 스크립트를 실행한다`` 내용이 상단에 적혀있어서,

.bash_profile이 .bashrc를 부르고, .bashrc가 /etc/bashrc를 부르고.. 이런 식이다.

  • `` /etc/profile.d/``
  • `` /etc/bashrc``
  • `` .bashrc``    --- non-login shell에도 적용하려면 여기, 또는 상위 스크립트에 명시해야 한다.
  • `` .bash_profile``

 

'OS > LINUX & UNIX' 카테고리의 다른 글

Shell Script  (0) 2021.03.15
shell prompt (bash, Oh My Zsh)  (0) 2020.01.10
SSH 접속 끊어도 프로세스 돌아가도록 하기 : screen, disown, 백그라운드 작업  (1) 2017.11.13
gcc options  (2) 2017.10.01
libc 버전 문제  (0) 2017.07.23