linux에서 java를 설치하는 글을 처음 보다 보면 /etc/profile이 무엇이고, home directory에 있는 .profile이 무엇인지 궁금하실 텐데요. 2개의 차이를 간단하게 알아보겠습니다.

 


 cho의 홈 디렉토리에 .profile 파일이 있습니다. 끝에 줄에 export GH=10이 있는데요. 이는, 환경 변수 GH를 등록하고, 그 값을 10으로 설정한다는 의미입니다.

 

 

 source .profile 명령어를 치시고, echo $GH를 치시면 10이 나옴을 알 수 있어요.

 

 현재 누가 로그인 되어 있는지 알아보기 위해서 w 명령어를 쳐 보았는데요. user가 cho임을 알 수 있어요. cho 프로필에 있는, 환경변수 GH가 10이므로, echo $GH를 입력하면 10이 나옴을 알 수 있어요.

 


 이제, 새로운 유저 cho2를 만들어 보겠습니다. adduser는 새 유저를 만듭니다.

 

 적당히 새로운 패스워드를 만들고 cho2로 로그인을 해 보겠습니다.

 

 

 w를 치면, cho2로 로그인을 했다는 정보가 나오는데요. 이 상태에서 echo $GH를 치면 아무것도 나오지 않음을 알 수 있어요. 왜 그럴까요? 이는, GH라는 환경 변수가 profile cho에만 설정되었지, cho2에 설정되지는 않았기 때문입니다. 실제로 cho2의 홈 디렉토리에 있는 .profile을 보게 되면, 아래와 같이 되어 있어요.

 

 아무 것도 입력되어 있지 않아요. env와 grep을 적절히 조합해서 GH라는 변수가 set 되어 있는지 볼 수도 있고요. 어찌 되었던, 현재 저는, profile 파일을 건들지도 않았고 source 명령도 수행하지 않았기 때문에, GH라는 환경 변수가 cho2라는 프로필에 등록이 되었을 리 없습니다.

 


 상황을 다시 정리해 봅시다. 저는 cho의 profile 파일에, export GH = 10이라고 입력하고, source profile을 실행하였습니다. 그렇게 함으로서, cho의 환경 변수 GH의 값을 10으로 설정하였습니다. 그런데 cho2로 로그인을 하고 echo $GH라고 했을 때는 어땠나요? 아무 것도 출력되지 않았습니다.

 

 

 그 이유는 간단합니다. cho2의 프로필에 아무 것도 등록되지 않았기 때문입니다. 그러면 JAVA를 설치할 때, /etc/profile 파일을 바꾸는 것은 무엇을 의미할까요? 먼저, cho에 설정된 환경 변수 GH를 unset 하겠습니다.

 

 

 unset GH를 입력하면, 환경변수 GH를 없애겠다는 의미입니다.

 

 source .profile을 한 다음에 echo $GH를 하면 아까와는 다르게 환경변수 GH의 값이 출력되지 않음을 알 수 있어요. 이는 프로필에서 GH를 해제했기 때문입니다.

 

 다음에 /etc 밑에 있는 profile 파일을 수정해 보겠습니다. export GH = 10이라고 했는데요. 무엇인지 모르겠지만, 값이 10인 변수 GH를 등록하겠다는 의미입니다.

 

 

 보니까 잘 등록되었음을 알 수 있어요.

 

 cho2로 로그인을 해서, GH를 찍어보았는데요. 10이 나왔습니다. 분명히 저는 cho2에 있는 .profile을 건드리지도 않았는데도요. 이는 /etc/profile이 system-wide .profile, 즉 시스템 전역 프로필 설정 파일이기 때문입니다.

 

 이 사실은 파일의 맨 윗 부분에 나와 있습니다. 정리해 보면, 홈 디렉토리에 있는 .profile이 자기 자신의 프로필의 환경 변수만 설정하는 것이였다면, /etc/profile은 시스템 전역 설정이라고 보시면 되겠습니다. 그런데, 눈치 채셨겠지만, 이들은 본 쉘에서 동작합니다. 요새 많이 쓰는 zsh 에서는 동작하지 않아요.

 

 zsh에서 환경 변수를 전역으로 설정하기 위해서는 어떤 파일을 건드리면 될까요? zsh니까, etc 밑에 zsh가 있을 거고, 홈 디렉토리에서 .zshrc가 있을 겁니다. 그러면, /etc/zsh 밑에 zshrc가 있지 않을까요? 그 파일을 잘 건드리시면 됩니다. 이것은 다음에 해 보도록 하겠습니다.