[유닉스] 쉘(Shell)의 기능 및 종류


쉘(Shell)

  • 사용자와 커널을 연결시켜주는 기능을 수행하는 특별한 프로그램
  • 사용자가 입력한 명령을 처리하고 실행 결과를 알려주는 기능
  • 세 가지 기능 : 명령어 해석기, 프로그래밍, 사용자 환경 설정

명령어 해석기 기능

  • 사용자와 커널 사이에서 명령을 해석하여 전달하는 해석기(Interpreter) 또는 번역기(Translator) 역할 수행
  • 사용자가 입력한 명령이나 파일에서 읽어들인 명령을 해석하고 적절한 프로그램을 실행시킴
  • 로그인 쉘 : 사용자가 로그인하면 쉘은 자동으로 실행되어 사용자가 명령 입력하기를 기다림. /etc/passwd 파일에 사용자별로 지정되어 있음
  • 사용자 명령을 기다리고 있음의 표시가 프롬프트

프로그래밍 기능

  • 쉘 자체에서 프로그램 작성 가능
  • 여러 명령을 사용해 반복적으로 수행하는 작업을 프로그램 하나로 만들 수 있음
    • 쉘 스크립트

사용자 환경 설정 기능

  • 초기화 파일 기능을 이용해 사용자 환경을 설정
  • 명령을 찾아오는 경로 설정, 새로운 파일의 기본 권한 설정, 다양한 환경 변수 설정 등을 초기화 파일에 설정할 수 있음
  • 사용자가 로그인할 때 이 초기화 파일이 실행되어 사용자의 초기 환경 설정

쉘(Shell)의 동작 순서


서브 쉘(Shell) 생성

  • 로그인 쉘 : 사용자가 로그인하면 자동으로 생성되는 기본 쉘
  • 서브 쉘 : 로그인 쉘의 프롬프트에서 다른 쉘을 실행해 새로 생성된 쉘
  • 서브 쉘은 또 다른 서브 쉘 생성 가능
  • 서브 쉘 종료 명령은 logout, Ctrl+D, exit 등 (exit을 추천)
  • 서브 쉘이 종료되면 서브 쉘을 실행했던 이전 쉘 환경으로 돌아감
  • 로그인 쉘에서 로그아웃하면 접속 해제됨


쉘(Shell)의 종류

  • 본 쉘, 콘 쉘, C 쉘, 배시 쉘
  • 명령을 입력하고 실행하는 대화식 동작 방식이 공통점
  • 스크립트를 작성하는 문법이 다름
  • 현재 사용 중인 쉘의 종류를 알아보는 가장 쉬운 방법은 프롬프트 모양을 보는 것
    • 본 쉘, 콘 쉘, 배시 쉘은 $, C 쉘은 %

본(Bourne Shell, sh) 쉘

  • 최초의 쉘
  • 개발자 스티븐 본(Stephen Bourne)의 이름을 따서 붙여짐
  • 초기에 단순하고 처리 속도가 빨라 많이 사용됨
  • 현재도 대부분의 유닉스 시스템에 기본 설치
  • 시스템 관리 작업을 수행하는 많은 쉘 스크립트들이 본 쉘을 기반으로 함
  • 명령이름 : sh
  • 히스토리 기능, 앨리어스 기능, 작업 제어 등 사용자 편의를 위한 기능을 제공하지 못해 다른 쉘들이 등장

콘(Korn Shell, ksh) 쉘

  • 1980년대 중반 AT&T 벨연구소의 데이비드 콘(David Korn)이 콘 쉘(Korn Shell)을 개발
  • 본 쉘과의 호환성 유지
  • 히스토리 기능, 앨리어스 기능 등 C 쉘의 특징들도 제공
  • 처리 속도가 빠름
  • 명령이름 : ksh

C(C Shell, csh) 쉘

  • 캘리포니아 버클리 대학교에서 빌 조이(Bill Joy)가 개발
  • 본 쉘의 기능을 확장한 것
  • 본 쉘에 없는 앨리어스, 히스토리 등 사용자 편의 기능 포함
  • C 언어를 기반으로 만들어졌으며 강력한 프로그램 작성 기능
  • 쉘 스크립트 작성을 위한 구문 형식이 C 언어와 같아 이름이 C 쉘이 되었음
  • 명령이름 : csh
  • 다양한 사용자 편의 기능을 구현하느라 크기가 커지고 처리 속도도 느려졌다는 단점이 있으나 편리한 기능 때문에 사용자들이 즐겨 사용함

배시 쉘 (Bourne Again Shell)

  • 본 쉘을 기반으로 개발된 쉘
  • 1988년 브라이언 폭스(Brian Fox)에 의해 개발됨
  • 본 쉘과 호환성을 유지하면서 C 쉘, 콘 쉘의 편리한 기능도 포함
  • GPL을 따르는 공개 소프트웨어
  • 리눅스의 기본 쉘, 솔라리스 11의 기본 쉘
  • 명령이름 : bash

기타 쉘

  • C 쉘, 콘 쉘을 바탕으로 한 다양한 쉘들이 추가로 개발되었음
  • TC(The Enhanced C Shell, tcsh) 쉘
    • C 쉘의 기능을 확장한 것
    • 명령행 편집 기능
    • 명령어 완성 기능
    • 히스토리 목록에서의 시간 표시 기능
    • 명령이름 : tcsh
  • 데스크 탑 콘 쉘
    • 콘 쉘의 변형
    • X 윈도의 기능을 지원할 수 있도록 콘 쉘 기능을 확장한 것
    • 명령이름 : dtksh
  • Z 쉘
    • TC 쉘과 콘 쉘의 기능을 함께 가지고 있음
    • 명령이름 : zsh


쉘(Shell)의 확인

  • echo 명령으로 쉘 종류 확인
$ echo $SHELL
/bin/bash
$
  • /etc/passwd 파일에서 확인
    • grep 명령을 사용하여 user1 문자열이 있는 행을 찾아 내용 출력
    • /bin/bash가 사용자의 기본 쉘
$ grep user1 /etc/passwd
user1:x:1001:1001:,,,:/home/user1:/bin/bash
$
  • /etc/shells 파일에서 확인
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
$
  • 사용 중인 배시 쉘에 대한 상세 정보 확인
$ bash --version
GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://...>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$

쉘의 변경

  • chsh 명령을 사용하여 로그인 쉘을 변경
$ echo $SHELL
/bin/bash
$ chsh
Password:
Changing the login shell for ksshin
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]:
$