· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
GentooX86 Handbook_Ko_2-5


1. 환경 변수

1.1. 환경 변수?

1.1.1. 그것들은 데체 뭔가요?

환경변수는 하나 이상의 어플리케이션에서 사용되는 정보를 포함하고 있는 이름이 붙은 객체입니다. ㅤ많은 사용자들 (그리고 특히 리눅스를 갓 접한) 은 이것이 약간 이상하거나 관리가 안되는 걸 발견할 것입니다. 그러나 그렇게 생각하는건 실수입니다. 환경변수를 사용함으로 인해 하나 이상의 어플리케이션에서 환경설정을 쉽게 변경할 수 있습니다.

1.1.2. 중요한 예

다음의 표에서는 리눅스 시스템에서 사용되는 많은 변수들을 나열하고 그들의 사용에 대해 설명합니다. 예제 값들은 표 다음에 나옵니다.

Variable Description
PATH This variable contains a colon-separated list of directories in which your system looks for executable files. If you enter a name of an executable (such as ls, rc-update or emerge) but this executable is not located in a listed directory, your system will not execute it (unless you enter the full path as command, such as /bin/ls).
ROOTPATH This variable has the same function as PATH, but this one only lists the directories that should be checked when the root-user enters a command.
LDPATH This variable contains a colon-separated list of directories in which the dynamical linker searches through to find a library.
MANPATH This variable contains a colon-separated list of directories in which the man command searches for the man pages.
INFODIR This variable contains a colon-separated list of directories in which the info command searches for the info pages.
PAGER This variable contains the path to the program used to list the contents of files through (such as less or more).
EDITOR This variable contains the path to the program used to change the contents of files with (such as nano or vi).
KDEDIRS This variable contains a colon-separated list of directories which contain KDE-specific material.
CONFIG_PROTECT This variable contains a space-delimited list of directories which should be protected by Portage during updates.
CONFIG_PROTECT_MASK This variable contains a space-delimited list of directories which should not be protected by Portage during updates.

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

예제 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"

1.2. 전역적 변수 정의

1.2.1. /etc/env.d 디렉토리

이 변수들의 정의를 한데 모으기 위해 젠투는 /etc/env.d 디렉토리를 소개합니다. 이 디렉토리 안에는 00basic, 05gcc등과 같은 수많은 파일들을 찾을 수 있을 것입니다. 이것은 그들의 이름에서 알려주는 어플리케이션에서 필요한 변수들이 들어있습니다.

예를들어 gcc를 설치했을때 ebuild에 의해 만들어진 05gcc라 불리우는 파일에는 다음의 변수들의 정의가 들어있습니다.

예제 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 파일을 만들고 다음의 정의내용을 입력할 수 있습니다.

예제 2-2 : /etc/env.d/99local
http_proxy="proxy.server.com:8080"

독자 여러분의 모든 변수들을 쓰기 위해 같은 파일 사용함으로써, 독자여러분 자신이 정의산 변수들을 빨리 훑어볼 수 있습니다.

1.2.2. 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"

변수의 병합은 항상 일어나는 것이 아니라 다음 변수에 대해 일어납니다. KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH, PRELINK_PATH_MASK. 다른 모든 변수들을 위해 최근 정의된 값(/etc/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는 다른 변수입니다)와 같은것이 금지된다는 의미입니다.

1.3. 지역적 변수 정의

1.3.1. 사용자 지정

환경변수를 전역적으로 정의하는것을 항상 원하는건 아닐 것입니다. 예를 들어 /home/my_user/bin과 현재 작업디렉토리 (독자여러분이 있는 바로 "이" 디렉토리) 를 PATH 변수에 새로추가하길 원할지도모르겠지만, 같은 시스템에 있는 모든 다른 사용자들이 그들만의 PATH를 가지는것을 원하지는 않을 것입니다. 환경변수를 지역적으로 정의하려면 ~/.bashrc 나 ~/.bash_profile를 사용하면 될 것입니다.

예제 3-1 : ~/.bashrc의 지역적 사용을 위한 PATH 확장
(A colon followed by no directory is treated as the current working directory)
PATH="${PATH}:/home/my_user/bin:"

재로긴하면, PATH 변수가 갱신될 것입니다.

1.3.2. 세션 지정

심지어 때로는 엄한 정의가 요구될 때도 있습니다. 아마도 바이너리 자신들의 경로를 사용하지 않거나 혹은 독자여러분들에게 잠깐 필요한 이유로 ~/.bashrc를 편집하지 않고 독자여러분들이 만들어놓은 임시 디렉토리로부터 바이너리를 사용할 수 있게 하고 싶어할 것입니다.

이런 경우 단지 PATH변수를 현재 세션에 export 명령을 이용하여 정의할 수 있습니다. 로그아웃하지 않는동안은 PATH 변수는 임시 설정내용으로 계속 사용될 것입니다.

예제 3-2 : 세션 지정 환경변수의 정의
# export PATH="${PATH}:/home/my_user/tmp/usr/bin"


ID
Password
Join
You have literary talent that you should take pains to develop.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-03 16:09:58
Processing time 0.0019 sec