[Linux] 모두의 리눅스 2장 - 셸이란 무엇인가

강윤서·2026년 3월 16일

Linux

목록 보기
2/10
post-thumbnail

이번 글은 『모두의 리눅스 – 누구나 쉽게 시작하는 리눅스 기초』 2장을 공부하고 정리한 내용입니다.

1. 셸과 명령어

1. 에러

리눅스에서 존재하지 않는 명령어를 입력하게 되면 명령어가 없어서 찾을 수 없다는 메시지가 뜬다.

에러를 잘 읽고 그 내용에 잘 대처하는 것이 중요하다.

2. 셸의 역할과 리눅스 커널

명령어 실행 시 리눅스 내부 과정(date 입력 시)

  1. 키보드로 입력한 date 문자열을 받아들임
  2. date 명령어를 찾음
  3. 발견한 명령어를 실행함
  4. 실행한 결과로 얻은 문자열을 화면에 표시함

→ 이 중에서 3번은 리눅스의 본체인 커널이 수행함

커널 : 운영 체제의 중심에서 CPU나 메모리 같은 하드웨어를 관리하면서 실행하고 프로세스를 관리함

셸(Shell)

: 리눅스에서는 사용자가 직접 커널을 조작할 수 없어 둘 사이에서 명령어를 받아들이고 커널의 실행 결과를 출력하는 소프트웨어

셸은 사용자가 커널 기능을 사용할 수 있도록 해주는 명령어 인터페이스(Command Interpreter) 이다.

명령어 실행 시 리눅스 내부 과정(date 입력 시)

  1. 사용자가 셸에 date 명령어 입력
  2. 셸은 date 명령어를 찾아서 리눅스 커널에게 실행을 의뢰
  3. 리눅스 커널이 명령을 실행
  4. 셸은 그 결과를 전달받아 사용자의 화면에 출력

3. 왜 커널과 셸은 나뉘어져 있을까?

커널과 셸을 분리했을 때의 이점

  • 커널을 바꾸지 않고 셸만 바꿀 수 있음
  • 리눅스 외 OS(FreeBSD, NetBSD, Solaris 등)를 사용할 때도 셸만 이식하면 똑같이 사용할 수 있음
  • 셸을 사용할 때 에러가 발생하거나 지나치게 높은 부하가 발생해도 본체인 리눅스 커널에 미치는 영향을 최소한으로 줄일 수 있음

→ 한 프로그램에 기능을 많이 넣기보다는 적절히 분리하는 것이 좋은 설계 철학


2. 프롬프트

이를 셸의 프롬프트(prompt)라 한다.

프롬프트 : 사용자에게 어떤 결정을 내리도록 한다

즉, 셸이 사용자에게 명령어를 받아들일 준비가 되었음을 나타냄.

  • 일반 사용자 : $ <명령어>
  • 슈퍼 사용자(root) : # <명령어>

1. 로그인 셸

: 로그인 후 처음으로 시작되는 셸

  • 로그인 셸 확인하기

/bin 디렉터리에 있는 bash 가 로그인 셸!

2. 대화형 조작과 셸 스크립트

  • 대화형(인터렉티브) 방식 : 명령어를 직접 입력하고 그 결과를 확인하는 조작 방식
  • 셸 스크립트 : 일련의 명령어 흐름을 기술한 파일
    • 작은 프로그램(명령어)를 조합해 복잡한 처리를 수행한다
#!/bin/sh

today=$(date '+%d')

if [ "$today" -eq 20 ]; then
    echo "오늘은 20일입니다. 출근 일자를 확인해주세요"
fi

3. 셸 종류

1. sh

  • 아주 오래전에 만들어진 셸로 본 셸(B 셸)이라 불림
  • 리눅스뿐만 아니라 FreeBSD나 Solaris, HP-UX, AIX 등 여러 운영 체제에서 사용
  • sh는 오래된 표준 셸이며 POSIX 표준을 따르는 셸 스크립트 작성 시 기준이 되는 셸
  • 오래된 셸이라 기능이 적고 특히 대화형에서는 사용하기 불편함

2. csh

  • 오래된 셸 중 하나로 C셸이라 불림
  • sh보다 대화형 조작에 편리한 기능을 갖추고 있음
  • 셸 문법이 sh와 달라 셸 스크립트 작성에는 적합X

3. bash

  • sh를 바탕으로 기능이 추가된 셸
  • 현재 대부분의 Linux 배포판에서 기본 셸로 사용됨
  • sh와 호환성이 있어 sh를 대체할 수 있음
  • 대화형 조작에 필요한 기능을 갖추고 있어 기본 로그인 셸로 활용됨
  • 셸 스크립트를 작성하는 데도 적합함

4. tsch

  • csh에 이어 개발된 C셸 계열의 셸
  • 대화형 조작에 편리한 기능을 갖추고 있지만, 셸 스크립트에는 적합X
  • C셸 계열에서는 일반 사용자 프롬프트 : %

5. zsh

  • 비교적 최근에 개발된 셸
  • bash와 tcsh의 기능에 독자적인 기능이 추가됨

4. 어떤 셸을 선택해야 할까

Bash 셸

  • 리눅스의 기본 로그인 셸로 사용되고 있어 활용도가 높음
  • 대화형 셸과 셸 스크립트 양쪽 모두에 적합함
  • sh와 호환성이 있어 기존 sh 셸 스크립트를 그대로 사용할 수 있음
  • 리눅스 외에도 다양한 OS 환경에서 사용할 수 있음
  • 사용자가 많아 관려 정보를 얻기 쉬움

sh 셸

  • 많은 시스템 스크립트가 POSIX 호환을 위해 sh 문법을 기반으로 작성되어 있음

셸 바꿔보기

기본 zshsh 로 변경 → 다시 기본 zsh 로 변경(다시 돌아간 것이 아니라 중첩된 상태)

  • 기존 셸 위에서 실행한 셸은 로그인 셸이 아닌 비로그인 셸(non-login shell) 이 된다.→ logout 불가

  • exit 명령어로 비로그인 셸애서 벗어나기


5. 터미널

터미널

: 컴퓨터의 입출력만을 담당하는 전용 하드웨어

  • 입력 장치 : 키보드
  • 출력 장치 : 모니터

→ 현재는 소프트웨어로 구현한 터미널 에뮬레이터(리눅스, 윈도, 맥 등에서 애플리케이션으로 동작) 사용됨

터미널 에뮬레이터

: 사용자 입력을 셸에 전달하고 셸의 출력 결과를 화면에 표시하는 역할

운영 체제터미널 에뮬레이터
WindowsPuTTY, Tera Term
macOS Xterminal, iTerm2
LinuxGNOME, Terminal, Konsole

터미널과 셸

터미널 에뮬레이터와 셸은 완전히 다른 소프트웨어

ex) 윈도에서 리눅스로 원격 로그인하면 터미널 에뮬레이터는 윈도 머신에서 돌아가며, 셸은 리눅스 머신에서 돌아감

profile
감사합니다! 복 받으세요!

0개의 댓글