Trans:GentooX86Handbook2-5

Gentoo Korea Wiki
Darkcircle (토론 | 기여)님의 2013년 3월 27일 (수) 20:29 판 (→‎지역적 변수 지정하기)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 가기 검색하러 가기

환경 변수

환경 변수라고?

뭐하는 건가요

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

중요한 예제

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

변수 설명
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"