지난 주에는 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