
결론부터 말하면, 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=value와NAME = value는 다릅니다. 후자는 대입이 아니라 명령 실행으로 해석될 수 있습니다.- 셸 변수는
export하기 전까지 자식 프로세스의 환경변수가 아닙니다. $SHELL은 현재 실행 프로세스 이름과 항상 같지 않습니다.- 큰따옴표는 모든 확장을 막지 않습니다. 변수와 명령 치환은 여전히 수행됩니다.
.bash_profile과.bashrc는 적용 상황이 다르며, 서로 불러오는지는 파일 내용에 달려 있습니다.
직접 만든 셀프체크 5문항
- 현재 셸에만 있는 변수를 자식 프로세스에도 전달하려면 어떤 내장 명령을 사용하는가?
'$HOME'과"$HOME"의 출력 차이는 무엇인가?- 대화형 비로그인 Bash가 기본적으로 읽는 사용자 파일은 무엇인가?
PATH의 각 디렉터리는 어떤 문자로 구분하는가?>와>>의 차이는 무엇인가?
정답 확인
export를 사용합니다.- 작은따옴표는
$HOME을 문자 그대로 출력하고, 큰따옴표는 HOME 변수 값을 확장합니다. ~/.bashrc입니다.- 콜론(
:)입니다. >는 새로 쓰거나 덮어쓰고,>>는 기존 내용 뒤에 추가합니다.
공식 자료
이 글은 2026년 7월 11일 갱신했습니다. GNU Bash 공식 온라인 매뉴얼은 5.3판이지만 KAIT 시험 환경의 배포판에는 더 이전 Bash가 포함될 수 있습니다. 출제기준이나 시험 대상 배포판이 변경되면 공통 기본 동작을 기준으로 다시 대조하겠습니다.
'학위공부 > IT 자격증' 카테고리의 다른 글
| 2026 리눅스마스터 2급 ⑦ 에디터|vi·Vim 모드와 검색·치환·저장 명령 (0) | 2026.07.11 |
|---|---|
| 2026 리눅스마스터 2급 ⑥ 프로세스 관리|ps·top·kill·jobs·nice 핵심정리 (0) | 2026.07.11 |
| 2026 리눅스마스터 2급 ④ 파일시스템 명령어|권한·링크·마운트 정리 (0) | 2026.07.11 |
| 2026 리눅스마스터 2급 ③ 기본 명령어|사용자·경로·파일 조작 실습 (0) | 2026.07.11 |
| 2026 리눅스마스터 2급 ② 리눅스 설치|파티션·파일시스템·GRUB 정리 (0) | 2026.07.11 |