제4장. 커널과 쉘 이해하기
1. 하드웨어와 커널, 쉘, 사용자
리눅스 시스템은 크게 네 가지 주요 구성 요소로 나눌 수 있습니다:
[사용자] ↔ [쉘] ↔ [커널] ↔ [하드웨어]
- 하드웨어: 실제 물리 장치 (CPU, 메모리, 디스크 등)
- 커널: 하드웨어를 직접 제어하는 리눅스의 핵심 (운영체제의 심장)
- 쉘: 사용자의 명령어를 해석해서 커널에 전달하고, 결과를 사용자에게 출력
- 사용자: 터미널이나 GUI를 통해 시스템을 조작하는 사람
리눅스에서 우리는 보통 쉘(Shell) 을 통해 시스템을 조작합니다. 이전 장에서 사용했던 명령어들도 전부 쉘을 통해 입력한 것입니다.
2. 쉘(Shell)이란 무엇인가?
쉘은 커널과 사용자 사이의 명령어 인터페이스 역할을 합니다. 사용자가 입력한 명령을 커널이 이해할 수 있도록 번역하고, 커널의 출력을 사람이 읽을 수 있도록 가공해 보여줍니다.
쉘은 보통 터미널에서 실행되며, 우리가 입력한 명령어 한 줄 한 줄을 해석하고 실행합니다.
3. 쉘의 종류
리눅스에는 다양한 종류의 쉘이 존재합니다. 그 중 가장 널리 사용되는 몇 가지는 다음과 같습니다:
| 쉘 이름 | 설명 |
|---|---|
sh | Bourne Shell. 전통적인 유닉스 기본 셸 |
bash | Bourne Again SHell. 대부분 리눅스에서 기본 채택된 쉘 |
zsh | 기능이 강력하고 사용자 친화적인 쉘 |
fish | 자동 완성, 구문 강조 등 편의 기능이 많은 쉘 |
dash | 매우 가벼운 쉘. 일부 시스템 스크립트에 사용 |
4. 다양한 쉘을 사용하는 이유
쉘마다 문법, 기능, 성능 특성이 다르기 때문에 용도에 맞게 선택할 수 있습니다.
bash: 범용 사용에 적합, 대부분의 리눅스 배포판에서 기본값zsh: 테마와 자동완성 기능이 풍부해 개발자들에게 인기dash: 부팅 속도에 유리한 경량 쉘
장점 요약:
- 사용자 경험 향상 (예: zsh의 자동완성)
- 스크립트 호환성 확보 (POSIX 호환용으로 dash 사용)
- 특정 작업 최적화 (예: 경량 쉘로 빠른 실행)
5. 우리는 지금 어떤 쉘을 쓰고 있을까?
현재 사용하는 쉘 확인
echo $SHELL
사용자 기본 로그인 쉘 확인
getent passwd $USER
출력 예시:
user:x:1000:1000::/home/user:/bin/bash
→ /bin/bash 가 현재 로그인 시 사용하는 기본 쉘입니다.
6. 지금까지는 bash 기반 실습
이 책에서는 기본적으로 bash를 사용해 실습하고 있습니다. 하지만 이후에는 다양한 쉘을 경험하고, 본인의 작업 스타일에 맞는 쉘을 선택해볼 수 있습니다.
향후 쉘 스크립트를 배울 때도 어떤 쉘을 기반으로 작성하는지가 중요하니, 지금부터 ’쉘’이라는 개념을 명확히 이해해두는 것이 중요합니다.
정리
이번 장에서는 리눅스의 구조를 구성하는 주요 요소인 하드웨어 ↔ 커널 ↔ 쉘 ↔ 사용자의 관계를 살펴보았고, 우리가 명령어를 입력하는 창인 쉘이 어떤 역할을 하는지 이해했습니다. 또한 여러 쉘의 종류와 차이점, 우리가 사용 중인 쉘을 확인하는 방법도 함께 배웠습니다.
다음 장에서는 파일 권한과 사용자 계정에 대해 본격적으로 학습합니다.