Chapter 5 The Shell 이번 장에서는 shell에 대하여 기본적인 내용을 알아보자… 표준입력, 출력, 리다이렉션, PIPE,TEE, 백그라운드 작업...등을 배워보자… 내용이 아주 간단하고 금방 끝나니… 지난 시험 풀이도 해주고….
The Command Line Command line syntax command [arg1] [arg2] … [argn] argument : 인수 (화일이름, 숫자, 텍스트 등) option : 선택사항(명령어의 효과를 변경하는 인수 example : [comp76]:/home/hotbody/ftp 136 >ls main.cpp test.txt [comp76]:/home/hotbody/ftp 137 >ls -l total 2 -rw-rw-rw- 1 hotbody 94 0 Apr 3 1997 main.cpp -rw-r--r-- 1 hotbody 94 36 Aug 19 20:18 test.txt [comp76]:/home/hotbody/ftp 138 >ls -l main.cpp command line이란 명령을 가진 행을 의미한다. shell에 어떠한 명령을 주기 위해서는 command를 사용해야 하고 형식은 위와 같다… 명령행 문법은 위와 같고… 옵션이란 명령의 효과를 변경하는 인수(argument)를 의미한다…. 예..-c, -l,….
Entering a command line 다음 문자 가져옴 yes 버퍼에서 이전 문자 지움 ctrl-H no yes 전체 버퍼 내용을 지움 ctrl-U no 버퍼에 문자를 저장 no return yes 지금 부터는 shell이 명령행(command line)을 입력받는 방법을 보자.. 결국 한줄을 입력받아 shell의 명령행 처리기에 보내는 과정이다. 버퍼 내용의 처리를 위해 쉘에 버퍼 전달
Processing the command line 첫번째 단어를 가져와 명령어 이름으로 저장 no 다음단어를 인수로 저장 newline yes 명령어이름에 해당하는 프로그램이 존재? ‘Command not found’ 출력 프로그램 수행 yes no 한줄을 해석해서 프로그램을 실행하거나 없을경우 command not found를 내는 과정이다. 프롬프트를 화면에 출력
Executing the command line 쉘 : 명령실행 sleep 쉘 : 명령대기 인수전달 종료 프로세스 쉘은 명령을 실행시키고 나서, 그 명령이 종료 뙐때까지 기다립니다. 명령이 종료되고 나서는 다시 사용자로부터 명령을 입력받습니다.
표준입력, 표준 출력 Unix에서는 터미널, 프린터, 디스크 등의 디바이스를 각각 하나의 화일로 취급 디바이스 파일 예: /dev/tty06 기본적으로 표준 입출력 장치는 터미널 프로세스 4장에서 설명했듯이 unix에는 다양한 파일과 디렉토리가 있다. 유닉스는 여기에 부가적으로 device file이라 하여 각종 디바이스를 하나의 파일처럼 취급한다. 예를들어 tty06같은 것은 터미널을 가르키는 파일이다. /dev 디렉토리아래에 이러한 디바이스 파일이 많이 있음을 보여준다…. 기본적으로 unix는 표준 입출력 장치로 터미널을 가정한다. 아무 언급이 없다면 입력과 출력은 터미널로 한다는 의미이다… 예를 들자면 c 프로그램을 짜보면 입력 출력 함수 scanf, printf등은 사실 stdin, stdout이라는 파일로 부터 읽고 쓰는 것이다…. 그러므로 모두 파일로 처리한다는 의미…. 따라서, 파일로 가는 통로를 바꿔 주면 다른 파일이나, 장치(부터/에서) 입출력을 할 수 있습니다. -> redirection 화일 프린터
Redirection 표준 출력 redirection : 쉘에게 명령어 실행 결과를 지정한 파일에 출력하도록 지시 redirection output symbol : > example : cat a b c > d 표준 입력 redirection : 쉘에게 명령어의 입력을 지정한 파일로부터 하도록 지시 redirection input symbol : < example : mail subby < homework2 파일에 표준출력 내용 추가(append) : 쉘에게 명령어 실행 결과를 기존 파일의 뒤에 추가하도록 지시 appending output symbol : >> example : cat b >> a redirection이란 shell이 표준 입력이나 출력을 어디로 부터 받을지 변경하는 방법을 의미한다…. 표준 출력을 리다이렉션하는 법은 >를 이용한다. 몇가지 간단한 예를 수행해보게 하여 >를 쓰는 것과 안 쓰는 것의 차이를 보게 하자… 마찬가지로 표준 입력을 redirection하는 것은 지정한 파일로 부터 입력을 받도록 하는 것이다….. >>는 파일의 표준 출력을 파일에 append하는 것을 의미한다.
Pipe Pipe(‘|’) : 한 명령어의 표준 출력을 후속 명령어의 표준입력으로 직접 연결 이점 example 중간결과를 저장하는 파일이 불필요 디스크 공간과 수행 시간의 절약 명령어 입력의 간소화 example [comp76]:/home/hotbody/ftp 139 >who jorc7911 pts/11 Aug 19 20:44 (comp38.snu.ac.kr) limcom pts/5 Aug 12 16:12 (beast) panpilin pts/6 Aug 19 20:39 (comp4) hotbody pts/25 Aug 19 15:03 (horn.snu.ac.kr) [comp76]:/home/hotbody/ftp 140 >who | sort 파이프란 위의 설명과 같고… 즉 command_a > temporary_file, command_b<temporary_file 을 간단히 command_a | command_b와 같이 할 수 있는것이다. redirection과의 차이점을 이해하게 하고, 이점을 알게하자… 예를 들면 위와 같이 편리하게 할 수 있다… sort말고도 grep으로 하는 것도 보여주고… 해보게 하자… 1차 시험 문제 ls -al | grep Mar 같은 걸 해보게 하자… 맞춰보라 하든지...
Filters Filter : 입력 데이터스트림을 처리하여 출력 데이터스트림을 만드는 명령어 example : sort [comp76]:/home/hotbody 149 >ls | sort | tail temp test.ps test.txt tmp trace txttar.gz typescript util util.c zmodem 필터라는 것은 위와 같은 프로그램들을 말하는 것이다… 예를 들면 sort, grep같은 프로그램을 지칭한다. 표준 입력, 출력을 하지 않거나 유저의 입력이 필요한 프로그램은 당연히 필터로 사용하지 못한다… ls는 표준 입력이 없으니 안되고, vi같은것은 사용자의 입력이 필요해서 안된다….
tee tee 유틸리티 : 하나의 입력으로 두가지의 출력을 동시에 생성 example: [comp76]:/home/hotbody 150 >who | tee who.out | grep hotbody hotbody pts/25 Aug 19 15:03 (horn.snu.ac.kr) [comp76]:/home/hotbody 151 >cat who.out jorc7911 pts/11 Aug 19 20:44 (comp38.snu.ac.kr) limcom pts/5 Aug 12 16:12 (beast) tee라는 유틸리티는 T자를 의미한다… 즉 하나의 입력을 가지고 두가지 출력을 만드는 것 예와 같이 다음 프로그램의 표준 입력을 위해 표준 출력을 하면서 파일에 저장할 수 있게 한다….. 예를 잘 설명하고…. 한번 수행해보게 하자...
백그라운드 작업 수행(1) foreground 수행 : 명령어의 실행이 끝날 때까지 shell이 프롬프트를 출력하지 않고 기다림 background 수행 : 명령어가 끝나기를 기다릴 필요가 없이 다음 작업을 수행 background 작업 지시 : 명령어 끝에 ‘&’ example : [comp76]:/home/hotbody 195 >tail -f test.txt & [comp76]:/home/hotbody 192 >ps PID TTY TIME CMD 7949 pts/25 0:01 csh 12481 pts/25 0:00 tail [comp76]:/home/hotbody 193 >kill 12481 [comp76]:/home/hotbody 194 >kill -9 12481 unix는 background수행을 할 수 있게 한다…. 아주 복잡한 프로그램이나 시간이 오래 걸리는 작업의 경우 &를 붙이면 background로 수행할 수 있다… 예의 프로그램은 사실 약간 부적절한 프로그램이지만…. background로 수행하면 ps해보면 나오고 이걸 죽일려면 kill하면 된다. 그래도 안죽이면 kill -9 …
백그라운드 작업 수행(2) ps : 현재 수행중인 프로세스의 목록을 보여준다. jobs : 현재의 jobs들을 보여준다. job : background로 수행 중이거나 stop된 프로세스 bg, fg : 특정 프로세스를 background 나 foreground로 실행 상태를 변경한다. kill : 특정 프로세스를 중지한다. kill 11409 : process ID kill %1 : job 번호 nohup : logout후에도 명령을 계속 수행한다. 이러한 background작업을 위한 여러 유틸이다…. 한번씩 수행해보게 하자…. jobs로 나오는 job번호를 이용해서 프로그램을 중지시킬 때는 kill %job번호로 하면 된다고 알려주자…
Filename Generation 특수 문자 example: ? : 한 개의 임의의 문자에 대응 * : 여러 개의 임의의 문자에 대응 [ ] : 괄호내의 문자열 list중 임의의 문자에 대응 example: a?? : a11, a12, abc, … a* : a, ab, abcd, … a[123] : a1, a2, a3 a[0-2] : a0, a1, a2 [a-b]*[012]: afd0, b13142, … 마지막으로 shell에서 파일 이름을 generation하는 몇가지 방법을 보자.. *랑 ?는 대부분 알테고… 예를 보며 설명을 해주고… ls등으로 해보게 하자…