Handbook:SPARC/Working/EnvVar/ko
환경 변수
도입부
환경 변수는 하나 이상의 프로그램에서 사용하는 정보가 들어있는 이름을 붙인 객체입니다. 수많은 사람은(그리고 리눅스를 처음 접하는) 약간 이상하거나 관리하기가 힘들다는 점을 발견할 것입니다. 그러나, 이렇게 생각하는 것 자체가 실수입니다. 하나 이상의 프로그램의 환경 설정을 바꿀 때 환경 변수를 사용하면 쉽게 처리할 수 있습니다.
중요 예제
다음 표에서는 리눅스 시스템에서 사용하는 많은 변수들을 나열하였고 용도를 설명합니다. 예제 값은 표 다음에 보여드립니다.
변수 | 설명 |
---|---|
PATH | 이 변수는 여러분의 시스템이 실행파일을 찾기 위한 콜론으로 구분한 디렉터리 목록을 가집니다. (ls, rc-update, emerge와 같은) 실행 파일의 이름을 입력하였음에도 불구하고 나열한 디렉터리에 이 실행 파일이 없다면 시스템은 (/bin/ls 와 같이 완전한 경로를 지닌 명령을 입력하지 않는 이상) 이 실행 파일을 실행하지 않습니다. |
ROOTPATH | 이 변수는 PATH와 동일한 기능을 하지만, 루트 사용자가 명령을 입력할때 확인할 디렉터리의 목록만을 가집니다. |
LDPATH | 이 변수는 동적 링커가 라이브러리를 찾을 콜론으로 구분한 디렉터리 목록을 가집니다. |
MANPATH | 이 변수는 man 명령어가 man 페이지를 검색할 콜론으로 구분한 디렉터리 목록을 가집니다. |
INFODIR | 이 변수는 info 명령어가 info 페이지를 검색할 콜론으로 구분한 디렉터리 목록을 가집니다. |
PAGER | 이 변수는 파일의 내용을 조회할 (less나 more와 같은) 프로그램의 경로를 포함합니다. |
EDITOR | 이 변수는 파일의 내용을 바꿀 (nano나 vi와 같은) 프로그램의 경로를 포함합니다. |
KDEDIRS | 이 변수는 KDE 관련 내용을 포함하는 콜론으로 구분한 디렉터리 목록을 가집니다. |
CONFIG_PROTECT | 이 변수는 포티지를 업데이트 하는 동안 보호해야 할 공백 문자로 구분한 디렉터리 목록을 가집니다. |
CONFIG_PROTECT_MASK | 이 변수는 포티지를 업데이트 하는 동안 보호하지 않을 공백 문자로 구분한 디렉터리 목록을 가집니다. |
아래에서는 이들 변수에 대한 정의의 예를 보실 수 있습니다:
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"
전역 변수 정의
env.d 디렉터리
젠투에선 변수의 정의를 한곳에 모으려 /etc/env.d 디렉터리를 도입했습니다. 이 디렉터리 안에서 여러분은 00basic, 05gcc 등과 같은 수많은 파일을 찾으실 수 있습니다. 각각의 파일에 들어있는 프로그램에서 필요로 하는 변수들은 프로그램 이름 안에 언급되어 있습니다.
예를 들어 gcc를 설치할 때, 다음 변수의 정의를 가진 05gcc라고 하는 파일을 ebuild가 만들어줍니다.
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)파일을 만들고 이 정의 내용을 이 파일에 입력하시기만 하면 됩니다:
http_proxy="proxy.server.com:8080"
자체 관리 변수에 동일한 파일을 사용하면, 사용자가 스스로 정의한 변수를 빨리 찾아볼 수 있습니다.
env-update
/etc/env.d/에 있는 수많은 파일에는 PATH 변수를 정의합니다. 이것은 실수가 아닙니다. env-update를 실행하면 환경 변수를 업데이트하기 전에 각 꾸러미에 대한 수많은 정의 내용을 덧붙여서 기존의 값과 혼동하지 않고 제각각이 지닌 환경 변수 값을 쉽게 붙일 수 있도록 합니다.
env-update 스크립트는 /etc/env.d 파일들에 있는 값을 철자 순으로 붙입니다. 파일 이름은 반드시 두자리 숫자로 시작해야 합니다.
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 값 (또한 /etc/env.d/ 파일에 있는 내용도)으로 변수 값을 추가하여 변수 결합 목록에 더 많은 값을 추가할 수 있습니다.
env-update를 실행하면, 스크립트는 /etc/profile.env에 모든 환경 변수를 만들고 이곳에 값을 놓습니다 (이 값은 /etc/profile이 사용합니다). 또한 LDPATH 변수에서 정보를 꺼내와서 /etc/ld.so.conf를 만드는데 사용합니다. 그 다음 ldconfig를 실행하여 동적 링커에서 사용할 /etc/ld.so.cache 파일을 다시 만듭니다.
env-update의 실행 결과를 바로 알고 싶다면 다음 명령을 실행하고 환경을 업데이트 합니다. 자신들만의 젠투 환경을 가진 사용자들은 설치 과정에 있는 다음 명령을 기억할 것입니다.
root #
env-update && source /etc/profile
위 명령은 현재 터미널의 새로운 콘솔과 하위 요소에서 사용할 변수만을 업데이트 합니다. 따라서 X11에서 작업중이라면 여러분이 열어놓은 모든 터미널에서 source /etc/profile명령을 실행하거나 X 를 다시 시작해서 새로운 터미널이 새 변수를 사용할 수 있게해야합니다. 로그인 관리자를 사용하고 있다면 루트 사용자로 로그인해서 /etc/init.d/xdm 를 다시 시작하십시오.
다른 변수를 정의할 때 쉘 변수를 사용할 수 없습니다. 이는
FOO="$BAR"
($BAR는 또 다른 변수)와 같은 구문의 사용을 금지한다는 의미입니다.지역 변수 설정
사용자별 변수
여러분은 항상 환경 변수를 전체적으로 설정하길 바랄 것은 아닙니다. 이를테면 /home/my_user/bin 을 추가하고 (여러분이 있는) 현재 작업 디렉터리를 PATH변수에 추가하고 싶지만 시스템에 있는 모든 사용자들에게 같은 PATH값을 주고 싶지 않을 때가 있을 것입니다. 이 환경 변수를 지역적으로 설정하고 싶다면 ~/.bashrc나 ~/.bash_profile을 사용해야 합니다.
# A colon followed by no directory is treated as the current working directory
PATH="${PATH}:/home/my_user/bin:"
로그아웃/로그인한 수 PATH변수는 업데이트됩니다.
세션별 변수
때로는 더 엄격한 정의가 필요합니다. 바이너리 자신의 경로를 사용하지 않고 임시로 만든 디렉터리에서 바이너리를 사용할 수 있게 하거나 필요에 따라 잠깐 ~/.bashrc를 편집할 수도 있습니다.
이 경우 현재 세션의 PATH 변수는 export 명령으로 설정하십시오. 사용자가 로그아웃하기 전까지는 PATH 변수는 임시 설정으로 사용합니다.
root #
export PATH="${PATH}:/home/my_user/tmp/usr/bin"