셸의 개념과 종류
쉽게 말하면
검은 화면에 명령을 치면 그 글을 읽고 알아듣는 프로그램이 셸이에요. 사람의 말을 컴퓨터 심장(커널)에 전하는 통역사예요. 리눅스 기본 셸은 bash이고, 통역사마다 말버릇과 편의 기능이 조금씩 달라요.
시험용 정의
셸은 사용자의 명령을 해석해 커널에 전달하는 명령어 해석기이자 스크립트 언어다. 리눅스의 기본 셸은 bash(Bourne Again SHell)다.
비유로 이해하기
셸은 통역사다. 같은 뜻을 전해도 통역사마다 말버릇(문법)과 편의 기능이 조금씩 다르다.
자세히
셸의 종류와 계보
| 셸 | 특징 |
|---|---|
| sh (Bourne shell) | 스티븐 본, 1977년 유닉스 초기 표준 셸. 가장 오래된 셸. /bin/sh |
| csh (C shell) | 빌 조이(BSD, 1978년경), C 언어와 비슷한 문법, 히스토리·alias 기능을 처음 도입 |
| tcsh | csh 개선판 (명령행 편집, 자동 완성) |
| ksh (Korn shell) | 데이비드 콘(AT&T, 1983년), sh 호환 + csh 기능 |
| bash | GNU 프로젝트(브라이언 폭스, 1989년), sh 호환 + csh·ksh 장점. 리눅스 기본 |
| dash | POSIX 표준을 따르는 가볍고 작은 sh 호환 셸. Debian·Ubuntu의 /bin/sh |
| zsh | bash·ksh·tcsh 기능 확장, macOS 기본 |
셸 확인과 변경
| 명령 | 뜻 |
|---|---|
| echo $SHELL | 로그인 셸(로그인할 때 받은 셸) |
| ps | 지금 실행 중인 셸 확인(CMD 열에 bash 등). 로그인 뒤 다른 셸을 실행했다면 $SHELL과 다를 수 있다 |
| cat /etc/shells | 사용 가능한 셸 목록 |
| chsh -l | 사용 가능한 셸 목록 (chsh 옵션) |
| chsh -u | chsh 사용법 출력 |
| grep kim /etc/passwd | kim의 로그인 셸 확인(마지막 필드) |
| chsh -s /bin/zsh | 내 로그인 셸 변경 (다음 로그인부터). /etc/passwd 마지막 필드가 바뀜 |
| bash, zsh (그냥 실행) | 현재 셸 안에서 새 셸을 자식으로 실행 (exit로 돌아옴) |
bash의 편의 기능
명령행 편집, Tab 자동 완성, 히스토리(↑, !번호), alias, 작업 제어(fg·bg·jobs), 셸 스크립트(변수·조건·반복·함수). 사용자의 로그인 셸은 /etc/passwd의 마지막 필드에 적혀 있다.
시험에 이렇게 나와요
- GNU 프로젝트가 만든 셸 → bash
- 가장 먼저 등장한 셸 → 본 셸(sh, 1977). 등장 순서 sh → csh → ksh → bash
- C 언어와 비슷한 문법·히스토리 기능이 있는 셸 → csh, POSIX 소형 셸 → dash
- 사용 가능한 셸 목록 →
/etc/shells또는chsh -l, 로그인 셸 저장 위치 →/etc/passwd - 로그인 셸 확인 →
echo $SHELL, 현재 실행 중인 셸 확인 →ps, 셸 변경 →chsh -s
확인 문제
Q1. 현재 로그인 셸이 무엇인지 확인하는 방법으로 알맞은 것은?
- chsh -l
- echo $SHELL
- echo $HOME
- cat /etc/shells
정답 보기
2번 echo $SHELL
환경 변수 SHELL에 로그인 셸 경로(/bin/bash 등)가 들어 있다. /etc/shells와 chsh -l은 사용할 수 있는 셸 목록이다.
Q2. 다음 셸 가운데 가장 먼저 등장한 것은?
- csh
- sh(본 셸)
- bash
- ksh
정답 보기
2번 sh(본 셸)
sh(1977) → csh → ksh → bash(1989).
Q3. 로그인한 뒤 csh를 실행해 들어갔다. 지금 실행 중인 셸을 확인하기에 알맞은 명령은?
- ps
- chsh -l
- echo $SHELL
- cat /etc/shells
정답 보기
1번 ps
$SHELL은 로그인 셸(bash)을 그대로 보여 준다. 실행 중인 프로세스를 보는 ps로 확인한다.
Q4. 리눅스의 기본 셸로 GNU 프로젝트에서 개발한 것은?
- csh
- bash
- ksh
- tcsh
정답 보기
2번 bash
bash (Bourne Again SHell).
Q5. 시스템에서 사용 가능한 셸 목록이 저장된 파일은?
- /bin/shells
- /etc/passwd
- /etc/shells
- /etc/shell
정답 보기
3번 /etc/shells
/etc/shells다. chsh로 바꿀 수 있는 셸이 여기에 적혀 있다. 사용자별 로그인 셸은 /etc/passwd 마지막 필드에 있다.
Q6. C 언어와 비슷한 문법을 가진 BSD 계열 셸은?
- ksh
- dash
- sh
- csh
정답 보기
4번 csh
csh(C 셸)다. 빌 조이가 BSD 유닉스용으로 만들었고 문법이 C 언어와 비슷하다. ksh는 sh와 호환되는 콘 셸이다.
Q7. 사용자의 로그인 셸을 바꾸는 명령은?
- chsh
- set shell
- usermod -h
- 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 맞는 설명이다.