1 / 50

3. 유닉스 셀 ( Unix Shell)

3. 유닉스 셀 ( Unix Shell). 셀이란 ? 기본지식 습득 쉘의 기능 유틸리티 chsh kill ps echo nohup sleep 셀 명령어 echo kill umask eval login wait exec shift exit tee. 3.1 소개. 유닉스 셀 (Unix Shell ) 사용자와 순수 Unix 운영체제 사이를 연결하는 프로그램 Unix Shell 의 종류 : 대표적인 3 종류의 Shell

Télécharger la présentation

3. 유닉스 셀 ( Unix Shell)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3.유닉스 셀(Unix Shell)

  2. 셀이란? • 기본지식 습득 • 쉘의 기능 • 유틸리티 chsh kill ps echo nohup sleep • 셀 명령어 echo kill umask eval login wait exec shift exit tee 3. 유닉스 셀(UNIX Shell)

  3. 3.1 소개 • 유닉스 셀(Unix Shell) 사용자와 순수 Unix 운영체제 사이를 연결하는 프로그램 • Unix Shell의 종류 :대표적인 3종류의 Shell • Bourne Shell • Korn Shell • C Shell 3. 유닉스 셀(UNIX Shell)

  4. 3.1 소개 • Korn Shell David Korn이 제작, Bourne Shell 보다 포괄적, 산업체에서 선호, 유망 • Bourne Shell Stephen Bourne이 제작, 최초의 대중화된 Unix Shell • C Shell Bourne Shell 후에 작성됨, C 언어와 밀접한 구조와 관계 3. 유닉스 셀(UNIX Shell)

  5. 3.2 셀의 기능 셀 기능 내장 스크 변수 리다이 대표 파이프 명령열 서브 후면 명령어 명령어 립트 렉션 문자 셀 처리 치환 지역 환경 조건부 무조건부 3. 유닉스 셀(UNIX Shell)

  6. 3.3 셀 선택 • 계좌 계설시 선택 명시 /etc/passwd 화일 안에 login shell 정보 저장 • chsh(change shell) 명령어를 이용하여 login shell을 변경 ☞자신의 login shell이 무엇인지를 확인하는 법 $ echo $SHELL 3. 유닉스 셀(UNIX Shell)

  7. 3.3 셀 선택 • Shell 호출 ① 자동 호출 login시에 특정 시작화일을 읽어서 shell을 시작 ② 수동 호출 3. 유닉스 셀(UNIX Shell)

  8. Continue... 3.4 셀 운영 • 기본적인(공통적인) shell 기능 • 다수의 내장 명령어 제공 • 메타문자 제공 • 입력/출력/오류의 redirection 기능 제공 • 대표문자들(wildcards)를 이용하여 화일이름 대치 • 파이프라인 기능 • 명령어 대치 3. 유닉스 셀(UNIX Shell)

  9. 3.4 셀 운영 • 조건부/무조건부 명령열(sequences) 작성 • subshell 생성 • 후면처리(background processing) • Shell Script(프로그램)를 작성할 수 있도록 해줌 • 환경변수와 지역변수를 가짐 • 인용(quoting) • 작업 제어 3. 유닉스 셀(UNIX Shell)

  10. 3.5 실행가능한 파일과 내장 명령어 • 다수의 내장 명령어 제공 cf. utility program과의 차이점 3.5.1 정보를 표시 : echo • $ echo -n {arg]*  모든 명령어 인자(arg)들을 표준 출력(화면)에 표시해줌 -n 출력에 newline을 생성(default)하지 않도록 해줌 3.5.2 디렉토리 변경 : cd • $ cd  작업 디렉토리를 새로운 위치로 바꾸어줌 3. 유닉스 셀(UNIX Shell)

  11. 3.5 실행가능한 파일과 내장 명령어 • 다른 예제 • $ eval ‘command’  backquote(‘)안의 command 수행 결과를 정규 셀 명령으로 간주하여 실행 (예)eval `tset -s -m 'network:?vt100'` /etc/ttytab에서 기본 terminal type을 찾아서 실제의 terminal type이 vt100인지를 묻고 해당 환경변수들을 /etc/termcap을 참조하여 설정 (예) $ echo set x=5와 echo `set x=5`의 차이점 Continue... 3. 유닉스 셀(UNIX Shell)

  12. 3.5 실행가능한 파일과 내장 명령어 • $ exec command 현재의 shell process가 command를 수행하는 shell process대치됨 따라서 command가 성공적으로 수행 되면, exec process는 사라짐 특히, exec의 process가 login shell이면, logout 되어버림 (예)$ exec date Continue... 3. 유닉스 셀(UNIX Shell)

  13. 3.5 실행가능한 파일과 내장 명령어 • $ shift 명령어 인자들의 위치를 왼쪽으로 하나씩 옮김, 첫 번째 인자 ($1)은 없어지므로 이동할 명령어 인자가 없으면 에러 메시지가 나옴 (예)$ cat shift.csh [1-c3p155] #! /bin/csh echo first argment is $1, all args are $* shift echo first argment is $1, all args are $* $ shift.csh a b c d echo first argment is a, all args are a b c d echo first argment is b, all args are b c d Continue... 3. 유닉스 셀(UNIX Shell)

  14. 3.5 실행가능한 파일과 내장 명령어 • $ umask [8진수] 화일 생성시, 이에 대한 접근에 관한 허가권에 대하여 masking을 수행 default 값: 0022 (그룹과 다른 사람들에 대하여 쓰기 금지) masking(가림)의 원칙 (예)fd = open("myFile", O_CREAT | O_RDWR, 0666) -rw-r--r-- (0644) • $ umask 현재의 마스크 값을 인쇄해줌 • $ umask 0  no masking  -rw-rw-rw-(0666) 3. 유닉스 셀(UNIX Shell)

  15. 기호 의 미 기호 의 미 Shell 명령어를 순서대로 구분 하여 나열할 때 사용하는 분리자 표준출력을 파일에 저장하는 출력 redirection > ; 표준출력을 파일에 추가 저장하는 출력 redirection 이전의 명령이 실패하면 실행 하도록 하는 조건부 명시 >> || 표준입력을 파일에서 읽어 들이는 입력 redirection 이전의 명령이 성공하면 실행하도록 하는 조건부 명시 < && word 바로 전줄까지를 임시 화일에 저장한 후 이 화일을 표준입력으로 읽어들이는 입력 redirection  here document <<을 사용하는 script를 말합 Shell의 메타문자 앞에 붙어서 메타문자의 특수 의미를 제거함 $ echo hi > file $ echo hi \> file \ <<word Continue... 3.6 메타 문자 3. 유닉스 셀(UNIX Shell)

  16. 3.6 메타 문자 의 미 기호 의 미 기호 0개 이상의 문자와 일치 하는 화일 치환 대표 문자 후면 실행 (background processing) * (...) 단일 문자와 일치하는 화일 치환 대표 문자 그룹 명령어로서 다수의 shell명 령어들이 하나의 그룹으로 묶임 & ? [ 와 ] 사이의 어떤 문자 와도 일치하는 화일 치환 대표 문자. 문자의 범위는 대쉬(-)로 표현 Newline까지를 설명문으로 간주하여 처리함 [...] # 명령어 command의 출력 에 의해서 대치 되는 명령 어 치환 Shell 변수의 값을 접근함 $ `command` 어떤 프로세스의 출력을 다른 프로세스의 입력으로 보내 주는 pipe | 3. 유닉스 셀(UNIX Shell)

  17. 3.7 리다이렉션 • Redirection • 출력/입력/에러 Redirection : 메타문자표 참조 • $ cat > test.txt ......... ^D #출력 redirection(생성) • $ cat >> test.txt ......... ^D #출력 redirection(추가) • $ mail mjkim@cs.swu.ac.kr < letter #입력 redirection 3. 유닉스 셀(UNIX Shell)

  18. 3.7 리다이렉션 • $ cat here.sh #here document mail $1 << EndOfMail #EndOfMail의 직전 줄까지 읽어서 메일 내용으로 보냄 Dear $1, Good Morning! -from $USER EndOfMail echo mail sent to $1 $ here.sh mjkim mail sent to mjkim $ mail ....... &1 ......... &q 3. 유닉스 셀(UNIX Shell)

  19. 3.7 리다이렉션 • $ man ls > ls.txt 2> err.txt #표준에러를 err.txt라는 화일에 redirection $ man ls > ls.txt 2>&1 #표준에러를 표준출력에 연계 시킴 3. 유닉스 셀(UNIX Shell)

  20. 3.8 화일 이름 대치 (wildcards) • Wildcard들을 이용한 화일 이름 대치 • $ ls -FR a.c b.c cc.c dir1/ dir2/ dir1: d.c e.e dir2: f.d g.c Continue... 3. 유닉스 셀(UNIX Shell)

  21. 3.8 화일 이름 대치 (whildcards) • $ ls *c  a.c b.c cc.c • $ ls ?.c  a.c b.c • $ ls [ac]*  a.c cc.c • $ ls [A-Za-z]*  a.c b.c cc.c • $ ls dir*/*.c  dir1/d.c dir2/g.c • $ ls *2/?.?  a.c b.c dir2/f.d dir2/g.c 3. 유닉스 셀(UNIX Shell)

  22. Continue... 3.9 파이프(pipes) • 파이프라인 기능 $ command1 | command2 | command3 $ ls | wc -w $ ls -l | wc -l $ who | tee who.capture | sort #who의 출력을 화일에 복사 저장한 후 이를 정렬함 • tee -ia {fileName}+ 표준 입력을 명시된 화일과 표준 출력에 동시 복사 -a (화일에 추가 저장) -i (인터럽트 무시) 3. 유닉스 셀(UNIX Shell)

  23. Continue... 3.9 파이프(pipes) $ cat /etc/passwd | awk -F: '{ print $1 }' | sort #login name들을 정렬함 • 프로그램 가능한 텍스트 처리용 awk utility • Aho, Weinberger, Kernighan • 입력 줄을 스캔하여 특정 조건을 만족하는 모든 줄에 대하여 작업 수행 awk -Fc [-f fileName] 'program' {variable=value}* {fileName}* -Fc 입력줄의 항목 구분자를 c로 정함 (default:tab이나 공백) -f fileName awk 프로그램을 화일로 만들었을 때 이를 지정함 ‘program' awk 명령어 안에 awk프로그램을 직접 기록한 경우 {variable=value}* 프로그램을 위한 변수 치환 {fileName}* 입력 줄을 표준 입력이 아닌 지정된 파일에서 받아들임 3. 유닉스 셀(UNIX Shell)

  24. Continue... 3.9 파이프(pipes) awk 프로그램: 다음의 형식으로 된 하나 이상의 명령어 [ condition ] [ \{ action \} ] condition: BEGIN(첫번째 줄을 읽기 전), END (모든 줄을 읽고 난 후), 논리 연산자, 관계 연산자, 정규식을 표함 하는 조건식 cf. 만일 condition이 생략되면 모든 줄에 대하여 수행됨 action(C-like): if ( 조건 ) 문장 [else 문장] while ( 조건 ) 문장 for ( 연산; 조건; 연산 ) 문장 break continue print printf "형식" next exit 변수 = 연산식 {문장들의 리스트 } - action들은 C 언어처럼 semicolon(;)으로 구분함 cf. 만일 action이 생략되면 해당 줄은 표준 출력됨 3. 유닉스 셀(UNIX Shell)

  25. Continue... 3.9 파이프(pipes) 입력 줄의 항목 접근 - $1 (첫 번째 항목) $2(두 번째 항목) …… - $0 (줄 전체) - 내장 변수 NF (현재의 입력 줄의 항목 개수) $NF (마지막 항목) - 내장 변수 NR (현재의 입력 줄의 줄 번호) - 내장 변수 FILENAME (입력 화일 이름) • $ awk '{ print NF, $0 }' inputFile 3. 유닉스 셀(UNIX Shell)

  26. Continue... 3.9 파이프(pipes) • $ cat awk2 BEGIN { printf "start of file:", FILENAME } { print $1 $3 $NF } END { printf "End of file" } $ awk -f awk2 inputFile cf. print나 printf에서 컴마(,)가 없으면연속 인쇄, 있으면 공백 인쇄 • $ cat awk3 #2,3번째 줄에 대하여 항목 인쇄 NR > 1 && NR < 4 { printf NR, $1, $3, $NF } $ awk -f awk3 inputFile 3. 유닉스 셀(UNIX Shell)

  27. Continue... 3.9 파이프(pipes) 사용자 정의 변수의 사용 - 초기값: null string 또는 정수 0 • $ cat awk4 #줄을 표준출력에 보내고 줄과 단어수를 셈 BEGIN { print "Scanning file" } { printf "line %d: %s \n", NR, $0; lineCount++; wordCount += NF; } END { printf "line %d, words = %d\n", lineCount, wordCount} $ awk -f awk4 inputFile • $ cat awk3 #2,3번째 줄에 대하여 항목 인쇄 NR > 1 && NR < 4 printf NR, $1, $3, $NF $ awk -f awk3 inputFile 3. 유닉스 셀(UNIX Shell)

  28. Continue... 3.9 파이프(pipes) 제어구조(C-like) • $ cat awk5 [1-c7p317] #각 줄의 항목을 역순으로 출력 { for ( i = NF ; i >= 1; i--) printf "%s", $i; printf "\n"; } $ awk -f awk5 inputFile 줄 일치에 확장된 정규식 사용 [1-p709] • $ cat awk6 #t와 e 사이에 1개 이상의 단일문자가 나오는 줄 /t.*e/ { print $0 } 3. 유닉스 셀(UNIX Shell)

  29. 3.9 파이프(pipes) 조건 범위: 콤마(,)로 분리되는 두 개의 조건 - 처음 조건을 만족하는 줄부터 두 번째 조건을 만족하는 줄까지의 범위 • $ cat awk7 #strong 포함하는 줄부터 clear 포함하는 줄까지 /strong/ , /clear/ { print $0 } 내장함수 이용 가능 - exp(), log(), sqrt(), int(): C-like - substr(str, x, y): x번째 문자부터 y번째 문자까지의 str의 substring 3. 유닉스 셀(UNIX Shell)

  30. Continue... 3.10 명령어 대치 • 악센트 부호(`)로 둘러싸인 명령어는 표준 출력으로 대치 $ echo there are `who | wc -l` users on the system $ vi `grep -l debug *.c` # debug 패턴을 포함하며 .c로 끝나는 모든 화일들을 vi 편집 3. 유닉스 셀(UNIX Shell)

  31. Continue... 3.10 명령어 대치 • 화일 여과 utility [1-c7p287] : egrep, fgrep, grep, uniq ① grep, fgrep, egrep: 명시된 패턴이 있는/없는 줄만을 여과 grep/frep/egrep - hilnvw pattern {fileName}* - 명시된 화일이 없으면 표준 입력을 탐색한다. - 패턴: grep(정규식) fgrep(일정한 문자열만) egrep(확장된 정규식) -n (줄번호 표시) -i(대소문자 무시) -l(화일목록) -v (일치하지않은 줄) -w(단어 단위로 탐색) (예)$ grep the inputfile (예)$ grep -nw the inputfile 정규식의 예 .nd ^.nd sw.*ng [A-D] \. a. a.$ sw.+ng off|will i?ing 3. 유닉스 셀(UNIX Shell)

  32. 3.10 명령어 대치 ② uniq: 동일한 내용이 인접 반복된 줄들을 한 줄만 남기고 여과 uniq -c -number [ inputfile [outputfile] ] -c (해당 줄이 반복된 횟수를 보여줌) -number (number번째 항목을 무시하고 패턴 탐색) (예)$ uniq inputfile [p290 참조] (예)$ uniq -c inputfile (예)$ uniq -1 inputfile 3. 유닉스 셀(UNIX Shell)

  33. Continue... 3.11 명령열(sequences) • 조건부/무조건부 실행 순서 • (무조건부) 명령열(sequence) • 세미콜론(;)으로 구성됨, 순차적으로 수행 (예) $ date > date.txt ; ls ; pwd > pwd.txt • 프로세스의 종료값 반환 • 0(성공적 완성), 0 아닌 값(수행 실패) 3. 유닉스 셀(UNIX Shell)

  34. Continue... 3.11 명령열(sequences) • (조건부) 프로세스의 종료값 이용 • && (이전 명령의 종료값이 0이면, 다음 명령 계속 수행) • || (이전 명령의 종료값이 0이 아니면, 다음 명령 계속 수행) • (예)$ cc myprog.c && a.out • (예)$ cc myprog.c || echo compilation failed 3. 유닉스 셀(UNIX Shell)

  35. 3.11 명령열(sequences) • 프로세스의 종료값 표시: $? [p152 참조] (예) $ date $ echo $?  0 (Bourne shell과 Korn shell에서만, C shell에서는 $status에) • 셀을 종료시키고 부모 프로세스에 종료값 전달 • exit number (예) $ exit 3 3. 유닉스 셀(UNIX Shell)

  36. 3.12 명령어 그룹 • Subshell(자식셀) • 명령어 그룹 수행시, 부모셀이 자식셀을 생성 (예) $ (date ; ls ; pwd) > output.txt cf. date ; ls ; pwd > output.txt • 스크립트가 실행될 때, 부모셀이 자식셀을 생성 • 후면 작업이 실행될 때, 부모셀이 자식셀을 생성함 • 부모셀은 자식셀에게 환경공간의 복사본을 상속 받음 3. 유닉스 셀(UNIX Shell)

  37. 3.16 후면 처리(Background Processing) • 자식셀로 생성되어 부모셀과 같이 수행되나 키보드를 제어하지는 않음 (예) $ find . -name b.c -print & [p306 참조] cf. find . -name b.c -print (예) $ date & owd & 3. 유닉스 셀(UNIX Shell)

  38. 3.14 후면 프로세서 리다이렉션 • 후면처리의 출력 리다이렉션 (예) $ find . -name b.c -print > find.ctc & (예) $ find . -name b.c -print > mail mjkim & • 후면처리의 입력 리다이렉션 • 키보드 입력시 에러 시스널을 내고 종료됨 (예) $ mail mjkim & ...... No message?! (종료) 3. 유닉스 셀(UNIX Shell)

  39. 3.15 셀 프로그램 : script • Shell Script(프로그램)를 작성할 수 있도록 해줌 • Script • 셀 명령들을 포함하는 화일로서, chmod +x가 적용되어야 함 • 셀 선택(scipt의 첫 줄에 명시) # (C shell) 또는 #!shell의 path 또는 Bourne Shell(default) 3.16 서브셀(Subshell): 3.11 명령열 참조 3. 유닉스 셀(UNIX Shell)

  40. 이 름 의 미 이 름 의 미 $HOME 홈디렉토리의 절대경로이름 $USER 사용자 id 로그인의 셀의 절대경로이름 $SHELL $PATH 명령어 탐색 디렉토리 목록 $TERM 터미널의 유형 $MAIL mailbox의 절대경로 이름 3.17 변수 • 환경변수와 지역변수 • 공통적인 환경변수 (예)echo USER = $USER, SHELL = $SHELL, TERM = $TERM 3. 유닉스 셀(UNIX Shell)

  41. 이 름 의 미 이 름 의 미 $$ 셀의 프로세스 id $1..$n 명령어 n번째 인수 $0 셀 스크립트 이름 $* 명령어 모든 인수 목록 3.17 변수 • 공통적인 지역변수 (예) $ cat script.sh date > $1.$$ $ script.sh Park Kim Lee 3. 유닉스 셀(UNIX Shell)

  42. 3.18 인용(Quoting) • 셀의 대표문자 대치, 변수 대치, 명령 대치 등을 금지할 때 단일 인용 부호(') 사용 • 셀의 대표문자 대치만을 금지할 때 이중 인용 부호(") 사용 • 인용 부호가 중첩되어 있는 경우, 바깥쪽의 인용 부호만이 효력을 가짐 (예) $ echo 3 * 4 = 12  3 file1 file2 file3 4 = 12 (예) $ echo "3 * 4 = 12"  3 * 4 = 12 (예) $ name=MJKim $ echo "My name is $name"  My name is MJKIM $ echo 'My name is $name'  My name is $name 3.19 HERE DOCUMENTS 3. 유닉스 셀(UNIX Shell)

  43. Continue... 3.20 작업 제어 • 프로세스 상태 : ps ps –[aefglu] -a all(단말기에서 제어하는) -e everything -f full listing -g group -l long -u user 3. 유닉스 셀(UNIX Shell)

  44. Continue... 3.20 작업 제어 (예) $ ps -ef UID PID PPID C STIME TTY TIME CMD root 0 0 0 5월 09 ? 0:01 sched root 1 0 0 5월 09 ? 0:19 /etc/init - root 2 0 0 5월 09 ? 0:00 pageout root 3 0 1 5월 09 ? 6:31 fsflush root 305 1 0 5월 09 console 0:00 /usr/lib/saf/ttymon -g -h -p marvel console login: -T sun -d /dev/console -l c mysung 24058 24056 0 14:01:31 pts/5 0:00 /bin/csh 3. 유닉스 셀(UNIX Shell)

  45. 3.20 작업 제어 • ps 헤더(header) F: flags(현재는 별 의미 없음) S: state(O: running, S: sleeping, R: runnable, Z: zombie, T: stopped) UID: user ID PID: process ID PPID: parent ID C: central processor utilization STIME: starting time(24시간 지나면 월일로) TTY: terminal 번호 TIME: 실행된 분과 초 CMD: command 3. 유닉스 셀(UNIX Shell)

  46. 3.20 작업 제어 • 프로세스 살려두기 nohup command • command 실행, HUP(Hangup)과 TERM(Terminate) 시그널을 무시 • command의 표준 출력과 에러는 nohup.out으로 자동 redirection됨 • 프로세스의 우선 순위를 5 감소 • 로그인 셀을 빠져나올 때 후면 프로세스들이 종료되지 않음 (예) $ nohup sleep 10000 & $ ^D login: $ ps 3. 유닉스 셀(UNIX Shell)

  47. 3.20 작업 제어 • 프로세스 잠재우기 [p145 참조] sleep seconds (예) $ (sleep 10; echo done) & 3. 유닉스 셀(UNIX Shell)

  48. 3.20 작업 제어 • 프로세스에 시스널 보내기 : kill • kill -signalId {pid}+ • signalId : 프로세스에 보내지는 시그널의 번호 또는 이름 (default: 15 = TERM) • kill -l 적법한 시그널 이름의 목록을 보여준다 (signal #1 ∼ #31) [p497 참조] • kill 0 현재의 셀과 관련된 모든 프로세스를 종료시킴 (예) $ kill -KILL 27490 3. 유닉스 셀(UNIX Shell)

  49. 3.20 작업 제어 • 자식 프로세스를 기다림 : wait • wait [pid] 명시된 자식 프로세스가 종료될 때까지 해당 셀이 일시정지 명시된 pid가 없으면 모든 자식 프로세스가 종료되기를 기다림 (예)$ (sleep 30; echo done 1)& 24193 $ (sleep 30; echo done 2)& 24195 $ echo done 3; wait; echo done 4 done 3 ... done 1 ... done 2 ... done 4 3. 유닉스 셀(UNIX Shell)

  50. 3.21 명령어 찾기 : $PATH 3.22 동일한 이름의 표준 유틸리티 무시 3.23 종료와 종료 코드 3.24 공통의 핵심 내장 명령어 [3.5절 참조] • eval • exec • shift • umask 3. 유닉스 셀(UNIX Shell)

More Related