And Brain said,

Shell, 최초의 UNIX CLI (bash, zsh, PowerShell) 본문

IT/Linux

Shell, 최초의 UNIX CLI (bash, zsh, PowerShell)

The Man 2025. 2. 14. 13:41
반응형

1. Shell ?

쉘(Shell)은 사용자와 운영체제 커널(Kernel) 사이에서 명령어를 전달하고 실행하는 인터페이스입니다. 명칭은 운영체제의 핵심인 커널(Kernel)을 감싸고 있는 '껍데기'라는 의미에서 유래되었습니다.

Shell에 대해 쉽게 말하자면, 사용자가 컴퓨터와 소통하는 방법입니다.

 

  • GUI(그래픽 사용자 인터페이스) 대신 CLI(Command Line Interface) 방식으로 조작
  • 일반적으로 터미널(Terminal) 환경에서 사용됨
  • 강력한 시스템 제어 도구인 만큼, 큰 책임이 따릅니다

2. Shell의 역사

1970년대: UNIX의 등장

  • AT&T 벨 연구소에서 개발한 유닉스(UNIX)
  • GUI 없이 터미널을 통해 조작해야 했음

1971년: 첫 번째 쉘 Thompson Shell (sh)

  • UNIX 창시자 켄 톰슨(Ken Thompson)이 개발
  • 단순한 명령 실행만 가능

1977년: Bourne Shell (sh)

  • Stephen Bourne이 개발
  • 스크립트 기능 추가 → 쉘 스크립트 등장

1983년: C Shell (csh)

  • Bill Joy가 개발
  • C언어 스타일 문법 제공
  • 히스토리 기능, 별칭(alias) 기능 도입

1989년: Bourne Again Shell (Bash)

  • GNU 프로젝트에서 sh 기반으로 개발
  • 탭 자동완성, 명령어 히스토리 기능 추가

이후 발전

  • zsh, fish, dash 등 다양한 쉘 등장

3. Shell의 동작 원리

Shell의 동작원리는 다음과 같습니다.

 

  1. 사용자가 명령어 입력
  2. ex) ls -l
  3. 쉘이 명령어를 해석 (파싱)
    • ls(명령어)와 -l(옵션) 구분
  4. 커널에 시스템 호출(System Call) 요청
    • /bin/ls 실행 파일을 찾아 실행
  5. 커널이 프로그램 실행 및 결과 반환
    • 실행된 결과를 화면에 출력

4. 다양한 Shell의 차이점

 

Shell 종류 특징 주요 기능
sh (Bourne Shell) UNIX 기본 쉘 기본적인 스크립트 가능
bash (Bourne Again Shell) sh 확장판, 리눅스 기본 탭 자동완성, 명령어 히스토리
csh (C Shell) C언어 스타일 문법 별칭(alias), 스크립트 지원
tcsh (Turbo C Shell) csh 확장판 명령어 편집 기능
zsh (Z Shell) 강력한 자동완성, 테마 bash보다 기능 강력
fish (Friendly Interactive Shell) 초보자 친화적 구문 강조, 자동 추천
dash (Debian Almquist Shell) sh보다 가벼운 쉘 빠른 실행 속도

5. 윈도우에서의 Shell

윈도우는 기본적으로 GUI가 발달되긴 했지만, UNIX 기반 Shell과는 다른 형태의 Shell이 존재합니다.

 

Shell 종류 특징 주요 기능
CMD (Command Prompt) MS-DOS 기반, 기본 제공 단순한 명령어 실행
PowerShell 객체 지향 쉘, 강력한 스크립팅 가능 Get-Command, Pipeline 지원
WSL (Windows Subsystem for Linux)
윈도우에서 리눅스 쉘 실행 가능 bash, zsh 실행 가능

 

  • CMD는 단순한 명령 실행만 가능하지만, PowerShell은 더 강력한 자동화 기능을 제공합니다.
  • WSL을 활용하면 윈도우에서도 bash, zsh 같은 리눅스 쉘을 사용할 수 있습니다.
  • 최근에는 PowerShell Core를 통해 리눅스와 맥에서도 PowerShell 사용이 가능해졌습니다.

6. 쉘 스크립트(Shell Script)의 활용

Shell Script는 명령어를 조합하여 자동화하는 강력한 도구입니다.

기본적인 예제

#!/bin/bash

echo "Hello, World!"

변수 사용

#!/bin/bash
name="Alice"
echo "Hello, $name!"

조건문과 반복문 활용

#!/bin/bash

for i in {1..5}; do
  echo "Count: $i"
done

 

Shell Script를 활용하면 배치 작업, 서버 관리, 시스템 자동화 등이 가능합니다.


7. zsh,macOS의 기본 Shell

 

macOS는 2019년 이후 기본 Shell을 bash에서 zsh로 변경했습니다. macOS Mojave(10.14)까지는 기본 Shell이 bash였지만, macOS Catalina(10.15)부터는 기본 Shell zsh를 사용하고 있습니다.

 

7-1. bash vs zsh 비교 및 차이점

1) 자동완성 기능

bash와 zsh의 가장 큰 차이점 중 하나는 자동완성(Auto-completion) 기능입니다.

 

기능 bash zsh
기본 자동완성 TAB 누르면 기본 명령어 자동완성 TAB 누르면 더욱 똑똑한 자동완성 지원
추천 리스트 제한적 명령어 및 파일 추천 가능
플러그인 지원 기본 제공 oh-my-zsh 플러그인으로 확장 가능

 

2) 글로빙(파일 확장) 차이

bash와 zsh는 파일 패턴을 확장하는 방식(글로빙, Globbing)이 다릅니다.

bash 글로빙 예제

ls *.txt  # 모든 .txt 파일 리스트 출력

zsh 글로빙 예제

ls **/*.txt  # 하위 디렉터리까지 포함하여 모든 .txt 파일 검색

 

3) 배열(Array) 처리 차이

bash와 zsh는 배열을 다루는 방식또한 다릅니다.

 

bash 배열 예제

arr=("apple" "banana" "cherry")
echo ${arr[0]}  # apple 출력

zsh 배열 예제

arr=("apple" "banana" "cherry")
echo ${arr[1]}  # apple 출력 (Zsh는 1부터 시작!)

 

4) 명령어 히스토리 검색 차이

기능 bash zsh
히스토리 검색 CTRL + R로 검색 CTRL + R, 또는 UP/DOWN 키로 미리보기 지원
중복 방지 없음 중복 명령 제거 가능

 

5) 플러그인 및 테마 지원

Zsh는 Oh My Zsh라는 강력한 플러그인 관리 도구를 지원하여 기능을 확장할 수 있습니다.

Oh My Zsh 설치 (macOS, Linux 공통)

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

bash에는 기본적으로 테마 및 플러그인 관리 기능이 없음.


쉘(Shell)은 단순한 명령 실행 도구가 아니라, 시스템을 효율적으로 제어하고 자동화할 수 있는 강력한 도구입니다. bash, zsh, fish 등 다양한 쉘이 존재하며, 각기 다른 장점이 있습니다.

bash는 리눅스에서 기본적으로 제공되며, 가장 널리 사용되는 쉘입니다.
zsh는 강력한 자동완성과 플러그인 지원으로 생산성을 높여줍니다.
fish는 초보자 친화적인 기능과 직관적인 UI를 제공합니다.
PowerShell은 윈도우에서 UNIX 스타일의 쉘을 사용할 수 있으며, 자동화와 스크립팅을 적극 활용하면 효율적인 시스템 관리를 할 수 있습니다.

자신의 환경과 필요에 맞는 쉘을 선택하여 활용하면, 반복적인 작업을 줄이고 보다 편리한 개발 환경을 구축할 수 있습니다.

반응형
Comments