1. Shell이란?
- UNIX 시스템 명령 프로세서. 쉘은 사용자로부터 명령을 받아들이고, 번역하고, 처리를 위해 운영체제에 보낸다. 즉, 시스템 kernel을 사용자가 사용할 수 있게 해주는 일종의 interface.
- 대부분의 shell은 user가 완전한 언어 컴파일러를 이용하지 않고도 작은 program을 작성할 수 있게 programming language interface를 포함.
4개의 shell이 있다.
- Bourne shell (/usr/old/bin/sh)
- C shell (/usr/bin/csh)
- Korn shell (/usr/bin/ksh) : C shell의 대화식 특징을 가진 향상된 Bourne shell로 보다 진보된 상태
- POSIX shell (/usr/bin/sh) : Korn shell과 유사.
2. The Command Line
- Shell에서 어떤 명령어를 입력할 수 있는 line.
- 형식
$ command [arg1] [arg2] [arg3] ……[argn] arg에는 명령의 대상 또는 관련 옵션이 온다.
3. Standard Input and Output
3-1. Standard input
프로그램 입력을 받을 수 있는 파일. 표준 입력은 file descriptor 0와 관련되어 있다. Redirection을 사용하지 않을 때, 표준입력은 키보드가 됨.
3-2. standard output
프로그램 풀력을 보낼 수 있는 파일. 표준 풀력은 file descriptor 1과 관련됨. Redirection 비 사용 시, 표준출력은 터미널이 된다.
3-3. file descriptor
프로그램이 파일을 참조할 수 있도록 커널에 의해 제공되는 정보. 각 file descriptor번호를 가지고 있다.
- file descriptor 0: 표준 입력.
- file descriptor 1: 표준 출력.
- file descriptor 2: 표준 에러.
- 즉, 키보드, 터미널도 file로 취급한다.
4. Redirection
- 개념: 파일을 standard output이 아닌 다른 file로 출력을 전환.
- 형식
$ command [arguments] > filename
- 예제
$ cat a > b (file a를 file b로 출력) $ cat a c > b
or
$ cat a > b $ cat c >> b ('>>'는 추가기능)
5. Pipes
- 개념: 어떤 명령어의 출력을 다른 명령어의 입력으로 바로 연결시킬 때 사용.
- 형식
$ command_a [arguments] | command_b [arguments]
- 위 command는 다음의 두 line commands와 똑같이 수행.
$ Command_a [arguments] > temp $ Command_b [arguments] temp $ rm temp
- 예제
$ cat file1 file2 | sort $ cat file1 file2 > file3 $ sort file3 $rm file3
- Pipe는 중간 File을 만들지 않고, 연결하여, 앞 출력을 다음 입력으로 값을 넘김.
$ cat file1 file2 | sort | tail | grep | ... (각각의 파이프로 둘러싸인 process들을 fileter라 한다)
6. Running a Program in the Background.
6-1. 개요
- 모든 작업은 default로 foreground(즉, 터미널 화면상)에서 작업을 하므로, 작업 수행 시 그 작업이 끝나고 나서야(다음 작업을 받을 준비가 된 상태), prompt를 보여준다.
- background작업은 화면이 아닌 시스템 내부에서 실행시킨다. 물론 이 경우 foreground 작업은 따로 실행시킬 수 있다.
6-2. 예제1
ftp 수행 중, 다른 사용자가 talk를 걸어오면, ftp를 종료해야만 talk 사용이 가능하다. 이 경우,
-
ftp 수행 중에 ‘ctrl-z’키를 입력
-> Holding 상태(suspend: running이 안되고 잠시 멈춤)
-> shell prompt가 뜬다. -
$bg
-> ftp 작업이 background로 수행 -
여기서 foreground로 talk사용 가능
-> ftp는 계속 수행됨
6-3. 예제2
Shell prompt 상태에서
$ ls –l | sort &
이 명령어를 입력하면, 이 작업이 바로 background에서 수행 됨.
Background에서는 multiple로 동시 수행이 가능하다. 즉, background작업으로 여러 개를 돌릴 수 있다.
-
$ jobs
-> 수행중인 background 작업들을 번호로 listing. -
$ %2
-> listing된 background 작업 중 2번 작업을 다시 foreground로 전환. -
$ kill %1 %2 %3
-> 1, 2, 3번 작업을 종료. -
$ ps
-> 현재 수행중인 작업들을 해당 process 번호로 나열. -
$kill 1466
-> PID(Process Identifier)가 1466인 작업을 종료.
7. Filename Generation
7-1. ‘?’ special character: 특정 한 개의 문자를 대치.
$ ls memo?
memo1 memo2 등의 파일 출력.
7-2. ‘*’ special character: 모든 문자 대치.
$ ls memo*
memo1, memo2, memories등의 memo다음에 어떤 문자가 몇 개가 붙더라도 출력.
7-3. ‘[ ]’ special character
- [ ]속에 나열한 문자 중 하나와 대치.
- [ ]속에는 regular expression 사용 가능.