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

리눅스에서 존재하지 않는 명령어를 입력하게 되면 명령어가 없어서 찾을 수 없다는 메시지가 뜬다.
에러를 잘 읽고 그 내용에 잘 대처하는 것이 중요하다.
2. 셸의 역할과 리눅스 커널
명령어 실행 시 리눅스 내부 과정(date 입력 시)
- 키보드로 입력한 date 문자열을 받아들임
- date 명령어를 찾음
- 발견한 명령어를 실행함
- 실행한 결과로 얻은 문자열을 화면에 표시함
→ 이 중에서 3번은 리눅스의 본체인 커널이 수행함
커널 : 운영 체제의 중심에서 CPU나 메모리 같은 하드웨어를 관리하면서 실행하고 프로세스를 관리함

셸(Shell)
: 리눅스에서는 사용자가 직접 커널을 조작할 수 없어 둘 사이에서 명령어를 받아들이고 커널의 실행 결과를 출력하는 소프트웨어
셸은 사용자가 커널 기능을 사용할 수 있도록 해주는 명령어 인터페이스(Command Interpreter) 이다.
명령어 실행 시 리눅스 내부 과정(date 입력 시)
- 사용자가 셸에 date 명령어 입력
- 셸은 date 명령어를 찾아서 리눅스 커널에게 실행을 의뢰
- 리눅스 커널이 명령을 실행
- 셸은 그 결과를 전달받아 사용자의 화면에 출력

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 문법을 기반으로 작성되어 있음
셸 바꿔보기

기본 zsh → sh 로 변경 → 다시 기본 zsh 로 변경(다시 돌아간 것이 아니라 중첩된 상태)
- 기존 셸 위에서 실행한 셸은 로그인 셸이 아닌 비로그인 셸(non-login shell) 이 된다.→
logout 불가


5. 터미널
터미널
: 컴퓨터의 입출력만을 담당하는 전용 하드웨어
→ 현재는 소프트웨어로 구현한 터미널 에뮬레이터(리눅스, 윈도, 맥 등에서 애플리케이션으로 동작) 사용됨
터미널 에뮬레이터
: 사용자 입력을 셸에 전달하고 셸의 출력 결과를 화면에 표시하는 역할
| 운영 체제 | 터미널 에뮬레이터 |
|---|
| Windows | PuTTY, Tera Term |
| macOS X | terminal, iTerm2 |
| Linux | GNOME, Terminal, Konsole |
터미널과 셸
터미널 에뮬레이터와 셸은 완전히 다른 소프트웨어
ex) 윈도에서 리눅스로 원격 로그인하면 터미널 에뮬레이터는 윈도 머신에서 돌아가며, 셸은 리눅스 머신에서 돌아감
