Download presentation
Presentation is loading. Please wait.
1
3. 유닉스 셸 (Unix Shell) 실습 컴퓨터 : fedora.incheon.ac.kr (117.16.244.59)
multi.incheon.ac.kr ( ) gnu.incheon.ac.kr ( ) PC multibooting 에서 Linux booting 윈도우 ‘시작’ 메뉴‘실행’ 선택해서 telnet telnet login: s passwd: ******
2
유닉스 셸 (Unix Shell) 명령어 및 유틸리티 리스트 echo cd eval exec shift umask tee
find grep ps kill wait
3
소개 유닉스 셀(Unix Shell) Unix Shell의 종류: 대표적인 3종류의 Shell
대표 문자, 입출력 리다이렉션, 다중 작업(multi-tasking), 파이프와 같은 기본 기능들을 쉽게 사용할 수 있음 Unix Shell의 종류: 대표적인 3종류의 Shell Bourne Shell Bash Shell (Bourn-Again Shell)로 진화 Stephen Bourne이 제작, 최초의 대중화된 Unix Shell Korn Shell Z Shell로 진화 David Korn이 제작, Bourne Shell보다 포괄적, 산업체에서 선호, 유망 C Shell TC Shell로 진화 Bourne Shell 후에 작성됨, C 언어와 밀접한 구조와 관계 모든 로그인 사용자 공통 메시지: /etc/motd Unix/Linux
4
소개 Bourne Shell (Steven Bourne, AT&T) Bash Shell (Bourn-Again Shell)
/bin/sh $ .profile (실행은 $ . .profile) 프로그래밍 기능 C Shell (Bill Joy, Berkeley) TC Shell /bin/csh % .login .cshrc (실행은 % source .cshrc) Bourne shell + (대화형 명령입력 + 별명(alias) + history) Korn Shell (Dave Korn) Z Shell /bin/ksh Bourne shell + C shell Bourne-Again Shell /bin/bash .bash_profile .bashrc .bash_logout (.bash_login은 호출 않음) Bourne shell + (강력한 스크립팅 기능 + C 셸과 Korn 셸의 유용한 기능 결합) Unix/Linux
5
.bash_profile 셸 환경변수: $HOME, $PATH, $SHELL, $TERM, $LOGNAME, $PS1, $PS2, $IFS 프롬프트 설정 PS1=“$PWD \$” PS1=“\$PWD \$” ($PWD의 실행이 shell의 해석으로부터 보호되어 매 프롬프트 생성 때마다 실행됨) \w \$” $ vi .bash_profile 안에 자기 취향의 PS1 설정하고 $ . .bash_profile로 실행시켜 적용 프롬프트에 사용할 수 있는 제어문자 \t 현재 시간(시:분:초 형식) \d 오늘 날짜, 요일(요일 월 일 형식) \n new line \s 현재 셸 이름, $0의 값 \w 현재 작업 디렉토리의 이름 (전체경로까지) \W 현재 작업 디렉토리의 이름 (현재 위치만) \u 사용자 이름 \h 호스트 이름 \# 셸이 기동한 후로부터의 명령의 번호 \! 실행하는 명령의 history 번호 \$ 프롬프트 모양 uid가 0, root이면 #, 그렇지 않으면 $ \nnn ASCII 코드 nnn에 해당하는 문자 \\ 백슬래시 \[ 제어문자라 쓸 수 없는 문자를 사용하기 위해서는 [로 시작 \] 제어문자의 끝 Unix/Linux
6
셸의 기능 셸 기능 내장명령어 스크립트 변수 리다이렉션 대표문자 파이프 명령열 서브셸 후면처리 명령어치환 지역 환경 조건부 무조건부 Unix/Linux
7
셸 선택 계좌 개설시 선택 명시 /etc/passwd 화일 안에 login shell 정보 저장
$ echo $SHELL 현재 실행 중인 shell이 무엇인지를 확인하는 법 $ ps Shell 호출 및 환경 설정 ① 자동 호출 login시에 특정 시작 화일을 읽어서 shell을 시작 Bourne Shell : .profile C Shell : .login, .cshrc Korn Shell : .profile Bourne-Again Shell : .bash_profile, .login, .bashrc ② 수동 호출 /bin/sh: . .profile /bin/csh: source .cshrc /bin/ksh: . .profile /bin/bash: . .bash_profile Unix/Linux
8
셸 운영 기본적인(공통적인) shell 기능 다수의 내장 명령어 제공 메타문자 제공
입력/출력/오류의 redirection 기능 제공 대표문자들(wildcards)를 이용하여 화일이름 대치 파이프라인 기능 명령어 대치 조건부/무조건부 명령열(sequences) 작성 subshell 생성 후면처리(background processing) Shell Script(프로그램)를 작성할 수 있도록 해줌 환경변수와 지역변수를 가짐 인용(quoting) 작업 제어 Unix/Linux
9
실행 가능한 파일과 내장 명령어 다수의 내장 명령어 제공 <Linux machine> $ man builtins
<Unix machine> $ man shell_builtins 로 내장명령어 확인 (cf.) utility program과의 차이: shell에 내장, search path에서 찾기 전에 실행 정보를 표시 : echo 모든 명령어 인자(arg)들을 표준 출력(화면)에 표시해줌 Borne shell, Bash shell에서 $ echo {string}* $ echo –n {string}* 출력에 newline을 생성(default)하지 않도록 해줌 $ echo –e “string” 제어문자 표시: 큰 따옴표 안에 표기 \b backspace \c print line without new-line (Fedora Core 15에서는 적용 안됨) \f form-feed \n new-line \r carriage return \t tab \v vertical tab \\ backslash \0n where n is the 8-bit character whose ASCII code is the 1-, 2- or 3- digit octal number representing that character (예) $ echo –e “\0101” $ echo –e “\0141” Unix/Linux
10
ASCII Code Unix/Linux * 1 2 3 4 5 6 7 8 9 A B C D E F NUL SOH STX ETX
1 2 3 4 5 6 7 8 9 A B C D E F NUL SOH STX ETX EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US ! " # $ % & ' ( ) + , - . / : ; < = > ? @ G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ Unix/Linux
11
Unix/Linux 10진수 16진수 8진수 2진수 ASCII 0×00 000 0000000 NULL 64 0×40 100
0×00 000 NULL 64 0×40 100 @ 1 0×01 001 SOH 65 0×41 101 A 2 0×02 002 STX 66 0×42 102 B 3 0×03 003 ETX 67 0×43 103 C 4 0×04 004 EOT 68 0×44 104 D 5 0×05 005 ENQ 69 0×45 105 E 6 0×06 006 ACK 70 0×46 106 F 7 0×07 007 BEL 71 0×47 107 G 8 0×08 010 BS 72 0×48 110 H 9 0×09 011 HT 73 0×49 111 I 10 0×0A 012 LF 74 0×4A 112 J 11 0×0B 013 VT 75 0×4B 113 K 12 0×0C 014 FF 76 0×4C 114 L 13 0×0D 015 CR 77 0×4D 115 M 14 0×0E 016 SO 78 0×4E 116 N 15 0×0F 017 SI 79 0×4F 117 O 16 0×10 020 DLE 80 0×50 120 P 17 0×11 021 DC1 81 0×51 121 Q 18 0×12 022 SC2 82 0×52 122 R 19 0×13 023 SC3 83 0×53 123 S 20 0×14 024 SC4 84 0×54 124 T 21 0×15 025 NAK 85 0×55 125 U 22 0×16 026 SYN 86 0×56 126 V 23 0×17 027 ETB 87 0×57 127 W 24 0×18 030 CAN 88 0×58 130 X 25 0×19 031 EM 89 0×59 131 Y 26 0×1A 032 SUB 90 0×5A 132 Z 27 0×1B 033 ESC 91 0×5B 133 [ 28 0×1C 034 FS 92 0×5C 134 \ 29 0×1D 035 GS 93 0×5D 135 ] 30 0×1E 036 RS 94 0×5E 136 ^ 31 0×1F 037 US 95 0×5F 137 _ 32 0×20 040 SP 96 0×60 140 . 33 0×21 041 ! 97 0×61 141 a 34 0×22 042 " 98 0×62 142 b 35 0×23 043 # 99 0×63 143 c 36 0×24 044 $ 0×64 144 d 37 0×25 045 % 0×65 145 e 38 0×26 046 & 0×66 146 f 39 0×27 047 ' 0×67 147 g 40 0×28 050 ( 0×68 150 h 41 0×29 051 ) 0×69 151 i 42 0×2A 052 * 0×6A 152 j 43 0×2B 053 + 0×6B 153 k 44 0×2C 054 108 0×6C 154 l 45 0×2D 055 - 109 0×6D 155 m 46 0×2E 056 0×6E 156 n 47 0×2F 057 / 0×6F 157 o 48 0×30 060 0×70 160 p 49 0×31 061 0×71 161 q 50 0×32 062 0×72 162 r 51 0×33 063 0×73 163 s 52 0×34 064 0×74 164 t 53 0×35 065 0×75 165 u 54 0×36 066 118 0×76 166 v 55 0×37 067 119 0×77 167 w 56 0×38 070 0×78 170 x 57 0×39 071 0×79 171 y 58 0×3A 072 : 0×7A 172 z 59 0×3B 073 ; 0×7B 173 { 60 0×3C 074 < 0×7C 174 | 61 0×3D 075 = 0×7D 175 } 62 0×3E 076 > 0×7E 176 ~ 63 0×3F 077 ? 0×7F 177 DEL Unix/Linux
12
실행 가능한 파일과 내장 명령어 다른 내장 명령어 예제 : cd, eval, exec, shift, umask
$ eval `command` backquote, grave accent(‘)안의 command 수행 결과를 정규 셀 명령으로 간주하여 실행 (Bash shell 예) $ echo x=5 와 $ echo $x $ eval `echo x=5` 의 차이점 $ exec command 현재의 shell process가 command를 수행하는 shell process로 대치됨 따라서 command가 성공적으로 수행되면, exec process는 사라짐 특히, exec의 process가 login shell이면, logout 되어버림 (시스템 호출 fork + exec 참조) (예)$ exec date Unix/Linux
13
실행 가능한 파일과 내장 명령어 $ shift 명령어 인자들의 위치를 왼쪽으로 하나씩 옮김, 첫 번째 인자 ($1)은 없어지므로 이동할 명령어 인자가 없으면 에러 메시지가 나옴 (예)$ cat shift.sh (또는 shift.bash) [교재 p156 참조] #! /bin/sh (또는 /bin/bash) echo first argment is $1, all args are $* shift $ shift.sh 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 Unix/Linux
14
실행 가능한 파일과 내장 명령어 $ umask (user mask) [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) Unix/Linux
15
메타 문자 http://www.itdaily.kr/news/articleView.html?idxno=22497 의 미 기호
word 바로 전줄까지를 임시 화일에 저장한 후 이 화일을 표준입력으로 읽어 들이는 입력 redirection here document <<을 사용하는 script를 말합 의 미 기호 의 미 > >> < <<word 표준출력을 파일에 저장하는 출력 redirection 표준출력을 파일에 추가 저장하는 출력 redirection 표준입력을 파일에서 읽어 들이는 입력 redirection ; || Shell 명령어를 순서대로 구분 하여 나열할 때 사용하는 분리자 && \ 이전의 명령이 실패하면 실행 하도록 하는 조건부 명시 이전의 명령이 성공하면 실행하도록 하는 조건부 명시 Shell의 메타문자 앞에 붙어서 메타문자의 특수 의미를 제거함 $ echo hi > file $ echo hi \> file Unix/Linux
16
메타 문자 기호 의 미 기호 의 미 0개 이상의 문자와 일치 하는 화일 치환 대표 문자 그룹 명령어 * (...)
의 미 기호 의 미 0개 이상의 문자와 일치 하는 화일 치환 대표 문자 그룹 명령어 * (...) 단일 문자와 일치하는 화일 치환 대표 문자 후면 실행 (background processing) & ? [ 와 ] 사이의 어떤 문자 와도 일치하는 화일 치환 대표 문자. 문자의 범위는 대쉬(-)로 표현 Newline까지를 설명문으로 간주하여 처리함 [...] # 명령어 command의 출력 에 의해서 대치 되는 명령 어 치환 $ 변수 접근 `command` 어떤 프로세스의 출력을 다른 프로세스의 입력으로 보내 주는 pipe | Unix/Linux
17
리다이렉션 Redirection 표준 파일들
표준 입력 (standard input) : fd (file descriptor) = 0 표준 출력 (standard output) : fd = 1 표준 에러 (standard error) : fd = 2 출력/입력/에러 Redirection : 메타문자표 참조 $ cat > test.txt ^D # 출력 redirection(생성): 존재하면 truncate (overwrite) # $ set –o noclobber 또는 $ set –C 로 truncate 방지 # $ set +o noclobber 또는 $ set +C 로 truncate 회복 $ cat >> test.txt ^D # 출력 redirection(추가) $ mail mysung < letter # 입력 redirection Unix/Linux
18
리다이렉션 #표준에러를 표준출력에 연계 시킴(표준출력과 표준에러를 한 파일에)
$ cat here.sh #here document #EndOfMail의 직전 줄까지 읽어서 메일 내용으로 보냄 mail $1 << EndOfMail Dear $1, Good Morning! -from $LOGNAME Have a nice day! EndOfMail #공백 없이 첫째 칸부터 입력 echo mail sent to $1 $ here.sh mysung mail sent to mysung 표준 에러 처리 Borne 셸, Bash 셸 $ find / -perm 4755 –ls > find.txt #표준출력을 find.txt라는 화일에 redirection $ find / -perm 4755 –ls > find.txt 2> err.txt #표준에러를 err.txt라는 화일에 redirection $ find / -perm 4755 –ls > find.txt 2>&1 #표준에러를 표준출력에 연계 시킴(표준출력과 표준에러를 한 파일에) Unix/Linux
19
화일 이름 대치 (wildcards) Wildcard들을 이용한 화일 이름 대치 $ ls -FR
a.c b.c cc.c dir1/ dir2/ dir1: d.c e.e dir2: f.d g.c 교재 p126 예제 $ 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 Unix/Linux
20
파이프(pipes) 표준 입력을 명시된 화일과 표준 출력에 동시 복사 -a (화일에 추가 저장) -i (인터럽트 무시)
파이프라인 기능 $ command1 | command2 | command3 $ ls | wc -w $ ls -l | wc -l $ who | tee who.capture | sort #who의 출력을 화일에 복사 저장한 후 이를 정렬함 tee -ia {fileName}+ 표준 입력을 명시된 화일과 표준 출력에 동시 복사 -a (화일에 추가 저장) -i (인터럽트 무시) cat /etc/passwd | awk –F: ‘{ print $1 }’ | sort Awk(Aho, Weinberger, Kernighan)는 [교재 221 참조] Unix/Linux
21
명령어 대치 그레이브 액센트 부호(`)로 둘러싸인 명령어는 표준 출력으로 대치
$ echo the date today is `date` $ echo there are `who | wc -l` users on the system $ vi `grep -l debug *.c` # debug 패턴을 포함하며 .c로 끝나는 모든 화일들을 vi 편집 grep, fgrep, egrep: 명시된 패턴이 있는/없는 줄만을 여과 화일 여과 utility [교재 p193 참조] grep/frep/egrep - hilnvw pattern {fileName}* -n (줄번호 표시) i (대소문자 무시) l (화일목록) -v (일치하지 않는 줄) -w (단어 단위로 탐색) 명시된 화일이 없으면 표준 입력을 탐색한다. pattern : grep (정규식) fgrep (일정한 문자열만) egrep (확장된 정규식) (예)$ grep the rain (예)$ grep rain rain (예)$ grep -nw rain rain Unix/Linux
22
명령열(sequences) 조건부/무조건부 실행 순서 (무조건부) 명령열(sequence)
세미콜론(;)으로 구성됨, 순차적으로 수행 (예) $ date > date.txt ; ls ; pwd > pwd.txt 프로세스의 종료 값 반환 0(성공적 완성), 0 아닌 값(수행 실패) Bourne shell과 Korn shell 프로세스의 종료 값 표시: $? [p147 참조] (예) $ date; echo $? 0 (cf.) C shell 프로세스의 종료 값 표시: $status에 (예) % date; echo $status 0 셀을 종료시키고 부모 프로세스에 종료 값 전달 $ exit number (예) $ exit 3 (조건부) 프로세스의 종료 값 이용 && (이전 명령의 종료 값이 0이면, 다음 명령 계속 수행) || (이전 명령의 종료 값이 0이 아니면, 다음 명령 계속 수행) (예) $ gcc myprog.c && a.out (예) $ gcc myprog.c || echo compilation failed Unix/Linux
23
명령어 그룹 Subshell(자식 셸) 명령어 그룹 수행 시, 부모 셸이 자식 셸을 생성
(예) $ (date ; ls ; pwd) > output.txt cf. date ; ls ; pwd > output.txt 스크립트가 실행될 때, 부모 셸이 자식 셸을 생성 후면 작업이 실행될 때, 부모 셸이 자식 셸을 생성함 자식 셸은 부모 셸로부터 환경 공간과 지역변수 공간의 복사본을 상속 받음 Unix/Linux
24
후면 처리 (Background Processing) & 후면 프로세서의 리다이렉션
& 자식셸로 생성되어 부모 셸과 같이 수행되나 키보드를 제어하지 않음 (예) % find . -name ‘*.c’ -print & [p214 참조] (cf.) find . -name ‘*.c’ -print % date (예) % date & pwd & Bourne, Bash 셸의 후면처리의 출력 리다이렉션 (예) % find / -name b.c -print > find.txt & (예) % find / -name b.c -print > find.txt 2>&1 & (에러 메시지도 함께) (예) % find / –name b.c -print > find.txt 2> err.txt (따로 따로) 후면처리의 입력 리다이렉션 키보드 입력시 에러 시그널을 내고 종료됨 (예) % mail mysung & 중단됨(종료) Unix/Linux
25
셸 프로그램 : Scripts & 서브셸(Subshell)
Shell Script(프로그램)를 작성할 수 있도록 해 줌 Script 셀 명령들을 포함하는 화일로서, chmod +x가 적용되어야 함 셸 선택(script의 첫 줄에 명시) 첫 줄이 # : 스크립트를 수행한 셸(현재 셸)에 의해 해석 #! shell의 path (예) #! /bin/bash : 해당 셸 3.16 서브셸(Subshell) 3.11 명령열 참조 Unix/Linux
26
변수 환경변수와 지역변수 공통적인 환경변수 공통적인 지역변수 의 미 이 름 $HOME $PATH $LOGNAME $SHELL
의 미 이 름 $HOME $PATH $LOGNAME $SHELL $TERM 홈디렉토리의 절대경로이름 사용자 id 명령어 탐색 디렉토리 목록 로그인의 셀의 절대경로이름 mailbox의 절대경로 이름 터미널의 유형 $MAIL (예) echo LOGNAME = $LOGNAME, SHELL = $SHELL, TERM = $TERM Unix/Linux
27
변수 공통적인 지역변수 의 미 이 름 $$ $0 $1..$n $* 셀의 프로세스 id 명령어 n번째 인수 셀 스크립트 이름
의 미 이 름 $$ $0 $1..$n $* 셀의 프로세스 id 명령어 n번째 인수 셀 스크립트 이름 명령어 모든 인수 목록 (예)$ cat variable.bash (또는 variable.csh 모든 종류의 셸에서 정상 동작) date > $1.$$ echo '$$ = ' $$ echo '$0 = ' $0 echo '$1.$$ = ' $1.$$ cat $1.$$ $ variable.bash Sung MeeYoung Sung.1234 $ cat Sung.1234 Unix/Linux
28
인용(Quoting) & HERE DOCUMENTS
셸의 대표문자 대치, 변수 대치, 명령 대치 등을 금지할 때 단일 인용 부호(') 사용 셸의 대표문자 대치만을 금지할 때 이중 인용 부호(") 사용 인용 부호가 중첩되어 있는 경우, 바깥쪽의 인용 부호만이 효력을 가짐 (예) $ echo 3 * 4 = 3 file1 file2 file3 4 = 12 (예) $ echo "3 * 4 = 12" 3 * 4 = 12 (예) $ name=mysung (본 셸) C shell 에서는 # set name=mysung $ echo "My name is $name" My name is mysung $ echo 'My name is $name' My name is $name 3.19 HERE DOCUMENTS 3.7 리다이렉션 참조 Unix/Linux
29
작업 제어: ps (Unix) 프로세스 상태 : ps ps –[aefglu] (Unix 출력)
-a all (단말기에서 제어하는) -e everything (단말기에서 제어하지 않는 것도) -f full listing -l long -u user (예) $ ps -ef (Unix 출력) UID PID PPID C STIME TTY TIME CMD root 월 13 ? 0:03 sched root 월 13 ? 0:20 /sbin/init root 월 13 ? 0:00 pageout root 월 13 ? 103:32 fsflush root 월 13 ? :30 /usr/lib/inet/inetd start Unix/Linux
30
작업 제어: ps (Linux) 프로세스 상태 : ps ps –[aefglu]
-a all (단말기에서 제어하는, 세션리더 제외) -e everything (단말기에서 제어하지 않는 것도) -f full listing -l long -u user a all (단말기에서 제어하는, 세션 리더 포함) -A everything (= -a) u display user-oriented format x lift(제거) “must have a tty” (예) <Unix style> $ ps –ef <BSD style> $ ps aux (Linux 출력) UID PID PPID C STIME TTY TIME CMD root Oct08 ? :00:03 /sbin/init root Oct08 ? :00:00 [kthreadd] root Oct08 ? :00:00 [migration/0] root Oct08 ? :00:01 [ksoftirqd/0] ‘-’ UNIX options ‘’ BSD options ‘--’ GNU long options Unix/Linux
31
작업 제어: ps –el $ ps –el 헤더(header) F: flags(현재는 별 의미 없음) S: state
[Unix] O: running, S: sleeping, R: runnable, Z: zombie, T: stopped [Linux] D: uninterruptible sleep R: running or runnable T: stopped W: paging X: dead Z: zombie UID: user ID PID: process ID PPID: parent ID C: central processor utilization STIME: starting time(24시간 지나면 월일로) TTY: terminal 번호 TIME: 실행된 분과 초 CMD: command Unix/Linux
32
작업 제어: PROCESS STATE CODES
Unix O Process is running on a processor. S Sleeping: process is waiting for an event to complete. R Runnable: process is on run queue. Z Zombie state: process terminated and parent not waiting. T Process is stopped, either by a job control signal or because it is being traced. Linux D Uninterruptible sleep (usually IO) R Running or runnable (on run queue) S Interruptible sleep (waiting for an event to complete) T Stopped, either by a job control signal or because it is being traced. W paging (not valid since the 2.6.xx kernel) X dead (should never be seen) Z Defunct ("zombie") process, terminated but not reaped by its parent. For BSD formats and when the stat keyword is used, additional characters may be displayed: < high-priority (not nice to other users) N low-priority (nice to other users) L has pages locked into memory (for real-time and custom IO) s is a session leader l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) + is in the foreground process group Unix/Linux
33
작업 제어 프로세스 잠재우기 [p139 참조] 프로세스에 시스널 보내기 : kill 자식 프로세스를 기다림 : wait
sleep seconds (예) $ (sleep 10; echo done) & 프로세스에 시스널 보내기 : kill kill -signalId {pid}+ signalId : 프로세스에 보내지는 시그널의 번호 또는 이름 (default: 15 = TERM) kill -l 적법한 시그널 이름의 목록을 보여준다 (signal #1 ∼ #31) (참고) SIGKILL(-9)과 SIGSTOP(Unix -23,Linux -19)은 signal()로 가로채지 못함 kill 0 현재의 셀과 관련된 모든 프로세스를 종료 시킴 (예) $ kill -KILL 27490 자식 프로세스를 기다림 : wait wait [pid] 명시된 자식 프로세스가 종료될 때까지 해당 셀이 일시 정지 명시된 pid가 없으면 모든 자식 프로세스가 종료되기를 기다림 (예) $ (sleep 30; echo done 1) & 24193 $ (sleep 30; echo done 2) & 24195 $ echo done 3; wait; echo done 4 결과는 ? Unix/Linux
34
기타 명령어 찾기 : $PATH 동일한 이름의 표준 유틸리티 무시 : $HOME 또는 ./명령
종료와 종료 코드 : exit, $? (Bourne shell), $status (C shell) 공통의 핵심 내장 명령어 eval exec shift umask 내장 명령어 확인 <Linux> $ man builtins <Unix> $ man shell_builtins 로 내장명령어 확인 Unix/Linux
35
요약 정리 제 3 장 정리: 중요한 세 가지 셸의 기능 사이의 관계 일반적인 셸 메타 문자 입출력 리다이렉션 파일 이름 대치
파이프 명령어 대치 명령열 명령어 그룹 스크립트의 구성 지역 변수와 환경 변수의 차이점 2가지 다른 종류의 인용 기본적 작업 제어 셸이 명령을 찾기 위해 사용하는 체계 여러 가지 핵심 내장 명령어
Similar presentations