엄범

 

PATH

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

 

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

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

 

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

  • 자바의 경우 `` jenv``를 사용할 수 있다.
  • 파이썬은 `` pyenv``를 사용할 수 있다.
    • 특정 프로젝트에 패키지를 아예 가두려면 `` virtualenv``를 쓰는게 좋고.
  • 둘 다 못쓰는 일반 바이너리라면 리눅스에서 제공하는 `` update-alternatives`` 를 사용하면 된다.

```bash

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``로 심볼릭 링크를 생성해준다.

 

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

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

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

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