다음 이전 차례

3. General

모든 유닉스의 프로세스들은 "환경"을 담고 있다. 이것은 변수들의 리스트로 name 이나 또는 특정 값 들이다.(둘다 단지 string 으로서 대부분의 character가 들어갈 수 있다). 모든 유닉스 프로세스들은 패런트 프로세스 (부모 프로세스)를 가지고 있다 (부모 프로세스란 현재의 프로세스를 (이전에) 생성한 프로세스로 이때 현재의 프로세스는 차일드 프로세스라 한다(자식 프로세스)). 자식 프로세스는 부모 프로세스로부터 환경을 물려받게 되고 자식 프로세스는 또 다시 자기 자식프로세스를 만들면서 환경을 바꿀수 있다.

그 중 중요한 환경변수 가운데 하나가 path 이다. path는 명령어를 찾기위해 검색해야될 디렉토리들의 리스트로서 콜론(:)으로 구분되어진다. 만약 당신 이 'foo' 라는 명령어를 쳤다면 path 에 정의된 순서대로 디렉토리들이 검색 되어지며 실행파일인(x 비트가 on 상태인 파일) 'foo' 파일을 찾게되고 발견 이 되면 실행이 된다.

이 howto 문서에서 나는 path 메카니즘에 의해 짧은 이름만으로(풀 패스 네임이 아닌:역자주) 호출되어지는 실행파일을 가리켜 '명령어'(command) 라 부르겠다.

리눅스에서는 프로세스를 시작하기 위한 저수준의 운영체제 시스템 호출도 (exec 패밀리 콜들) path 에 정해진 디렉토리들을 검색하여 실행되어진다: 또한 당신이 어디에서 명령을 실행하건 path 메카니즘에 의해 실행되어진다. 만약, exec 시스템 콜이 '/'이 포함되지 않은 파일네임(즉, 풀패스 네임이 아 닌것:역자 주)을 실행할 것을 요구받으면 path 변수를 참조하게 되고 PATH 가 설정되어있지 않더라도 적어도 /bin 과 /usr/bin 디렉토리가 적당한 명령 을 위해 검색되어지게 될 것이다.

환경변수 세팅은 sh 에서는 export 명령어를 사용하고 csh 에서는 setenv 명령어를 사용한다. 예를 들면:

sh: PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.

csh: setenv PATH usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.

C-프로그램에서는 setenv() 라이브러리콜을 사용하여 환경을 바꿀 수 있 다. Peal 에서는%ENV 라는 조합 행렬을 가지고 있어서 다음과 같이 path를 설정할 수 있다.

$ENV{PATH}="/bin".

env 명령어는 현재의 환경변수값들을 알아보는데 기본적인 명령어이며 또한 환경 변수를 바꾸는 데에도 쓰일 수 있다.

기본적인 환경(변수) 메카니즘에 대한 정보들은 매뉴얼 페이지의 'environ', 'execl', 'setenv'를 보거나 info 파일 'env' 그리고 쉘에 관한 문서를 보기 바란다.

리눅스가 부팅될 때 제일 처음 시작되는 것은 init 프로세스이다. 이것은 특별한 프로세스로서 모든 프로세스들의 조상이 되며 자신은 부모프로세스를 가지지 않는다. 즉 init 의 환경은 명백하게 바뀌지 않는한 다른 모든 프로세 스의 환경으로서 남아있게 된다.(사실 대 부분의 프로세스들은 환경을 수정 한다)

init 은 여러 프로세스 그룹들을 실행시키는데, /etc/inittab 파일이 어떤 프 로세스를 시작시킬것인지 알려준다. 이 프로세스들은 init 으로부터 받은 환 경을 가지고 수행되고, 'getty'(콘솔에 'login:'이라고 나타내주는 프로세스) 같은 것들이 있다. 만약 여기서(시스템 스타트 시에) ppp접속을 시작한다면 이 때는 init의 환경변수 아래서 수행되고 있음을 알아야 한다. 시스템 초기 화는 대게 여기서 시작되는 스크립트들에 의해 이루어 진다. 데비안 1.3의 초기화는 /etc/init.d/rc 이며 이 스크립트는 또 다시 다른 초기화 스크립트 들을 호출한다.

시스템에는 돌아가고 있는 많은 서버(데몬이라고도 함)들이 있는데 이 것들 은 디폴트의 환경변수를 사용할 수도 그렇지 않을수도 있는데, 대부분의 서 버들은 초기화 스크립트에서 실행되어지며 그래서 init 의 환경을 가지고 있 다.

사용자가 시스템에 로그인 하게되면 환경변수들은 프로그램에 컴파일되어 들어간 환경변수 설정에 의해서, 또는 시스템 전반에 영향을 주는 초기화 스 키립트나 사용자 초기화 스크립트에 의해 변하게 된다. 이것은 꽤 복잡하고 여기서 설명하기에는 충분치 않다고 본다. 예를 들어 사용자가 콘솔로 로그 인을 하는 경우, 아니면 xdm 또는 network를 통해서 로그인을 하게되는 경 우가 완전히 다르게 된다.


다음 이전 차례