공든탑앱 열기

셸의 개념과 종류

리눅스마스터 2급 · Shell · 약 8분

쉽게 말하면

검은 화면에 명령을 치면 그 글을 읽고 알아듣는 프로그램이 셸이에요. 사람의 말을 컴퓨터 심장(커널)에 전하는 통역사예요. 리눅스 기본 셸은 bash이고, 통역사마다 말버릇과 편의 기능이 조금씩 달라요.

시험용 정의

셸은 사용자의 명령을 해석해 커널에 전달하는 명령어 해석기이자 스크립트 언어다. 리눅스의 기본 셸은 bash(Bourne Again SHell)다.

비유로 이해하기

셸은 통역사다. 같은 뜻을 전해도 통역사마다 말버릇(문법)과 편의 기능이 조금씩 다르다.

자세히

셸의 종류와 계보

셸특징
sh (Bourne shell)스티븐 본, 1977년 유닉스 초기 표준 셸. 가장 오래된 셸. /bin/sh
csh (C shell)빌 조이(BSD, 1978년경), C 언어와 비슷한 문법, 히스토리·alias 기능을 처음 도입
tcshcsh 개선판 (명령행 편집, 자동 완성)
ksh (Korn shell)데이비드 콘(AT&T, 1983년), sh 호환 + csh 기능
bashGNU 프로젝트(브라이언 폭스, 1989년), sh 호환 + csh·ksh 장점. 리눅스 기본
dashPOSIX 표준을 따르는 가볍고 작은 sh 호환 셸. Debian·Ubuntu의 /bin/sh
zshbash·ksh·tcsh 기능 확장, macOS 기본

셸 확인과 변경

명령뜻
echo $SHELL로그인 셸(로그인할 때 받은 셸)
ps지금 실행 중인 셸 확인(CMD 열에 bash 등). 로그인 뒤 다른 셸을 실행했다면 $SHELL과 다를 수 있다
cat /etc/shells사용 가능한 셸 목록
chsh -l사용 가능한 셸 목록 (chsh 옵션)
chsh -uchsh 사용법 출력
grep kim /etc/passwdkim의 로그인 셸 확인(마지막 필드)
chsh -s /bin/zsh내 로그인 셸 변경 (다음 로그인부터). /etc/passwd 마지막 필드가 바뀜
bash, zsh (그냥 실행)현재 셸 안에서 새 셸을 자식으로 실행 (exit로 돌아옴)

bash의 편의 기능

명령행 편집, Tab 자동 완성, 히스토리(↑, !번호), alias, 작업 제어(fg·bg·jobs), 셸 스크립트(변수·조건·반복·함수). 사용자의 로그인 셸은 /etc/passwd의 마지막 필드에 적혀 있다.

시험에 이렇게 나와요

확인 문제

Q1. 현재 로그인 셸이 무엇인지 확인하는 방법으로 알맞은 것은?

  1. chsh -l
  2. echo $SHELL
  3. echo $HOME
  4. cat /etc/shells
정답 보기

2번 echo $SHELL

환경 변수 SHELL에 로그인 셸 경로(/bin/bash 등)가 들어 있다. /etc/shells와 chsh -l은 사용할 수 있는 셸 목록이다.

Q2. 다음 셸 가운데 가장 먼저 등장한 것은?

  1. csh
  2. sh(본 셸)
  3. bash
  4. ksh
정답 보기

2번 sh(본 셸)

sh(1977) → csh → ksh → bash(1989).

Q3. 로그인한 뒤 csh를 실행해 들어갔다. 지금 실행 중인 셸을 확인하기에 알맞은 명령은?

  1. ps
  2. chsh -l
  3. echo $SHELL
  4. cat /etc/shells
정답 보기

1번 ps

$SHELL은 로그인 셸(bash)을 그대로 보여 준다. 실행 중인 프로세스를 보는 ps로 확인한다.

Q4. 리눅스의 기본 셸로 GNU 프로젝트에서 개발한 것은?

  1. csh
  2. bash
  3. ksh
  4. tcsh
정답 보기

2번 bash

bash (Bourne Again SHell).

Q5. 시스템에서 사용 가능한 셸 목록이 저장된 파일은?

  1. /bin/shells
  2. /etc/passwd
  3. /etc/shells
  4. /etc/shell
정답 보기

3번 /etc/shells

/etc/shells다. chsh로 바꿀 수 있는 셸이 여기에 적혀 있다. 사용자별 로그인 셸은 /etc/passwd 마지막 필드에 있다.

Q6. C 언어와 비슷한 문법을 가진 BSD 계열 셸은?

  1. ksh
  2. dash
  3. sh
  4. csh
정답 보기

4번 csh

csh(C 셸)다. 빌 조이가 BSD 유닉스용으로 만들었고 문법이 C 언어와 비슷하다. ksh는 sh와 호환되는 콘 셸이다.

Q7. 사용자의 로그인 셸을 바꾸는 명령은?

  1. chsh
  2. set shell
  3. usermod -h
  4. chshell
정답 보기

1번 chsh

chsh -s /bin/셸 (usermod -s로도 가능).

헷갈리기 쉬운 O·X

cat /etc/shells는 현재 사용 중인 셸을 알려 준다.

정답 보기

X 사용 가능한 목록. 현재 로그인 셸은 echo $SHELL.

bash는 본 셸(sh)과 호환된다.

정답 보기

O Bourne Again SHell.

사용자의 로그인 셸 정보는 /etc/passwd의 마지막 필드에 있다.

정답 보기

O 맞는 설명이다.

함께 보면 좋은 개념