본문 바로가기
Linux/Ubuntu

Ubuntu(우분투) 터미널 명령어 시스템(PATH) 경로에 추가하기

by ahsung 2020. 4. 23.

 

우분투 apt 저장소를 통해서 설치한 패키지들은 보통 자동으로 경로에 추가되어 터미널 어디서든 명령어를 실행할 수 있습니다.

 

하지만 직접 설치한 프로그램들은 매번 직접 디렉토리 경로를 찾아 들어가 쉘스크립트 혹은 프로그램을 직접 실행시켜야 하는 번거로움이 있습니다.

 

이 문제는 2가지 방법으로 간단하게 해결 가능합니다.

 

첫 번째 시스템 PATH에 경로를 직접 추가하는 방법입니다.

 

Python의 가상환경인 중 하나인 tensorflow2.0 디렉토리가 있습니다.

매번 가상환경을 실행시킬 때마다 source ~/prac/tensorflow2.0/env/bin/activate 를 실행시켜주어야하는데, 경로를 매번 외울 수도 없고 다 치기도 힘듭니다 ..(  ~/ 는 현재 계정 디렉토리 경로입니다. 보통의 첫 터미널 시작경로)

그래서 저 bin 디렉토리를 시스템 path에 추가해줍시다.

 

vi ~/.bashrc

 

.bashrc 안에 저런식으로 경로를 추가해줍니다.

$PATH기존 PATH 경로들이고, ":" 는  여러값을 넣기 위한 구분표시라고 생각하시면 됩니다.

PATH = " 추가할경로 : $기존경로 " 라는건, 

시스템 PATH에 기존경로는 그대로 두고 새로운 경로를 더 추가한다는 뜻이지요

 

수로 PATH = "추가경로"  만 치게되면 기존경로가 모두 지워져 ls, cd, vi같은 명령어들이 사용할 수 없습니다.

 

그리고 "="도 위 사진처럼 띄어쓰기 없이 잘 쓰셔야 되는데 제대로 안쓰시면 경로가 이상하게 들어갈 수 있습니다. 

 

모두 작성이 끝났으면 저장하고

 

source ~/.bashrc

 

만약..경로를 잘못적으셔서 기존PATH가 모두 날라가 ls, cd 등등 갑자기 사용이 안되신다면..

 

/usr/bin/vi ~/.bashrc

 직접 vi 명령을 찾아서 다시 수정해주세요..

/bin/lesspipe ~/.bashrc

source ~/.bashrc 명령어와 동일합니다. source도 아마 PATH가 날라가서 사용 못하실겁니다 ㅎㅎ..

 

만약 lesspipe 명령어가 실행이 안되신다면, 터미널 재부팅 혹은 컴퓨터 재부팅을 하시면 bashrc가 적용되어 있습니다.

 

결과 tensorflow2.0가상환경의 bin/ 디렉토리 내부가 모두 PATH 경로에 추가되었습니다.

물론 계정의 .bashrc를 수정했기 때문에 해당 계정에서만 사용가능합니다.

~/prac/tensorflow2.0/env/bin/  경로 자체가 등록된거기 때문에 activate 바이너리 실행 파일명이 다른 가상환경과 중복되는거 같다면 mv로 이름만 바꿔서 사용도 가능합니다

 

하지만 문제점이 있는데, 현재 tensorflow2.0 가상환경의 bin 디렉토리에는 activate 외에도 여러가지 pip, pyhton3 등등 바이너리 파일이 있습니다. 하지만 기존 PATH에도 pip과 python3가 있을텐데 가상환경의 바이너리 실행파일과 충돌이 일어나거나, 의도치 않은 실행파일이 잘못 실행되는 참사가 일어날 수 있습니다.

 

물론 따로 디렉토리를 생성해서 거기에만 필요한 바이너리 파일을 넣고 PATH추가를 해도되지만 그렇게 복잡하게 말고 이미 PATH에 들어있는 디렉토리에 바로 넣는 방법이 있습니다!!

 

 

두번째 방법은 ~/.local/bin/ 디렉토리에 직접 바이너리 실행파일을 넣는 것입니다.

 

해당 ~/.local/bin/ 디렉토리는 이미 PATH에 경로가 추가된 디렉토리기 때문입니다.

저는 activate를 사용할 것이기 때문에 그냥 옮겨도 되겠지만, 그것 보다는 심볼릭 링크를 생성해서 ~/.local/bin/에 넣는 것을 추천드립니다.

 

cd ~/.local/bin

ln -s ~/prac/tensorflow2.0/env/bin/activate tensorflow
//ln -s <복사할 파일 경로> <심볼릭링크 파일명>

 

혼자 하늘색인 tensorflow 파일이 심볼릭링크 파일입니다.

쉽게 생각해서 윈도우의 "바로가기" 파일입니다.

ln 명령어에서 -s 옵션을 안붙이면 하드링크 파일이 생성됩니다.

하드링크는 진짜 그 파일의 inode자체를 그대로 가르키기 때문에,  원본 file을 삭제해도 하드링크로 만든 파일이 남아있다면 file system에서 삭제되지 않고 남아있습니다.

 

 

댓글