1971년 켄 톰슨(Ken Thompson)이 만든 첫 유닉스 셸(Thompson shell)부터, 1977년 스티븐 본(Stephen Bourne)이 만든 본 셸(Bourne shell, sh), 그리고 1989년 브라이언 폭스(Brian Fox)가 GNU 프로젝트를 위해 만든 Bash(Bourne-Again SHell)까지 — 셸은 유닉스/리눅스를 쓰는 사람이 가장 먼저, 그리고 가장 자주 마주치는 프로그램이다. 우리가 터미널에 ls라고 입력하면 그 글자를 받아 해석하고, /bin/ls라는 실행 파일을 찾아 프로세스로 띄우고, 결과를 화면에 돌려주는 모든 과정을 셸이 책임진다.
리눅스마스터 1급에서 셸은 단순한 "명령 입력기"가 아니라 하나의 인터프리터 언어이자 사용자 환경으로 다뤄진다. 셸의 종류와 특징, 그리고 변수(환경 변수와 셸 변수)의 동작 원리, 셸 초기화 파일의 읽기 순서까지를 정확히 알아야 한다. 오늘은 그 토대를 깊이 있게 다진다.
리눅스 시스템은 크게 **커널(kernel)**과 **셸(shell)**로 나뉜다. 커널은 하드웨어를 직접 제어하는 핵심이고, 셸은 사용자가 입력한 명령을 커널이 이해할 수 있는 형태로 전달하는 **명령어 해석기(command interpreter)**다. 셸이라는 이름 자체가 "껍데기"라는 뜻인데, 커널을 둘러싸 사용자와 맞닿는 가장 바깥층이기 때문이다.
셸이 명령 한 줄을 처리하는 과정은 대략 이렇다.