우분투에서 어떤 프로그램을 어느 경로에서든지 실행시키기 위해서는 아래와 같이 PATH를 추가합니다.


$ export PATH=$PATH:{명령어경로}    //명령어 경로에 해당 프로그램이 있는 경로를 넣습니다. 


그런데 만약 이 프로그램이 sudo 이용해야만 정상 실행된다면 위에서 PATH를 등록해도 되지 않습니다.

왜냐하면 우분투에서 sudo 명령어를 했을 때 현재 유저의 PATH  환경을 가져오지 않도록 기본 설정되어 있기 때문입니다.


아래와 같이 sudo 상태에서 env를 출력해서 해당 프로그램이 PATH에 있는지 확인합니다. 

아래에서 보시면 PATH는 기존 계정의 PATH와는 다름을 알수 있습니다. PATH 뿐만 아니라 다른 환경변수도 조금 다를 수 있습니다.

이 PATH는 /etc/visudoers 에서 지정된 secure_path를 가져온 것입니다.

$ sudo env

LC_PAPER=ko_KR.UTF-8

LC_ADDRESS=ko_KR.UTF-8

LC_MONETARY=ko_KR.UTF-8

TERM=xterm

LC_NUMERIC=ko_KR.UTF-8

LC_TELEPHONE=ko_KR.UTF-8

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:

LC_IDENTIFICATION=ko_KR.UTF-8

LANG=en_US.UTF-8

....


sudo 명령어를 사용할 때 실행한 일반 계정의 PATH 환경을 유지하려면 /etc/visudoers 파일에서 secure_path를 주석 처리하고

아래 명령을 추가 합니다. (그냥 콘솔에서 sudo visudo를 실행하면 /etc/visudoers가 열립니다.)

$ sudo visudo

...(거의 맨 윗부분)

#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Defaults env_keep=PATH

만약 특정 유저 그룹만 적용하고 싶다면 아래 줄을 추가 합니다.

Defaults:%users env_keep=PATH


다른 방법도 있습니다. .bashrc에서 sudo 명령에 alias를 추가해서 env PATH=$PATH를 잡아주는 방법도 있습니다.

alias sudo='sudo env PATH=$PATH'


이렇게 하면 sudo 명령을 입력할 때마다 PATH가 자동으로 유지됩니다.