linux (ubuntu) 시스템에서 환경 변수와 지역 변수를 다루고 관리하는 법을 정리하겠다.

환경 변수, 지역 변수란?

프로그래밍 언어를 이용해 코딩을 할 때 가장 많이 사용하는 것은 아마도 assignment 일 것이다. 다음과 같이 변수에 값을 할당하는 것이다.

a = 1

환경 변수와 지역 변수 역시 위 코딩에서 a와 같은 변수이다. 다만 운영 체제 내에서 쓰일 뿐이다. 환경 변수와 지역 변수의 차이는 사실 그 이름에서도 나타난다.

  • 환경 변수는 시스템 전체에 적용되고 있는 변수
  • 지역 변수는 현재 터미널에서만 적용되는 변수


환경 변수 다루기

이미 내 컴퓨터는 많은 환경 변수를 갖고 있다. 기본적으로 시스템이 저장해두고 있거나 프로그램 설치 시 자동으로 추가되어있기 때문이다. 현재 정의되어 있는 환경 변수 리스트를 보려면 다음 명령어를 입력한다

$ printenv

내가 알고 싶은 환경 변수만 찝어서 보고 싶으면 그 이름을 같이 넣어주면 된다.

$ printenv HOME

HOME이라는 환경 변수가 어떤 값을 갖고 있는 지 알 수 있다. 그런데 이런 환경 변수들은 내가 직접 등록한 게 아니라서 환경 변수의 이름을 정확히 알고 있지 못하는 경우가 많다. 키워드로 찾아보고 싶을 때는 grep 을 해보자

$ printenv | grep "java"

위 명령을 통해 java라는 단어가 들어간 줄을 찾을 수 있어서 관련된 환경 변수의 이름과 그 값을 모두 볼 수 있다.

아까 printenv HOME을 통해 우리는 HOME이라는 환경 변수의 값이 무엇인지 확인했다. $ 표시만 붙여주면 이 환경 변수를 시스템 안에서 자유롭게 사용할 수 있다. 다음 명령어들을 통해서 간단히 체험해보자.

$ echo $HOME
$ cd $HOME/Documents
$ sudo rm $HOME -r (장난이에요, 이건 실행하지 마세요.)

지역 변수 다루기

현재 터미널에서 지역 변수를 생성해보자. 방법은 정말 간단하다.

$ LOCALVAR=VAL

LOCALVAR라는 변수를 만들어 그 안에 VAL이라는 값을 넣어두었다. 이게 제대로 잘 저장이 되어 있는지 확인해보자.

$ echo $LOCALVAR

VAL이라는 값이 튀어나오면 제대로 저장된 것이다. 이제 방금 저장한 지역 변수 LOCALVAR가 환경 변수 리스트에 있는지 찾아볼까?

$ printenv LOCALVAR
$ printenv | grep "LOCALVAR"

위에서 두 변수의 차이점을 얘기했듯이, 환경 변수에 있을 리가 없다. 또한 새로운 터미널을 열어서 echo $LOCALVAR를 실행해보면 그런 변수가 없음을 알 수 있다. 이를 통해 지역 변수는 해당 터미널에서만 작용하는 임시 변수임을 확인할 수 있다.

환경 변수 등록 및 관리법

환경 변수를 등록하고 제거하는 가장 빠른 방법은 exportunset을 직접 쓰는 것이다.

# 환경 변수 등록
$ export MY_ENV_VAR=VALUE
# 등록한 환경 변수 제거
$ unset MY_ENV_VAR

위 방법은 일반적으로 추천하지 않는 방법이다. 환경 변수라는 것이 시스템을 사용하기 편리하도록 많은 주소들을 관리하는 목적으로 쓰는 것이 주 용도 중 하나인데, 이를 직접 다루다가 꼬이면 골치가 아파질 수 있다. 또한 내가 직접 환경 변수를 등록해 놨다가 한 두 달 이따가 "그 때 환경 변수 뭐 했던 게 있었는데" 기억 못하고 그러면 난감하게 된다.

따라서 내가 직접 환경 변수를 조작하는 상황에서 필요한 것은? 기록하는 것이다. 이미 ubuntu 시스템에서는 이러한 용도로 사용할 수 있는 /etc/environment 파일이 있다. 찾아가서 열어보면 누가 써 놓은 것인지 모르지만 PATH라는 변수가 이미 정의되어 있는 것을 볼 수 있다. 조금 더 자세히 살펴보면 내가 설치했던 프로그램들 중 일부가 추가해 놓은 것임을 알 수 있다. 더 생각해보면 그 프로그램들이 스스로 "내가 PATH에 이렇게 값을 넣어놨소" 라고 사용자가 알 수 있도록 기록을 해 놓은 것임을 알 수 있다. 혹시 그 프로그램을 삭제했는데 이 기록이 남아 있다면 확신을 가지고 지울 수 있을 것이다.

그럼 /etc/environment 파일에 내가 등록하고 싶은 환경 변수를 새로 한 줄 추가하고 저장하자. 관리자 권한이 필요하므로 sudo를 이용해서 편집해야 할 것이다. 그리고 source 명령을 통해 지역 변수로 올린다.

$ source /etc/environment
# 새로 추가한 지역 변수 MYVAR를 확인하자
$ echo $MYVAR
# 환경 변수에는 아직 없다
$ printenv MYVAR

이제 export를 통해 지역 변수를 환경 변수로 올려주면 된다.

$ export MYVAR
# 환경 변수로 잘 등록되어 있는지 확인해보자
$ printenv MYVAR

새로 java를 깔다가 환경 변수가 등록이 안 되어있어서 하는 김에 블로그에 정리해보았다.


참조 링크

환경 변수에 관한 ubuntu 공식 문서
https://help.ubuntu.com/community/EnvironmentVariables