본문 바로가기

학위공부/IT 자격증

2026 리눅스마스터 2급 ⑤ Shell 핵심정리|셸 변수·환경변수·설정 파일·인용부호

리눅스 터미널과 서버, 펭귄 캐릭터, 학습 체크리스트로 구성한 리눅스마스터 2급 전체 학습지도 대표 이미지

결론부터 말하면, Shell 영역은 셸의 이름을 외우는 단원이 아니라 사용자가 입력한 명령을 셸이 어떻게 해석하고 실행 환경을 자식 프로세스에 전달하는지 구별하는 단원입니다. 시험에서는 셸 변수와 환경변수, 작은따옴표와 큰따옴표, 로그인 셸과 비로그인 셸의 시작 파일을 서로 바꿔 놓은 선택지를 특히 주의해야 합니다.

KAIT의 2026 현행 출제기준은 리눅스마스터 2급 ‘리눅스 운영 및 관리’에서 Shell의 개념 및 종류, 환경 설정을 다룹니다. 아래 설명은 GNU Bash 5.3 공식 매뉴얼을 기준으로 하되, 시험 안내 환경인 Rocky Linux 8과 Ubuntu 18.04 이상에서 공통으로 이해해야 할 기본 동작에 집중했습니다. 전체 연재 순서는 2026 리눅스마스터 2급 전체 학습지도에서 확인할 수 있습니다.

Shell 핵심 비교표

구분 핵심 확인
명령을 읽고 해석해 프로그램 실행·파이프·리다이렉션 등을 처리하는 명령 해석 환경 printf '%s\n' "$SHELL"
셸 변수 현재 셸이 보유하지만 기본적으로 자식 프로세스에 전달하지 않는 이름과 값 course=linux
환경변수 내보낸 변수로, 이후 실행되는 자식 프로세스의 환경에 포함됨 export course
PATH 명령 이름에 슬래시가 없을 때 실행 파일을 찾을 디렉터리 목록 command -v bash
별칭 대화형 입력에서 문자열을 다른 문자열로 치환하는 편의 기능 alias, unalias
히스토리 대화형 셸에서 입력한 명령 목록과 이를 저장하는 기능 history 5

셸의 역할과 종류

셸은 커널 자체가 아닙니다. 터미널에서 입력한 문자열을 토큰으로 나누고, 변수·와일드카드·명령 치환을 확장하고, 필요한 프로그램을 실행한 뒤 종료 상태를 돌려주는 사용자 공간 프로그램입니다. Bash는 Bourne Again SHell의 약자로 sh 호환성을 바탕으로 명령 히스토리, 작업 제어, 함수, 별칭, 배열 같은 기능을 제공합니다.

  • Bourne 계열: sh, bash, ksh, zsh처럼 명령 문법의 공통 뿌리를 공유하는 셸
  • C shell 계열: csh와 tcsh처럼 C 언어와 닮은 일부 문법을 사용하는 셸
  • 로그인 셸 확인: /etc/passwd의 사용자 항목에 지정된 셸과 현재 실행 중인 셸은 상황에 따라 다를 수 있습니다.
# 값을 바꾸지 않는 안전한 확인
printf 'login shell: %s\n' "$SHELL"
printf 'current argv0: %s\n' "$0"
printf 'shell flags: %s\n' "$-"
type -a bash
command -v ls

$SHELL은 보통 로그인 셸 정보를 담습니다. 현재 프로세스가 반드시 그 셸이라는 보장은 없으므로 $0, $-, ps 등을 함께 보아야 합니다.

셸 변수와 환경변수

name=value는 현재 셸에 변수를 만듭니다. 변수 이름과 등호 사이에 공백을 넣지 않습니다. export name을 실행하면 이후 시작하는 자식 프로세스가 그 값을 환경에서 받을 수 있습니다. 반대로 자식 프로세스가 자신의 환경을 바꾸어도 부모 셸의 변수가 자동으로 바뀌지는 않습니다.

course='linux-master'
printf '%s\n' "$course"

export course
env | grep '^course='

unset course
printf '<%s>\n' "$course"

PATH는 콜론으로 구분된 디렉터리 목록입니다. 현재 디렉터리를 무심코 앞에 추가하면 같은 이름의 악성 파일을 먼저 실행할 위험이 있으므로, 시험 실습에서도 기존 값을 덮어쓰지 말고 먼저 읽는 연습부터 하세요.

printf '%s\n' "$PATH" | tr ':' '\n'
command -v printf
type -a echo

작은따옴표·큰따옴표·백슬래시

표현 해석 예시 결과
'$name' 모든 문자를 문자 그대로 보존 $name
"$name" 변수·명령 치환은 수행하고 단어 분리는 막는 데 유용 변수의 실제 값
\$name 바로 뒤 문자의 특별한 의미를 제거 $name
name='Linux Master'
printf '%s\n' '$name'
printf '%s\n' "$name"
printf '%s\n' \$name

변수를 사용할 때는 특별한 이유가 없다면 "$name"처럼 큰따옴표로 감싸는 습관이 안전합니다. 작은따옴표 안에서는 백슬래시조차 일반 문자이며, 작은따옴표 자체를 그대로 포함할 수 없습니다.

Bash 시작 파일 적용 순서

실행 상황 Bash가 읽는 대표 파일
대화형 로그인 셸 /etc/profile 뒤에 ~/.bash_profile, ~/.bash_login, ~/.profile 중 처음 존재하는 파일 하나
대화형 비로그인 셸 ~/.bashrc
로그인 셸 종료 ~/.bash_logout
비대화형 Bash 환경변수 BASH_ENV가 가리키는 파일

배포판의 기본 ~/.bash_profile~/.bashrc를 다시 불러오는 경우가 많지만, 이것은 배포판이나 사용자 파일이 만든 연결입니다. “로그인 Bash가 언제나 자동으로 .bashrc를 읽는다”라고 일반화하면 안 됩니다.

별칭·히스토리·파이프와 리다이렉션

# 현재 세션에서만 별칭을 만들고 제거
alias lmll='ls -alF'
type lmll
unalias lmll

# 최근 명령 확인
history 5

# /tmp에 이름이 겹치지 않는 연습 파일을 만들어 출력 흐름 확인
demo_file=$(mktemp /tmp/lm-shell-demo.XXXXXX)
printf '%s\n' beta alpha > "$demo_file"
cat < "$demo_file" | sort
printf 'practice file: %s\n' "$demo_file"

>는 파일을 새로 쓰거나 기존 내용을 덮어쓰고, >>는 뒤에 추가합니다. |는 왼쪽 명령의 표준 출력을 오른쪽 명령의 표준 입력으로 연결합니다. 기존 설정 파일에 연습하지 말고 반드시 /tmp의 새 파일을 사용하세요. 또한 명령행에 입력한 토큰·비밀번호는 히스토리에 남을 수 있으므로 비밀값을 직접 입력하지 않는 편이 안전합니다.

자주 틀리는 지점

  • NAME=valueNAME = value는 다릅니다. 후자는 대입이 아니라 명령 실행으로 해석될 수 있습니다.
  • 셸 변수는 export하기 전까지 자식 프로세스의 환경변수가 아닙니다.
  • $SHELL은 현재 실행 프로세스 이름과 항상 같지 않습니다.
  • 큰따옴표는 모든 확장을 막지 않습니다. 변수와 명령 치환은 여전히 수행됩니다.
  • .bash_profile.bashrc는 적용 상황이 다르며, 서로 불러오는지는 파일 내용에 달려 있습니다.

직접 만든 셀프체크 5문항

  1. 현재 셸에만 있는 변수를 자식 프로세스에도 전달하려면 어떤 내장 명령을 사용하는가?
  2. '$HOME'"$HOME"의 출력 차이는 무엇인가?
  3. 대화형 비로그인 Bash가 기본적으로 읽는 사용자 파일은 무엇인가?
  4. PATH의 각 디렉터리는 어떤 문자로 구분하는가?
  5. >>>의 차이는 무엇인가?
정답 확인
  1. export를 사용합니다.
  2. 작은따옴표는 $HOME을 문자 그대로 출력하고, 큰따옴표는 HOME 변수 값을 확장합니다.
  3. ~/.bashrc입니다.
  4. 콜론(:)입니다.
  5. >는 새로 쓰거나 덮어쓰고, >>는 기존 내용 뒤에 추가합니다.

공식 자료

이 글은 2026년 7월 11일 갱신했습니다. GNU Bash 공식 온라인 매뉴얼은 5.3판이지만 KAIT 시험 환경의 배포판에는 더 이전 Bash가 포함될 수 있습니다. 출제기준이나 시험 대상 배포판이 변경되면 공통 기본 동작을 기준으로 다시 대조하겠습니다.

리눅스마스터 2급 전체 학습지도로 돌아가기