지난 주에는 UNIX의 역사에 대하여 간략히 기술하였는데 이번 주에는 UNIX를 구성하는 주요한 요소 중 하나인 SHELL 을 주제로 삼았다.

 

SHELL이란. 커널과 사용자 사이를 이어주는 역할을 한다. 즉, 사용자로부터 발행된 명령어를 해석하여 그것을 커널에게 전달한다. H/W < 커널 < SHELL 정도로 이해하면 된다.

 

여기에서 또 커널에 대하여.

커널이란 UNIX 장비의 메모리에 항상 떠 있는 프로그램이라고 할 수 있다. 

따라서 사용자 명령의 처리를 담당하는 SHELL과는 다소 대비되는 역할을 하고 있다고 할 수 있다.

주요한 구성 요소는 다음과 같다.

  1. 인터럽트 처리기 : 종료된 입출력 연산 등 커널의 서비스를 경쟁적으로 요구하는 모든 요청들을 처리

  2. 스케줄러 : 어떠한 프로세스가 어떠한 순서로 커널의 처리시간을 공유할 것인가 결정

  3. 수퍼바이저 : 스케줄이 끝나면 실제 각 프로세스에게 UNIX 장비의 사용권을 부여

  4. 메모리 관리자 : 메모리나 저장장치 내에서 UNIX 의 주소공간을 관리하고 , 이를 주변장치와 사용자들에게 나누어줌

이러한 커널의 서비스들은 시스템 콜이라고 불리우는 것들에 의하여 처리된다.

 

다시 SHELL 로 돌아와서 SHELL 은 크게 네종류가 있다.

 

  1. 본 쉘 (BOURNE SHELL)

AT&T 벨 연구소의 STEPHEN BOURNE이 만든 SHELL로 최초의 대중화 된 SHELL이다.

구문은 ALGOL과 유사하다.

sh 로 실행하며 프롬프트는 $ 이다.

  2. C SHELL

버클리 대학에서 개발된 SHELL이다. 

사용법에 있어서는 BOURNE SHELL과 크게 다르지 않지만 프로그래밍 인터페이스는 전혀 다르다.

(C언어와 밀접한 관계임) 

csh 로 실행하며 프롬프트는 % 이다.

  3. KORN SHELL

DAVID KORN이 만든 UNIX 세계에서 가장 많이 사용되는 SHELL이다. 

BOURNE SHELL 기반이지만 C SHELL의 좋은 점이 많이 접목되었다.

ksh 로 실행하며 프롬프트는 $ 이다.

  4. BASH SHELL

BOURNE AGAIN SHELL이라는 이름처럼 BOURNE SHELL에서 발전된 SHELL로,

BOURNE SHELL과 하위 호환성이 있다.

버전 2.0 이후부터는 KORN SHELL, C SHELL의 기능들도 많이 수용되고 있다.

대부분의 LINUX에서 사용하고 있으며 GNU 프로젝트가 주도하고 있다.

bash로 실행하며 프롬프트는 $ 이다.

BASH SHELL의 주요 환경변수는 다음과 같다.

- ENV : .bashrc 파일에서 설정하며 각종 환경파일의 이름

- EUID : SHELL이 시작될떄 현재 사용자의 유효 ID 확장

- HISTFILE : 명령어 히스토리 파일명으로 default는 ~/.bash_history

- HOME : 사용자의 홈 디렉토리 값, cd 치면 이 위치로 이동함

- LANG : LC_로 시작하는 변수들에 포함되지 않은 Locale 설정

- PATH : PATH

- PPID : Parent 프로세스의 PID

- PWD : 현재 디렉토리

- SHELL : 현재 사용중인 SHELL

- UID : 현재 사용자의 UID