공부/이모저모

Ubuntu 환경변수 총정리 (/etc/profile vs .profile vs /etc/zsh vs .zshrc)

JUNFUTURE 2022. 9. 8. 15:40

환경변수란

환경변수란 말그대로 변수다.

근데 이제 OS에서 실행되는 소프트웨어가 참조하기위한 변수인데

핵심은 OS에서 실행되는 소프트웨어가 무엇인가? 인데

 

우분투의 경우 bash, zsh 윈도우의 경우 cmd 이다.

즉, 환경변수란 bash와 같은 커맨드 쉘이 참조하기 위한 변수라고 생각하면된다.

 

환경변수 예시

위에서 이야기한 것처럼 OS에서 실행되는 프로그램인 bash에서는 환경변수를 참조할 수 있다.

 

Ubuntu에서 홈 디렉토리에 있는 .profile 파일을 열어서 맨 마지막 줄에

export TEST=1103 과 같이 입력하면

TEST라는 이름의 환경변수를 등록하고 그 값으로 1103을 설정한다는 뜻이다.

한번 환경변수를 확인하고 값을 출력해보면 다음과 같다.

source .profile은 변경된 설정 내용을 시스템에 반영하는 명령어이다.

해당 명령어를 실행하지않고 환경변수 $TEST를 출력해보면 아무런 값도 나오지않는 것을 확인할 수 있다.

 

.profile VS /etc/profile

앞서 .profile을 수정해 환경변수를 추가해보았는데

profile이라는 파일은 환경변수를 설정해주는 파일이라는 것을 알 수 있다.

 

다만 Ubuntu에는 기본으로 .profile과 /etc/profile 두개의 파일이 있는데,

결론부터 말하면 이 둘의 차이점은 환경변수를

user id를 기준으로 설정해주냐 / 시스템 전역으로 설정해주냐

의 차이이다.

 

잘 감이 오지않을텐데,

/etc/profile을 수정하면 OS에 등록되어있는 user가 누구이던지 상관없이 해당 환경변수를 이용할 수 있다는 뜻이고

특정 유저의 홈 디렉터리 안의 .profile을 수정하면 해당 user만 해당 환경변수를 이용할 수 있다는 뜻이다.

 

.profile이 특정 유저의 홈 디렉터리 안에 존재하는 것이 바로 그 이유이다.

 

.profile VS /etc/profile 감 잡기

두 파일의 차이를 이해하기위한 핵심은

user id 기준 VS 시스템 전역의 차이를 이해하는 것이다.

 

이를 위해서 다른 유저를 만들어서 환경변수를 출력해보면

jun2라는 유저를 만들고 해당 계정에 로그인을 해서 echo $TEST를 입력해도

1103이라는 값을 얻을 수 없다.

 

그런데 /etc/profile을 수정하면

jun2라는 유저에서도 해당 환경변수를 이용할 수 있다.

 

bashsr VS zsh

추가로 profile 설정파일은 사실 우분투 기본 쉘인

bashsr을 기준으로 환경변수를 설정해주는 방법인데,

zsh과 같은 다른 쉘을 사용한다면 해당 쉘에 맞는 환경변수 설정파일을 수정해주어야한다.

 

앞서 언급했듯 환경변수는 커맨드 쉘이 참조하기 위한 변수이기 때문에

커맨드 쉘의 종류가 달라지면 당연히 환경변수를 설정하는 방법도 달라진다.

 

zsh 환경변수를 설정할때에는

/etc/zsh이 시스템 전역설정

유저 홈 디렉토리 안의 .zshrc이 유저별 설정 파일이다.

 

참고자료

https://codingdog.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-zsh-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98-%EC%84%A4%EC%A0%95%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%95%98%EB%A9%B4-%EB%90%A0%EA%B9%8C%EC%9A%94?category=1058611

https://codingdog.tistory.com/entry/linux-profile-vs-etcprofile-%EC%84%A4%EC%A0%95-%EB%B2%94%EC%9C%84%EA%B0%80-%EC%96%B4%EB%94%94%EA%B9%8C%EC%A7%80-%EC%98%81%ED%96%A5%EC%9D%84-%EB%AF%B8%EC%B9%98%EB%8A%94%EA%B0%80