Linux Programmer

bash : 기초 : 셸의 역사, 종류 본문

컴퓨터 관련/리눅스, 유닉스

bash : 기초 : 셸의 역사, 종류

sunyzero 2019. 10. 13. 16:04

셸의 발전 순서대로 보면 다음과 같다.

 

  • Bourne shell : /bin/sh - POSIX shell
  • C shell : /bin/csh - Sun microsystem (BSD)
  • Korn shell : /bin/ksh
  • bash : /bin/bash
  • zsh : /bin/zsh

1. bash 이전의 셸들

가장 유명한 셸은 초기 유닉스에서 쓰였고, 아직까지도 현역으로 쓰이는 본셸(Bourne shell)이 있다. Steve Bourne이 만들었고, 그 이전에 유닉스의 아버지가 만들었던 Thompson shell이 있지만 지금은 쓰이지 않는다.

 

본셸은 POSIX 표준에 기본 셸로 정해져서 POSIX shell이라고도 부르고, 실행 파일명을 따서 sh shell이라고도 부른다.

 

그 후 BSD종주 역할을 담당했던 썬 마이크로시스템즈의 C셸이 개발되었으나 20여년 가까이 쓰여지다가 지금은 많이 쓰이지 않게 되었다. C셸은 초창기에는 대단했으나 기존 표준셸과 문법도 다르고 버그도 좀 나오고 그래서 꺼려지다가 지금은 쓰이지 않게 되었다.

 

그 다음에 System V를 이은 상용 유닉스의 표준셸은 sh의 특성을 계승하면서 더 많은 기능을 가진 콘셸이 나오게 되었고, 대부분의 유닉스에서 기본 셸의 자리를 잡아갔다. 콘셸의 이름도 만든 사람의 이름인 David Korn에서 따서 만들어졌다. 콘셸은 기본으로 vi 에디팅 모드를 사용했기 때문에 콘셸을 쓰다보면 계속해서 ESC를 치는 자신을 발견하게 된다.

 

2. bash의 등장

리눅스가 등장했을 때 콘셸을 사용하지 못한 것은 라이선스 문제가 제일 컸다. 하지만 POSIX shell을 쓰기엔 기능이 너무 구려서 bash라는 셸이 나오게 되었다. Bash는 Bourne again shell라는 뜻이라고 하는데 기본으로 본셸의 기능을 계승하고, 콘셸의 기능도 포함하고, 추가적인 기능까지 넣어서 만능 셸처럼 쓰였다.[1]

 

현재 bash는 리눅스와 Mac OSX의 기본 셸이며 가장 보편적인 셸이다. 요새는 대부분의 상용 유닉스들도 기본 셸로 bash를 쓰는 경우가 많다.

 

bash의 특징은 많은 부분의 external command들을 built-in command로 대체했기 때문에 셸 스크립트 작성시 적극적으로 built-in 명령어를 사용하면 성능이 높아지는 장점이 있었다.

 

하지만 bash에도 플러그인 기능이라든지 현대적인 여러가지 기능을 추가하기는 점점 힘들어졌고, 그래서 좀 더 미려한 디자인과 다양한 플러그인을 만들 수 있도록 디자인된 zsh가 나오게 되었다. 개인 유저들 중에는 zsh를 기본 셸로 쓰는 사람들이 많다. 하지만 회사나 기업은 성능이나 여러가지 안정성, 보안 때문에 bash를 쓰는 경우가 많다.

 

3. 결론

기본적으로 어떤 리눅스, 유닉스를 쓰더라도 bash는 꼭 알아야 한다. zsh는 bash를 어느 정도 쓰고 난 뒤에 좀 더 새로운 것을 배우기 위해서 사용해보면 좋다.

 

bash 셸을 제대로 배웠다면 /etc/profile.d/bash.sh 에 다음과 같은 내용을 넣어두고 사용하게 된다.

# /etc/profile.d/bash.sh
if [ $TERM = 'xterm' ]; then
        export TERM=xterm-256color
fi

if [ $UID -eq 0 ]; then
        PS1="\[\e[0;32m\][\D{%H:%M:%S}]\[\e[35m\] \h\[\e[0m\]@\[\e[1;31m\]\u\[\e[0m\]:\w # "
else
        PS1="\[\e[1;32m\][\D{%H:%M:%S}]\[\e[35m\] \h\[\e[0m\]@\[\e[1;33m\]\u\[\e[0m\]:\w \$ "
fi
# enable i-search shortcut
sttyp stop ''

alias 니='ls'
alias ㅊㅇ='cd'
alias ㄹㅎ='fg'
alias enus='export LANG=en_US.UTF-8'
alias kokr='export LANG=ko_KR.UTF-8'
alias mminfo='head -12 /proc/meminfo'
alias pscpu='ps -eo s,pid,ucmd:12,time,cp,pcpu,etime,pmem --sort=-time,-cp | head'
alias psmem='ps -eo s,pid,ucmd:12,cp,etime,pmem,rss,maj_flt --sort=-pmem,-maj_flt | head'
alias pstree='pstree -np'

# force tmux to assume the terminal supports 256 colors
alias tmux='tmux -2'
alias forecast='curl v2.wttr.in/Seoul'

? () { echo "$*" | bc -l; }

Hexcalc () {
    HexInput=$*
    if [ ${#HexInput} -gt 2 -a ${HexInput:0:2} == '0x' ]; then
        HexInput=${HexInput:2}
    fi
    echo "ibase=16;${HexInput^^}" | bc;
}

 

 

[1] 말장난으로 Born again sh라고도 한다.

0 Comments
댓글쓰기 폼