유닉스와 유닉스 계열의 운영체제는 지난 수십 년 동안 컴퓨팅 분야에서 가장 널리 보급돼 사용되는 운영체제군으로 떠올랐다. 수년 동안 유닉스를 사용해온 프로그래머들에게 이는 놀라운 일이 아니었다. 또한 유닉스 시스템은 프로그램 개발을 잘할 수 있도록 우아하고 효율적인 환경을 제공한다. 1960년대 후반, 벨 연구소에서 데니스 리치(Dennis Ritchie)와 켄 톰프슨(Ken Thompson)이 유닉스를 개발했을 때 그들은 바로 이런 것을 만들어내고자 했다.
유닉스 시스템의 가장 강력한 기능 중 하나는 광범위한 프로그램들이다. 200개 이상의 기본 커맨드는 표준 운영체제와 함께 배포되고 리눅스는 종종 700~1,000개의 표준 커맨드가 함께 제공된다! 해당 커맨드(툴이라고도 함)는 파일의 라인 수를 계산하는 것부터 전자 메일 보내기와 원하는 연도의 달력 표시 등 모든 작업을 수행한다.
그러나 유닉스 시스템의 진정한 강점은 큰 커맨드 집합이 아니라 우아하고 쉽게 해당 커맨드들을 결합해 훨씬 더 정교한 작업을 수행할 수 있다는 것이다.
유닉스의 표준 사용자 인터페이스는 커맨드라인이고 실제로 셸(shell)이다. 셸은 사용자와 시스템 자체(커널)의 가장 낮은 레벨 사이에서 버퍼 역할을 하는 프로그램이다. 셸은 사용자가 입력한 커맨드를 읽고 해당 커맨드를 시스템에서 쉽게 이해할 수 있는 형식으로 변환하는 프로그램이다. 또한 뭔가를 결정하고 루프를 돌며 변수에 값을 저장할 수 있는 핵심 프로그래밍 구문을 포함한다.
유닉스 시스템과 함께 배포되는 표준 셸은 AT&T 배포본에서 파생됐는데, 원래 벨 연구소의 스티븐 본(Stephen Bourne)이 작성한 버전에서 시작됐다. 그 이후 IEEE는 Bourne 셸과 다른 최신 셸을 기반으로 표준 셸을 만들었다. 해당 표준의 현재 버전은 POSIX 표준이라고도 알려진 IEEE Std 1003.1-2001의 Shell and Utilities 볼륨이다. 표준 셸은 이 책의 모든 부분을 위한 기초로 사용된다
이 책의 예시는 맥 OS X 10.11 기반의 맥, 우분투 리눅스(Ubuntu Linux) 14.0, Sparcstation Ultra-30에서 실행되는 SunOS 5.7의 이전 버전에서 테스트 됐다. 14장의 Bash 예시를 제외한 모든 예시는 Korn 셸을 사용해 실행됐지만 Bash와도 모두 잘 작동한다.
셸은 해석 프로그래밍 언어며, 프로그램을 쉽고 빠르게 작성하고 수정하고 디버깅할 수 있다. 첫 번째 프로그래밍 언어로 셸을 선택하길 바라며, 셸 프로그래밍에 익숙해진 후에도 계속 사용하길 바란다.