목록으로

Shell, 그리고 Zsh

시리즈, 입문
2024. 4. 10. PM 9:00:10

운영체제 구성 요소 중 하나인 Shell

퀴즈
Shell이라는 단어는 어떤 뜻인가요?
퀴즈
다음 중 하드웨어와 소프트웨어 사이에 위치해 사용자가 컴퓨터를 다룰 수 있도록 지원하는 소프트웨어에 해당하지 않는 것은 무엇인가요?
우리가 다루는 컴퓨터는크게 분류하면 하드웨어와 소프트웨어로 구성되어 있습니다. 여러분은 소프트웨어를 이용해 지금 푸딩캠프의 컨텐츠를 학습하고, 그 소프트웨어가 동작하는 환경이 하드웨어지요. OS라고 흔히 칭하는 운영체제는 하드웨어와 소프트웨어 사이에서 이 둘을 다루도록 관리하는 소프트웨어예요. 윈도우, 맥OS, 리눅스, iOS, 안드로이드 등이 있죠.
운영체제는 크게 세 가지 요소로 구성되어 있는데, 단순하게 설명하면 하드웨어에 가까운 정도로 역할이 나뉘어있어요.
부트로더, 커널, 셸
제일 깊은 곳에서 하드웨어를 제어하는 요소는 커널이예요. 하드웨어와 소프트웨어 사이에 위치해 소프트웨어의 요청에 맞춰 하드웨어를 제어하죠. 단어 뜻 그대로 운영체제에서 가장 중요하고 핵심이 되는 역할을 하는 거예요.
운영체제의 또다른 한 종류인 부트로더는 컴퓨터라는 하드웨어가 켜질 때 커널이 동작하도록 필요한 조치를 하는 역할을 합니다. 그럼 부트로더가 없으면 컴퓨터는 구동되지 않을까요? 하드웨어는 동작합니다. 하지만 커널을 동작하지 못하기 때문에 운영체제가 구동하지 않는 거죠. 자동차에 시동을 걸어주는 장치에 해당해요.
마지막 구성요소는 커널과 사용자 사이에서 사용자의 명령을 커널에 전달하는 역할을 합니다. 바로 쉘이죠. 껍질이라 이름 붙은 이유는 씨앗이나 핵처럼 가장 중요한 커널을 감싸고 있어서 그래요. 우리는 쉘을 통해 컴퓨터를 다루는 셈이죠.

Shell 인터페이스 종류

Shell은 사용자의 명령, 즉 컴퓨터를 조작하는 행위를 받아 커널에게 전달합니다. 사용자가 Shell에게 명령을 내리는 수단이나 체계를 인터페이스라고 지칭하는데, Shell 인터페이스는 크게 두 종류로 구분합니다. 대부분 사람이 접하고 사용하는 인터페이스는 GUI(Graphical User Interface)로, 그래픽 요소로 표현되고 다뤄집니다. GUI로 사용자와 상호작용하는 Shell을 그래픽 쉘이라고 하죠.
시꺼먼 화면에 글자만 흘러가는 부담스러운 컴퓨터 조작 모습을 보신 적 있으실 거에요. 여러분이 이 컨텐츠를 보는 이유이기도 하죠. 글자로 명령을 줄 단위로 내리는 인터페이스라고 해서 CUI(Character User Interface)라고 하며, CUI로 사용자와 상호작용하는 Shell을 명령 줄 쉘이라고 합니다.
GUI 환경에서 클릭이나 드래그, 아이콘, 창 같은 요소와 개념을 모르면 컴퓨터를 다루기 곤란하잖아요. 마찬가지로 명령 줄로 Shell을 다루는 방법과 개념을 모르면 CUI 환경에서는 컴퓨터를 다루기 곤란할 거에요. 맥OS나 윈도우에서 명령 줄 Shell을 다루는 상황이 일상에서 흔히 일어나지 않더라도 말이죠.

Shell 종류

Shell도 다른 응용 소프트웨어(일명 앱)와 마찬가지로 커널을 기반으로 동작하는 소프트웨어예요. 웹 브라우저에 Firefox, Chrome, Safari, Edge 등이 있듯이 명령 줄 Shell도 여러 Shell이 있죠. 가장 대표적인 Shell은 뭐니 뭐니해도 Bash예요. 그리고 Bash가 출시되고나서 얼마 후 세상에 모습을 드러낸 Zsh도 많이 사용되고 있지요.

Bash (Bourne Again Shell)

Bash는 Brian Fox에 의해 1989년에 처음 작성되었습니다. GNU 프로젝트의 일부로 개발되었으며, Unix의 원래 Bourne Shell(sh)에 대한 자유 소프트웨어 대안으로 만들어졌지요.
Bash는 유닉스 계열이나 리눅스에서 가장 널리 사용돼요. Shell 스크립트 파일의 맨 위에 #!/bin/bash라는 명령줄을 보신 적 있으신가요? 바로 그 Bash예요. 강력한 스크립팅 기능을 제공하며, 환경 변수, 조건문 처리, 반복문, 함수 정의 등을 통해 복잡한 스크립트를 작성할 수 있어서 오랜 시간동안 사랑받고 있습니다.
Bash는 POSIX 표준을 따르기 때문에, 다양한 운영체제에서 스크립트의 이식성을 보장합니다. 이는 Bash 스크립트가 POSIX 표준을 따르는 다른 시스템에서도 기본적으로 잘 작동한다는 것을 의미하죠. 다시 말해 리눅스에서 동작하는 Bash 스크립트는 유닉스에서 동작하는 Bash Shell에서 동일하게 동작하는 거예요.

Zsh (Z Shell)

Zsh는 Paul Falstad가 1990년에 처음 작성했습니다. 이는 Bourne Shell의 확장된 버전으로, Bash보다 더 많은 기능과 개선을 제공해요. 특히 사용자 친화적인 기능으로 잘 알려져 있어요. 자동완성(Auto completion), 테마 및 프롬프트를 고도로 사용자 정의할 수 있죠. 또한, 향상된 와일드카드 검색, 배열 연산, 스펠링 검사 등의 기능을 제공합니다.
Zsh도 POSIX 호환 셸이지만, 모든 POSIX 표준을 엄격히 따르지는 않으며, Bash의 많은 부분과 비슷하지만 완벽하게 호환되는 건 아니예요. Bash 스크립트 대부분은 Zsh에서도 잘 작동하지만, 일부 고유한 구문은 호환되지 않을 수 있죠.
POSIX(휴대 운영 체제 인터페이스, Portable Operating System Interface)는 운영 체제 간의 호환성을 위해 IEEE(Institute of Electrical and Electronics Engineers)에 의해 개발된 일련의 표준입니다. 이 표준은 소프트웨어와 운영 체제가 서로 다른 환경에서도 잘 작동할 수 있도록, 파일 시스템, 셸 스크립팅, 명령어 라인 인터페이스 등에 대한 일관된 인터페이스와 명령어 세트를 정의하지요.
POSIX 표준을 따른다는 것은 특정 소프트웨어나 운영체제가 POSIX가 정의한 규칙, 인터페이스, 동작 방식을 준수한다는 것을 뜻해요. 이로 인해 개발자는 다양한 시스템에서도 호환되는 소프트웨어를 만들 수 있죠. 즉, POSIX 표준을 따르는 셸 또는 시스템에서 작성된 스크립트는 다른 POSIX 호환 시스템에서도 예상대로 작동해야 합니다.
MacOS, Linux Shell 입문 과정은 Zsh을 기준으로 설명해요. 첫 번째 이유는, Bash의 많은 기능이 Zsh에서 동일하게 동작하거나 유사한 방법으로 사용 가능하면서 더 풍부하고 편리한 기능을 제공해요.
두 번째 이유는, 맥OS는 2019년에 출시된 맥OS Catalina(10.15)부터 Zsh이 기본 Shell로 사용되고 있어요. 아무래도 맥OS 사용자가 더 많을 것으로 예상되고, 맥OS 사용자보다는 리눅스 사용자가 Shell에 더 능숙할 가능성이 크기 때문이죠.

Shell 구경하기

맥OS Z Shell

파인더에서 응용 프로그램 폴더에 들어가세요.
맥OS 파인더
아래쪽을 보면 유틸리티 폴더가 있습니다.
유틸리티 폴더
유틸리티 폴더 안에 터미널이라는 앱이 있습니다. 터미널을 실행하세요.
터미널 앱 아이콘
그럼 배경이 어두컴컴한 창이 하나 뜹니다. 바로 터미널 앱이지요. 터미널은 Shell과 이용자가 서로를 만나는 지점으로, 이용자가 Shell에 명령을 내리도록 진입하는 영역입니다. 과거에 이런 영역은 일체형 PC처럼 생긴 단말기를 사용했어서 그때 흔적으로 여전히 단말기라고 부르기도 하지요.

윈도우 PowerShell

Windows도 Mac OS와 마찬가지로 Shell은 크게 두 종류가 있는데, CLI와 GUI입니다. CLI를 바로 실습해보겠습니다.
윈도우키를 누른 상태에서 PowerShell이라고 입력하세요. Power까지만 입력해도 가장 위에 나올 겁니다.
시작메뉴에서 PowerShell 앱 아이콘
그럼 배경이 어두컴컴한 창이 하나 뜹니다. 바로 터미널 앱이지요. 터미널은 Shell과 이용자가 서로를 만나는 지점으로, 이용자가 Shell에 명령을 내리도록 진입하는 영역입니다. 과거에 이런 영역은 일체형 PC처럼 생긴 단말기를 사용했어서 그때 흔적으로 여전히 단말기라고 부르기도 하지요.
PowerShell 기본 화면
푸딩캠프 뉴스레터를 구독하면 학습과 성장, 기술에 관해 요약된 컨텐츠를 매주 편하게 받아보실 수 있습니다.
이전 컨텐츠
다음 컨텐츠
목차