1. 쉘 소개
1) 쉘(Shell)이란?
- 쉘의 역할
- 쉘은 사용자와 운영체제 사이에 창구 역할을 하는 소프트웨어.
- 명령어 처리기(command processor)
- 사용자로부터 명령어를 입력받아 이를 처리한다.
2) 쉘의 종류
유닉스/리눅스에서 사용 가능한 쉘의 종류
쉘의 종류 | 쉘 실행 파일 |
본 쉘 | /bin/sh |
콘 쉘 | /bin/ksh |
C 쉘 | /bin/bash |
tcsh | /bin/tcsh |

- 본 쉘(Bourne shell)
: 벨 연구소의 스티븐 본에 의해 개발됨. 유닉스에서 기본 쉘로 사용됨. - 콘 쉘(Korn shell)
: 벨 연구소에서 본 쉘을 확장해서 만듦. - Bash(Bourne again shell)
: GNU에서 본 쉘을 확장하여 개발한 쉘. 리눅스 및 맥 OS X에서 기본 쉘로 사용되면서 널리 보급됨. Bash 명령어의 구문은 본 쉘 명령어 구문을 확장함. - C 쉘(C shell)
: 쉘 핵심 기능 위에 C언어의 특징을 많이 포함함. BSD 계열의 유닉스에서 많이 사용됨. 최근에 이를 개선한 tch이 개발되어 사용됨
3) 로그인 쉘(login shell): 로그인하면 자동으로 실행되는 쉘. 보통 시스템관리자가 계정을 만들 때 로그인 쉘 지정.
- 쉘 변경
$ csh
- 로그인 쉘 변경
$ chch
2. 쉘의 기능
1) 쉘의 주요 기능
- 명령어 처리
: 사용자가 입력한 명령을 해석하고 적절한 프로그램을 실행 - 시작 파일
: 로그인할 때 실행되어 사용자별로 맞춤형 사용 환경 설정 - 스크립트
: 쉘 자체 내의 프로그래밍 가능

2) 쉘의 실행 절차

3) 쉘의 환경 변수
- 환경 변수 설정법
$ 환경변수명=문자열
# 환경변수의 값을 문자열로 설정함
# 예시
$ TERM=xterm
$ scho $TERM
xterm
- 환경변수 보기
$ env
TERM=xterm
SHELL=/bin/bash
USER=chang
HOME=/home/chang
PATH=/usr/local/bin:/usr/bin: ...
...
- 사용자 정의 환경 변수
$ MESSAGE=hello
$ export MESSAGE
3. 전면 처리와 후면 처리
1) 전면 처리 vs 후면 처리
전면처리?
: 입력된 명령어를 전면에서 실행하고 쉘은 명령어 실행이 끝낼때까지 기다림.
후면처리?
: 명령어를 후면에서 실행하고 전면에서는 다른 작업을 실행해 동시 여러 작업 수행 가능
# 후면 처리 예시
$ (sleep 100; echo done) &
[1] 8320
$ find . -name test.c -print &
[2] 8325
4. 입출력 재지정
1) 출력 재지정(output redirection)
$ 명령어 > 파일
명령어의 표준출력을 모니터 대신에 파일에 저장함.

>
기호로 인해 화면에 출력되지 않고 ls.txt 파일에 저장됨. cat
명령을 통해 파일 내용 출력.

/
는 루트 디렉터리. 루트에 있는 파일/디렉터리를 출력해, 출력 결과는 list.txt 파일에 저장.
2) 출력 재지정 : 파일 만들기
$ cat > 파일
표준입력 내용을 모두 파일에 저장함. 파일이 없으면 새로 만듦.
$ cat 파일1 파일2 > 파일3
파일1과 파일2의 내용을 붙여서 새로운 파일3을 만듦.


3) 출력 추가
$ 명령어 >> 파일
명령어의 표준출력을 모니터 대신에 파일에 추가함.

4) 입력 재지정(input redirection)
$ 명령어 < 파일
명령어의 표준입력을 키보드 대신에 파일에서 받음.
wc는 단어 개수를 세는 명령어

5) 문서 내 입력(here document)
$ 명령어 << 단어
명령어의 표준입력을 키보드 대신에 단어와 단어 사이의 입력 내용으로 받는다.

6) 오류 재지정
$ 명령어 2> 파일
명령어의 표준오류를 모니터 대신에 파일에 저장함.
명령어의 실행결과
- 표준출력(standard output) : 정상적인 실행의 출력
- 표준오류(standard error) : 오류 메세지 출력

2>는 표준오류 스트림을 지정한 파일로 보낸다는 의미. 즉 오류 메세지를 모니터에 출력하지 않고 err.txt 파일에 저장하고 있음.
7) 파이프
파일 목록 내림차순 정렬해서 보여주기
방법1 - 중간 파일 사용
ls 결과를 ls.txt에 저장하고 그걸 sort -r로 읽어서 정렬함.

방법2 - 파이프 사용.
더 효율적이고 간단함.

파이프 사용 예시)
로그인된 사용자 수 출력

특정 디렉터리 내의 파일의 개수 출력

8) 입출력 재지정 관련 명령어 요약
명령어 사용법 | 의미 |
명령어 > 파일 | 명령어의 표준출력을 모니터 대신에 파일에 추가함. |
명령어 >> 파일 | 명령어의 표준출력을 모니터 대신에 파일에 추가함. |
명렁어 < 파일 | 명령어의 표준입력을 키보드 대신에 파일에서 받음. |
명령어 << 단어 ... 단어 |
표준입력을 키보드 대신에 단어와 단어 사이의 입력 내용으로 받음. |
명령어 2> 파일 | 명령어의 표준오류를 모니터 대신에 파일에 저장함. |
명렁어1 | 명령어2 | 명령어1의 표준출력이 파이프를 통해 명령어2의 표준입력이 됨. |
cat 파일1 파일2 > 파일3 | 파일1과 파일2의 내용을 붙여서 새로운 파일3을 만들어줌. |
5. 여러개 명령어 실행
1) 명령어 열(command sequence)
나열된 명령어들을 순차적으로 실행함.

2) 명령어 그룹(command group)
나열된 명령어들을 하나의 그룹으로 묶어 순차적으로 실행함.
