[linux] PATH 환경 변수에 디렉토리 경로 추가하기
리눅스에서 $PATH 환경 변수는 윈도우 운영체제의 PATH처럼 실행 파일이 있는 위치를 찾는 디렉토리(들)에 대한 목록을 담고 있는 변수입니다.
실행 파일이 있는 경로로 이동하지 않고 실행 가능한 파일들을 실행할 수 있기 때문에 필수인 환경 변수입니다.
PATH 변수는 영구 PATH와 임시 PATH로 나눌 수 있습니다. 같은 PATH 변수 값을 말하지만, 임시 PATH 변수 값은 현재 로그인한 세션이 끝나면 사라지는 변수 값이고 영구 PATH는 터미널에 로그인할 때마다 기본 PATH 값으로 설정되는 변수 값입니다.
실행파일 위치 찾기
PATH 경로에 없는 실행 파일은 전체 경로를 표시하지 않으면 실행할 수 없습니다. 실행 파일 경로를 PATH 환경 변수에 추가하려면 실행 파일의 경로를 알아야 합니다.
실행 파일의 경로를 알려면 which 커맨드를 사용합니다.
찾은 실행 파일 경로를 PATH 환경 변수에 추가하면 실행 파일을 전체 경로 입력 없이 실행할 수 있습니다.
$ which nginx
/usr/sbin/nginx
$
PATH의 용도
앞서 설명한대로 PATH 환경 변수는 터미널에서 실행 파일을 실행하면 실행 파일을 실행하기 위해 실행 파일의 위치를 찾는 경로의 모음입니다.
PATH에 설정된 경로들을 검색해서 해당 실행 파일이 있으면 실행 파일을 실행합니다.
PATH 환경 변수에 설정된 디렉토리들을 확인하려면 echo 명령어를 사용합니다. PATH 환경 변수는 대문자입니다.
$ echo $PATH
/home/apost/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$
경로는 여러 개를 나열해서 표시하며 콜론(:)으로 디렉토리를 구분합니다. 표시된 PATH 변수의 값은 우분투의 환경 변수 값이며, 설치된 패키지에 따라서 추가되거나 삭제됩니다.
리눅스에는 환경 변수 값을 출력하기 위한 커맨드인 printenv가 별도로 있습니다.
$ printenv PATH
/home/apost/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$
결과는 동일하지만 환경 변수 앞에 $를 붙일 필요가 없습니다.
PATH 환경 변수에 임시 경로 추가
터미널 셸 커맨드라인으로 PATH 환경 변수에 디렉토리 경로를 즉시 추가할 수 있습니다.
export PATH="/var/www/apostdev:$PATH"
$PATH는 PATH 환경 변수에 등록된 모든 디렉토리 목록을 나열합니다.
"추가할 새 디렉토리 경로:$PATH"로 표현해서 PATH 환경 변수에 대입하면 새 디렉토리가 PATH에 추가됩니다.
추가한 디렉토리의 실행 파일은 이제 터미널에서 전체 경로 표시 없이 실행할 수 있습니다.
이 방식은 PATH에 디렉토리가 등록되면서 즉시 적용되지만, 터미널 세션을 닫으면 사라집니다. 즉, 초기 값으로 되돌아갑니다.
디렉토리가 추가되었는지 echo 명령어로 경로를 출력해서 확인합니다.
$ echo $PATH
/var/www/apostdev:~/:/home/apost/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$
영구 PATH 경로 추가
로그인 한 계정 루트의 .bashrc 파일을 에디터로 엽니다.
.bashrc 파일은 bash 셸을 사용할 때 기본 로딩되는 bash 스크립트 파일입니다. dash를 사용할 때는 로딩되지 않습니다. .profile 파일에서 bash 셸 일때만 .bashrc를 실행하도록 조건 실행 처리됩니다.
앞서 입력했덭 export 커맨드 행을 .bashrc 파일 맨 끝 행에 추가합니다. 파일을 저장한 후 재 로그인 하면 추가한 디렉토리 경로가 PATH에 추가됩니다.
여러 개의 디렉토리 경로를 추가하려면 콜론으로 구분해서 다음처럼 연속 표현을 하면 됩니다.
export PATH="<디렉토리1>:<디렉토리2>:$PATH"
추가한 경로를 삭제하려면 .bashrc 끝에 추가한 행을 삭제하면 됩니다.
영구 PATH 경로 삭제
PATH 환경 변수에 등록되어 있는 경로를 삭제하려면 export로 디렉토리를 삭제해야 합니다. 잘 사용하지는 않지만 다음과 같이 삭제합니다.
$export PATH=${PATH/'<삭제할디렉토리경로>'/}