[ 리눅스 shell 이해하기 ]
- Shell이란 한마디로 사용자와 운영체제 사이를 Interface시키는 하나의 유틸리티 프로그램이다.
- Shell은 윈도의 command.com(시작-실행-cmd)이 하는 역할처럼 login 이후부터 사용자가 입력하는 명령어를 기계어로 변역하여
커널에 전달하는 역할을 하는 명령어 해석기이다.
- 또한 쉘은 사용자가 입력한 명령 라인을 읽어들여 해석하고 리눅스 시스템을 통해서 명령 라인이 실행되게 하는
Command Interpreter이다.
- Kernel 과 직접적으로 연결되어 있으며 해석한 결과를 커널로 보낸다. 다시 말해 사용자와 커널과의 대화라고도 할 수 있으며
다른 프로그램으로 넘겨주도록 하고 커널로 보내기도 한다.
* 쉘의 정의
- 쉘(Shell)은 운영체제에서 사용자가 입력하는 명령을 읽고 해석하여 대신 실행해주는 프로그램이다.
- 쉘은 Unix 나 리눅스에만 있는것은 아니며, Windows 운영체제나 다른 운영체제에도 Shell 은 필수 요소.
- 운영체제는 로그인한 사용자가 없다면 하나의 쉘도 실행되지 않은 상태이다.
- 사용자가 로그인을 시도하면 운영체제는 ID와 패스워드를 받아들이는 로그인 프로그램을 실행하게 되고, 사용자가
입력한 ID와 패스워드를 검증한 뒤 정상적인 사용자라면 쉘을 실행하여 사용자 세션을 쉘에게 넘겨준다.
* 역활
-. 사용자가 입력한 명령을 해석하여 대신 실행해주는 것.
쉘 내부 명령어 : 스스로 실행하고 결과를 화면에 표시.
쉘 외부 명령어 : PATH 환경변수에 지정된 경로에서 입력 받은 명령과 같은 파일을 찾아 exec() 시스템콜을 호출하여
실행한 뒤 키보드와 마우스 등의 입력장치와 모니터에 해당하는 표준 출력장치의 제어권을 해당 프로그램에게 넘겨준 뒤
프로그램이 끝날 때 까지 대기.
2) Bourne again shell은 최초로 개발된 쉘인 Bourne shell의 변종이라 할 수 있다.
리눅스에서 가장 많이 사용되는 IEEE POSIX 호환이며 Borune shell과 호환되는 쉘로서
GNU 프로젝트에 의해 만들어지고 배포되고 있다. 명령행 편집 기능을 제공한다
sh ( Bourne Shell )
프롬프트 : $
본 쉘 보다는 개발된 C쉘이나 콘 쉘과 기능적인 면을 비교해 보면 본 쉘에 미흡한 점이 있다. 그 중 가장 큰 단점은 상호 대화형(Interactive)
방식을 취하고 있지 않다는 점이다. 이러한 상호 대화형 방식을 사용하고자 한다면 쉘을 바꿔서 작업하는 것이 좋을 것이다.
- Steven Bourne의 Bourne Shell, sh
- 쉘 명령 대본을 작성하는데 이용되는 쉘
- 강력한 명령 프로그래밍 언어 기능을 갖는 쉘
- 가장 오래 동안 모든 유닉스 시스템의 표준 구성 요소
csh ( C 프로그램 스타일의 Shell )
프롬프트 : %
버클리 캘리포니아 대학에서 개발된 프로그래머들에게 적합한 shell입니다. ( csh는 C쉘이며 sh는 본 쉘이다 )
대화형 사용법에서는 Bourne shell과 대부분 호환되지만 전혀 다른 프로그래밍 인터페이스를 가지고 있고, 히스토리 대체라는 복잡한
기능으로 대신하고 있지만 명령행 편집 기능은 제공하지 않습니다.
- Bill Joy의 C Shell, csh
- C언어와 유사한 언어를 사용
- 상호 대화형 방식으로 구성
ksh ( Korn Shell )
프롬프트 : $
일반적으로 유닉스에서 가장 많이 사용되고 있는 shell이며 Bourne shell에 처음으로 현대적
인 shell 기능(C shell로부터 차용한 것이다.)을 도입한 shell 입니다. Bourne shell과 호환
되고, 명령행 편집 기능을 제공합니다.
zsh
프롬프트 : %
Korn Shell과 매우 유사한 셸이지만 Korn Shell보다 더 많고 유용한 기능 등을 추가하여 개선시킨 것이다.
tc Shell
프롬프트 : >
코넬 대학에서 C Shell 수정본에 Korn Shell의 기능을 포함하여 개발된 셸이다. 95%의 C Shell과 5%의 새로운 기능이 추가되어 만들어졌다.