Shell 개요

Shell과 Kernel, 주요 셸 비교, WSL 동작, 스크립트 구조, 초기화 개념

Shell의 기본 역할과 주요 셸 종류(bash, zsh, fish, PowerShell 등)를 실용적인 예시와 함께 소개한다. WSL에서의 동작 원리, Shell 스크립트의 기본 구조, Conda/Poetry/Git의 초기화 개념까지 개발 실무에 바로 사용할 수 있는 핵심 내용을 간결하게 정리한다.

Engineering
Infra
Shell
OS
저자

Kwangmin Kim

공개

2025년 05월 07일

1 Shell 핵심 요약

  • Shell = “명령을 받아서 운영체제에게 전달하는 인터페이스(껍데기)”.
  • 운영체제(OS) 위에서 동작한다.
  • Ubuntu 위에도 있고, macOS·Windows(WSL·PowerShell)에도 있다.

1.1 구조로 보면

아주 단순화하면 컴퓨터 시스템은 이렇게 층을 이룬다.

[사용자]  
   ↓ 명령 입력  
[SHELL]  
   ↓ 해석 후 전달  
[운영체제 Kernel]  
   ↓ 실제 동작 수행  
[하드웨어(CPU, 메모리, 디스크 등)]  
  • 사용자가 명령을 침
  • Shell이 그 명령을 읽어서 “운영체제 커널에게 전달할 수 있는 형태로 해석”
  • 커널(Kernel)이 실제로 파일 열기, 프로그램 실행 등 하드웨어 제어 수행

Shell은 운영체제와 사용자 사이의 번역기 같은 존재다.

2 Shell이 OS위에 있다.

  • Ubuntu/Linux/Window 등과 같은 운영시스템 (OS, Operating System) 위에 있다.
  • Ubuntu는 “운영체제(리눅스 배포판)”이고, 그 위에 Shell이 존재한다.
  • Ubuntu의 기본 Shell: bash (Bourne Again SHell)
  • 다른 Shell도 설치 가능하다. (zsh, fish 등)

3 Shell과 Terminal의 관계

많이 헷갈리는 부분이라 구조적으로 구분한다.

3.1 Terminal

  • “글자를 입력할 수 있도록 화면을 제공하는 프로그램”
  • 예: GNOME Terminal, iTerm2, Windows Terminal
  • 그냥 창(Interface 창)

3.2 Shell

  • 실제 명령을 처리하는 프로그램
  • Terminal 아래에서 실행됨
  • Terminal이 없다면 Shell을 사용할 화면이 없음
[Terminal] ← 실제 화면  
    ↓  
[Shell]  ← 명령 해석기  

4 Shell에서 하는 일

Shell이 해주는 핵심 기능은 세 가지다.

4.1 명령 해석

ls # directory 리스트 조회  
cd myproject # directory 이동  
git status # git 상태 조회  

이런 명령을 커널이 이해할 수 있도록 해석한다.

4.2 프로그램 실행

  • 원래 프로그램들은 파일 형태로 존재하지만 실행 방법을 모르니 shell을 통해 실행한다.
  • Shell은 운영체제와 사용자 사이를 연결하는 프로그램(인터프리터)
  • 사용자가 입력한 명령을 받아서 운영체제에 전달하고, 그 결과를 다시 사용자에게 보여준다.
  • Shell은 Python 같은 프로그래밍 언어 인터프리터와 비슷한 속성이 있다. 하지만 목적이 다르다:
    • Python: 일반적인 프로그램 로직 작성, “사용자 ↔︎ Python Interpreter ↔︎ Python Virtual Machine (PVM, 가상머신 실행 환경)”
    • Shell: 시스템 명령 실행, 파일 조작, 프로세스 관리 등 OS 제어, “OS ↔︎ 사용자” 인터프리터
구분 Shell Python
인터프리터 목적 OS 제어(프로세스, 파일, 네트워크 등) 일반 프로그래밍 로직 실행
사용자 입력 Shell 명령어(CLI) Python 코드
인터프리터가 변환하는 대상 OS 시스템 호출 Python Bytecode(PVM에 전달)
실행 환경 OS 직접 Python Virtual Machine(추상화 계층)
파일 확장자 .sh .py
python main.py  
poetry install  
conda activate env  

4.3 스크립트 실행 자동화

작업을 자동화할 수 있다.

deploy.sh  
backup.sh  

5 왜 개발자들은 Shell을 자주 사용하는가

구조적으로 보면 이유가 명확하다.

5.1 운영체제가 Shell을 통해 컴퓨터의 기능을 직접 제어하게 해주기 때문

  • 파일 이동
  • 패키지 설치
  • 서버 실행
  • Git 관리
  • 가상환경 관리

이런 것들은 GUI보다 Shell이 훨씬 빠르고 정확하다.

5.2 대부분의 DevOps·백엔드·데이터 사이언스 도구가 Shell 기반

  • python, conda, poetry
  • docker, kubernetes
  • git
  • airflow
  • ssh

6 Shell의 종류

  • sh (Bourne shell): 전통적인 POSIX 기반 표준 셸. 스크립트 호환성 관점에서 기준이 된다.
  • bash (Bourne Again SHell): 가장 널리 쓰이는 셸. 인터랙티브와 스크립팅 모두 강점. ~/.bashrc, ~/.bash_profile 사용. 초보자가 먼저 배우기 좋다.
  • dash / ash / busybox ash: 경량·빠른 POSIX 호환 셸. 임베디드·부팅 스크립트용(성능/크기 중요할 때).
  • ksh (KornShell): 전통적 스크립트 기능이 강함. 일부 레거시 시스템에서 사용.
  • zsh: 인터랙티브 기능(자동완성, 확장 프롬프트, 플러그인) 풍부. oh-my-zsh, zplug 같은 생태계 강력. 개발자 데스크탑 추천.
  • fish (Friendly Interactive Shell): 사용자 친화적 기본 설정, 자동완성·컬러가 기본. 스크립트는 POSIX와 일부 차이 있음(주로 인터랙티브용). 설정 파일: ~/.config/fish/config.fish.
  • csh / tcsh: C 스타일 문법을 가진 셸(레거시). tcsh는 csh의 향상판. 요즘은 잘 쓰이지 않음.
  • PowerShell / pwsh: 객체 기반 셸(Windows 출신, 현재는 크로스 플랫폼). 시스템 관리·자동화에 최적. Windows 환경 또는 .NET/Windows 관리 필요하면 필수.
  • nushell: 표 형식(Structured data)을 기본으로 다루는 모던 셸. 파이프에서 데이터 프레임처럼 다루기 편함(실험적).
  • elvish / yash / mksh 등: 특정 목적·경량화·대안 기능을 제공하는 신예 또는 전통적 대체 셸들.

6.1 Tips

  • 호환성: 스크립트는 가능한 한 POSIX 표준에 맞춰 sh/dash에서 실행 가능하게 작성하면 이식성이 높다.
  • 인터랙티브 개발 환경: zsh(플러그인) 또는 fish(편의성) 권장.
  • Windows 관리자/스크립팅: PowerShell 또는 pwsh 사용.
  • 임베디드/컨테이너: ash/dash/busybox가 자주 사용된다.

7 참고할 만한 공식 문서

명확하게 개념 잡는 데 도움이 되는 공신력 있는 문서만 제공한다.

Subscribe

Enjoy this blog? Get notified of new posts by email: