Trans:GentooX86Handbook2-5

Gentoo Korea Wiki
둘러보기로 가기 검색하러 가기

환경 변수

환경 변수라고?

뭐하는 건가요

환경 변수는 하나 이상의 프로그램에서 사용하는 정보가 담긴 이름이 붙은 객체입니다. 대부분의 사용자(와 특히 리눅스에 처음 접하는 분들) 은 좀 이상하다거나 관리가 안되는 걸로 알고 계십니다. 그러나, 이렇게 보신건 실수입니다. 어떤 환경 변수 하나를 사용하면 하나 이상의 프로그램에 대한 설정을 쉽게 바끌 수 있습니다.

중요한 예제

다음 표에서는 리눅스 시스템에서 사용하는 많은 변수들을 나열하였고 용도를 설명합니다. 예제 값은 표 다음에 보여드립니다.

변수 설명
PATH 이 변수는 여러분의 시스템이 실행파일을 찾기 위한 콜론으로 구분한 디렉터리 목록을 가집니다. (ls, rc-update, emerge와 같은) 실행 파일의 이름을 입력하였음에도 불구하고 나열한 디렉터리에 이 실행 파일이 없다면 시스템은 ( /bin/ls 와 같이 완전한 경로를 지닌 명령을 입력하지 않는 이상) 이 실행 파일을 실행하지 않을 것입니다.
ROOTPATH 이 변수는 PATH와 동일한 기능을 하지만, 루트 사용자가 명령을 입력할때 확인할 디렉터리의 목록만을 가집니다.
LDPATH 이 변수는 동적 링커가 라이브러리를 찾을 콜론으로 구분한 디렉터리 목록을 가집니다.
MANPATH 이 변수는 man 명령어가 man 페이지를 검색할 콜론으로 구분한 디렉터리 목록을 가집니다.
INFODIR 이 변수는 info 명령어가 info 페이지를 검색할 콜론으로 구분한 디렉터리 목록을 가집니다.
PAGER 이 변수는 파일의 내용을 조회할 (lessmore와 같은) 프로그램의 경로를 포함합니다.
EDITOR 이 변수는 파일의 내용을 바꿀 (nanovi와 같은) 프로그램의 경로를 포함합니다.
KDEDIRS 이 변수는 KDE 관련 내용을 포함하는 콜론으로 구분한 디렉터리 목록을 가집니다.
CONFIG_PROTECT 이 변수는 포티지를 업데이트 하는 동안 보호해야 할 공백문자로 구분한 디렉터리 목록을 가집니다.
CONFIG_PROTECT_MASK 이 변수는 포티지를 업데이트 하는 동안 보호하지 않을 공백문자로 구분한 디렉터리 목록을 가집니다.

아래에서는 이들 변수에 대한 정의의 예를 보실 수 있습니다.


코드 예제 1.1: 정의 예제
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"

ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
/usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
/usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"


전역 변수 지정하기

/etc/env.d 디렉터리

이 변수의 정의를 한곳에 모으기 위해 젠투에선 /etc/env.d 디렉터리를 도입했습니다. 이 디렉터리 안에서 여러분은 00basic, 05gcc 등과 같은 수많은 파일을 찾으실 수 있습니다. 각각의 파일에 들어있는 프로그램에서 필요로 하는 변수들은 프로그램 이름 안에 언급되어 있습니다.

예를 들어 gcc를 설치할 때, 다음 변수의 정의를 가진 05gcc라고 하는 파일을 ebuild가 만들어줍니다.


코드 예제 2.1: /etc/env.d/05gcc
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"

ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"


다른 배포판에서는 바뀐 내용을 알려주거나 각각의 환경 변수 정의를 추가할 때 /etc/profile 등의 위치에 넣습니다. 그러나 젠투에서는 환경 변수를 포함할 수 있는 수많은 파일에 일일히 신경쓰지 않게 여러분과 포티지를 위해 환경변수를 좀 더 쉽게 관리할 수 있게 해줍니다.

예를 들어 gcc를 업데이트하면 사용자 확인 절차 요구 없이 /etc/env.d/05gcc 파일을 업데이트합니다.

이는 포티지 뿐만 아니라 사용자 입장에서의 여러분께도 이득입니다. 때로는 시스템 전체와 관련된 일부 환경 변수를 설정하라고 요청을 받을 수도 있습니다. 아래 예를 통해 http_proxy 변수를 보도록 하겠습니다. /etc/profile을 점점 크게 하는 대신에 (/etc/env.d/99local)파일을 만들고 이 정의 내용을 이 파일에 입력하시기만 하면 됩니다.


코드 예제 3.3: /etc/env.d/99local
http_proxy="proxy.server.com:8080"


이러한 변수들에 대해 같은 파일을 사용하면서 여러분 자신이 지정한 변수에 대해 간단한 개요를 포함할 수 있습니다.

env-update 스크립트

/etc/env.d 에 있는 수많은 파일에는 PATH 변수를 정의합니다. 이것은 잘못된 것이 아닙니다. env-update를 실행하면 환경 변수를 업데이트 하기 전에 각 패키지를 위해 수많은 정의 내용을 덧붙여서 기존에 있는 값과 혼동되지 않게 제각각이 가진 환경 변수 값을 쉽게 붙일 수 있도록 합니다.

env-update 스크립트는 /etc/env.d 파일들에 있는 값을 철자 순으로 붙입니다. 파일 이름은 반드시 두자리 숫자로 시작해야 합니다.


코드 예제 2.3: env-update에서 사용하는 업데이트 순서
         00basic        99kde-env       99local
     +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"


변수의 결합이 항상 일어나는 일은 아니고 ADA_INCLUDE_PATH, ADA_OBJECTS_PATH, CLASSPATH, KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH, PRELINK_PATH_MASK, PKG_CONFIG_PATH, PYTHONPATH 변수들에게만 해당합니다. (/etc/env.d의 철자순 파일에 있는) 다른 변수들에게도 최근 정의한 값을 사용합니다.

COLON_SEPARATED 또는 SPACE_SEPARATED 값 (또한 env.d 파일에 있는 내용도) 으로 변수 값을 추가하여 변수 결합 목록에 더 많은 값을 추가할 수 있습니다.

env-update를 실행하면, 스크립트는 /etc/profile.env에 모든 환경 변수를 만들고 이곳에 값을 놓습니다 (이 값들은 /etc/profile이 사용합니다). 또한 LDPATH 변수로부터 정보를 꺼내와서 /etc/ld.so.conf를 만드는데 사용합니다. 그 다음 동적 링커에서 사용할 /etc/ld.so.cache 파일을 다시 만들기 위해 ldconfig를 실행합니다.

env-update의 실행 결과를 바로 알고 싶다면 다음 명령을 실행하고 환경을 업데이트 합니다. 자신들만의 젠투 환경을 가진 사용자들은 설치 과정에 있는 다음 명령을 기억할 것입니다.


코드 예제 2.4: 환경 업데이트
# env-update && source /etc/profile



참고: 위의 명령은 현재 터미널의 새로운 콘솔과 하위 요소들에서 사용할 변수들만을 업데이트 합니다. 따라서 X11에서 작업중이라면 여러분이 열어놓은 모든 터미널에 대해 source /etc/profile명령을 실행하거나 X 를 다시 시작해서 새로운 터미널이 새 변수를 사용할 수 있게 해야 합니다. 로그인 관리자를 사용하고 있다면 루트 사용자로 로그인해서 /etc/init.d/xdm restart를 실행하십시오. 이렇게 하지 않으면 X가 새로운 변수값으로 하위 요소를 시작하기 위해 로그아웃 했다가 다시 돌아올 필요가 있습니다.



중요: 다른 변수를 정의할 때 쉘 변수를 사용할 수 없습니다. 이는 FOO="$BAR"($BAR는 또 다른 변수)와 같은 구문의 사용을 금지한다는 의미입니다


지역 변수 지정하기

사용자별

여러분은 항상 환경 변수를 전체적으로 설정하길 바랄 것은 아닙니다. 이를테면 /home/my_user/bin 을 추가하고 (여러분이 있는) 현재 작업 디렉터리를 PATH변수에 추가하고 싶지만 시스템에 있는 모든 사용자들에게 같은 PATH값을 주고 싶지 않을 때가 있을 것입니다. 이 환경 변수를 지역적으로 설정하고 싶다면 ~/.bashrc나 ~/.bash_profile을 사용해야 합니다.


코드 예제 3.1: 지역에서 사용할 ~/.bashrc의 PATH값 확장하기
(콜론 뒤에 디렉터리를 표기하지 않는 것은 현재 작업 디렉토리로 취급합니다)

PATH="${PATH}:/home/my_user/bin:"


다시 로그인하면, PATH 변수가 업데이트 될 것입니다.

세션별

때로는 더 엄격한 정의가 필요할 수도 있습니다. 바이너리 자신의 경로를 사용하지 않고 여러분이 임시로 만든 디렉터리로부터 바이너리를 사용할 수 있게 하거나 필요에 따라서 잠깐 ~/.bashrc를 편집하기를 원하실 수도 있습니다.

이 경우 export명령을 사용해서 현재 세션에서만의 PATH변수를 정의할 수 있습니다. 여러분이 로그아웃 하지 않을 때까지 PATH 변수를 임시 설정으로 사용할 것입니다.


코드 예제 3.2: 세션별 환경 변수 설정하기
# export PATH="${PATH}:/home/my_user/tmp/usr/bin"