1 / 35

3. 유닉스 쉘

3. 유닉스 쉘. 정의 사용자와 순수 유닉스운영체제 사이에 위치하는 프로그램 쉘 (shell) 의 종류 Borune shell (sh) 가장 오랜 동안 모든 unix 시스템의 표준 구성 요소 강력한 명령 프로그래밍 언어 기능을 가짐 C shell (csh) c 언어와 유사 대화형으로 많이 사용. 3. 유닉스 쉘 ( 계속 ). Korn shell (ksh) Bourne 쉘과 완전히 호환 C 쉘의 대화형 기능 추가. 3. 유닉스 쉘 ( 계속 ). 쉘의 핵심적인 기능. 쉘.

joan-barr
Download Presentation

3. 유닉스 쉘

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. 유닉스 쉘 • 정의 사용자와 순수 유닉스운영체제 사이에 위치하는 프로그램 • 쉘(shell)의 종류 • Borune shell (sh) • 가장 오랜 동안 모든 unix시스템의 표준 구성 요소 • 강력한 명령 프로그래밍 언어 기능을 가짐 • C shell (csh) • c 언어와 유사 • 대화형으로 많이 사용

  2. 3. 유닉스 쉘 (계속) • Korn shell (ksh) • Bourne쉘과 완전히 호환 • C쉘의 대화형 기능 추가

  3. 3. 유닉스 쉘 (계속) • 쉘의 핵심적인 기능 쉘 내장명령어 스크립트 변수 리다이렉션 대표문자 파이프 명령열 서브쉘 후면처리 명령어처리 지역 환경 조건부 무조건부

  4. 3. 유닉스 쉘 (계속) • 쉘의 선택 시스템 관리자가 사용자의 기본 쉘을 정한다. • $ : Bourne 쉘 또는 Korn 쉘 • %: C 쉘

  5. 3. 유닉스 쉘 (계속) • 쉘 명령 • 단일 명령어 • 다중 명령어 • 순차 수행 • 동시수행 # command1& command2& command3&……. command N # command [인 수] # command 1; command 2; …………; command N

  6. 3. 유닉스 쉘 (계속) • 메타 문자 • 쉘이 특수하게 처리하는 문자 • 메타 문자의 특수한 의미를 없애기 위해서는 앞에 ‘\’를 삽입한다. # echo hi > file // echo의 출력을 file에 저장 # cat file // file의 내용 보기 hi # echo hi \> file // 메타 문자 금지 hi > file # _

  7. 3. 유닉스 쉘 (계속) • 리다이렉션(Redirection) • 출력 리다이렉션 프로세스의 출력을 파일에 저장할 수 있게 한다. command > filename // command의 표준 출력을 filename파일로 보낸다. command >> filename //command의 표준 출력을 filename이라는 파일의 끝에 덧붙인다.

  8. 3. 유닉스 쉘 (계속) # cat > text //파일의 생성 I remember walking in the rain, on a cold and dark September, ^D // 입력의 끝 # cat text // text파일 보기 I remember walking in the rain, on a cold and dark September, # cat >> text //파일의 끝에 덧붙이기 brown Autumn leaves were falling softly to the ground. ^D # cat text //text파일 보기 I remember walking in the rain, on a cold and dark September, brown Autumn leaves were falling softly to the ground. # _

  9. 3. 유닉스 쉘 (계속) • 입력 리다이렉션 파일의 내용을 표준 입력으로 사용하는 리다이렉션 command < filename // filename내용을 표준 입력으로 사용하여 command를 실행 command << word // word로 시작하는 줄의 앞줄까지의 표준 입력을 임시파일로 복사하고, 그 임시 파일의 내용을 표준 입력으로 사용하여 command를 실행

  10. 3. 유닉스 쉘 (계속) # mail james < mail.text // 자신에게 메일 전송 # mail // 메일 확인 mailx version 5.0 Tue Jul 15 21:29:48 PDT 1997 도움말 필요시 ? 입력. "/var/mail/s95699": 1개 메시지 1개 신규 >N 1 s95699 Sun Jul 18 16:08 15/381 // 전송된 메일 ?

  11. 대표 문자 의 미 * 빈 문자열을 포함하는 어떤 문자열과도 일치. ? 어떤 단일 문자와 일치. [..] 대괄호 사이의 어떤 하나의 문자와 일치. 문자의 범위는 대시(-)기호로 문자의 쌍을 분리하 여 지정 가능하다. 3. 유닉스 쉘 (계속) • 파일 이름 대치(대표 문자) 모든 쉘은 파일 시스템에서 특정한 이름 패턴을 만족하는 파 일을 선택할 수 있게 대표 문자 기능을 지원한다.

  12. 3. 유닉스 쉘 (계속) # ls -FR // 현재 디렉토리를 순환적으로 표시 a.c b.c cc.c dir1/ dir2/ dir1: d.c e.e dir2: f.d g.c # ls *.c //” .c”로 끝나는 모든 것 a.c b.c cc.c # ls [ac]* // “a” 또는 “c”로 시작하는 모든 것 a.c cc.c # ls [A-Z a-z]* // 영문자로 시작하는 모든 것 a.c b.c cc. # ls dir */*.c // “dir*” 디렉토리에서 “ .c”로 끝나는 모든 파일들 dir1/d.c dir2/g.c

  13. 3. 유닉스 쉘 (계속) • 파이프 (Pipe) command1 | command2 // command1의 표준 출력을 command2의 표준 입력으로 사용 command1 command2 터미널 파이프 # ls // 현재 디렉토리 표시 a.c b.c cc.c # ls | wc -w // 엔트리의 수 표시 5 # _

  14. ls Wc -w 터미널 파이프 3. 유닉스 쉘 (계속) # ls // 현재 디렉토리 표시 a.c b.c cc.c # ls | wc -w // 엔트리의 수 표시 3 # _

  15. 터미널 cat sort 파이프 3. 유닉스 쉘 (계속) # cat userid | sort glass james john kang tim # cat userid james glass kang tim john

  16. tee -ia {filename} -i: 인터럽트를 무시한다. -a: 입력을 파일에 덮어씌우지 않고 대신에 그 파일의 끝에 덧붙인다. 3. 유닉스 쉘 (계속) • 파이프라인의 분리: tee 파이프의 결과를 파일에 복사하고, 계속 파이프라인을 따라 흐르 게 하는 기능

  17. 3. 유닉스 쉘 (계속) # who | tee who.txt | sort // tee를 이용하여 파이프 자료 복사 James pts/6 5월 24 11:19 root console 5월 22 13:56 root pts/3 5월 22 13:57 root pts/4 5월 22 13:57 # cat who.txt // who.txt 파일 보기 root console 5월 22 13:56 James pts/6 5월 24 11:19 root pts/3 5월 22 13:57 root pts/4 5월 22 13:57 # _

  18. 3. 유닉스 쉘 (계속) • 명령열 (Sequences) • ‘ ;’으로 명령어를 구분한다. • 쉘은 왼쪽에서 오른쪽으로 차례로 실행한다. • 출력결과는 반드시 순서적 이지는 않다. # date; pwd; ls 1999년 5월 24일 월요일 오전 11시 46분 27초 /user/james/ a.c b.c cc.c # date > date.txt; ls; pwd > pwd.txt //첫번째와 세번째 명령을 리다이렉트 a.c b.c cc.c date.txt # cat date.txt 1999년 7월 18일 일요일 오후 04시 28분 46초 # cat pwd.txt /stud/users/james

  19. 3. 유닉스 쉘 (계속) • 조건부 실행 순서 • 모든 유닉스 프로세스는 종료 값을 가지고 끝난다. • 종료 값이 0이면 프로세스가 성공적으로 완결되었음을 의미 &&: 이전 명령의 종료 값으로 0을 반환할 경우만 다음 명령이 실행된다. || : 이전 명령의 종료 값으로 0이 아닌 값을 반환 할 경우만 다음 명령이 실행된다. # cc myprog.c && a.out // myprog.c가 성공적으로 컴파일 될 경우, a.out을 실행한다. # cc myprog.c || echo compile error // myprog.c가 실패할 경우만 다음 명령을 실행한다.

  20. 3. 유닉스 쉘 (계속) • 명령어 그룹 (Instruction group) 명령어들을 괄호 안에 그룹으로 묶어, 이를 하나의 자식 쉘에서 실행하게 한다. # date; ls; pwd > out.txt 1999년 5월 24일 월요일 오후 12시 19분 01초 // date의 출력 a.c b.c cc.c // ls의 출력 # cat out.txt /user/james// pwd만이 리다이렉트 됨 # (date; ls; pwd) > out.txt // 그룹으로 묶고 리다이렉트 실행 # cat out.txt // 모든 출력이 리다이렉트 됨 1999년 5월 24일 월요일 오후 12시 19분 01초 a.c b.c cc.c /user/james # _

  21. 3. 유닉스 쉘 (계속) • 후면 처리(Background Processing) • 명령어 뒤에 ‘&’ 붙임으로써 서브 쉘을 생성하여 후면처리로 실행한다. • 키보드 입력을 요구하지 않는 한, 여러 개의 작업을 동시에 수행하는데매우 유용하다 ( 멀티 태스킹 시스템). # date & pwd & 4510 //date의 프로세스 번호 4511 //pwd의 프로세스 번호 1999년 5월 24일 월요일 오후 12시 43분 03초 //date의 출력 /user/james //pwd의 출력 # _

  22. 3. 유닉스 쉘 (계속) • 후면 프로세스의 리다이렉션 • 후면 프로세서의 출력이 자신의 터미널에 도착하는 것을 방지하기 위해서 출력을 파일에 리다이렉션 한다. # find . - name a.c -print > find.txt & // 후면 프로세서의 생성 27188 // find 의 프로세서 id # ls -l find.txt -rw-r-- r-- 1 james 0 Feb 3 18:11 find.txt # ls -l find.txt // 파일의 크기가 커짐 -rw-r-- r-- 1 james 29 Feb 3 18:11 find.txt # cat find.txt ./wild/a.c ./reverse/tmp/a.c # _

  23. 의 미 #, #! /bin/csh C쉘에 의해 해석된다 #! /bin/ksh korn쉘에 의해 해석된다 #! /bin/sh bourne쉘에 의해 해석된다 3. 유닉스 쉘 (계속) • 쉘 프로그램 일련의 명령어들로 이루어진 실행 파일 • 쉘의 선택 커널은 스크립트가 어떤 쉘을 대상으로 작성되었는지를 파일의 첫번째 줄에서 결정하고, 그 후에 그 스크립트를 표준 입력으로 사용하여 쉘을 실행한다.

  24. 3. 유닉스 쉘 (계속) # cat > ex_sh # this is a example //c쉘로 해석 echo hi // hi를 표준 출력 date // 현재 날짜출력 ^D // 입력의 끝 # chmod +x ex_sh // ex_sh파일에 실행 허가권 부여 # ex_sh hi 1999년 3월 10일 수요일 오후 07시 08분 40초 # _

  25. 3. 유닉스 쉘 (계속) • 서브 쉘(Subshell) • 로그인 시, 유닉스는 초기 로그인 쉘을 제공 • 입력된 단순 명령들은 초기 쉘에 의해 실행 • 현재(부모) 쉘이 어떤 작업을 수행 시, 자식 쉘을 생성할 필요가 있다. • 서브 쉘 생성이 필요한 환경 • 그룹 명령어 실행 시 • 스크립트내의 명령어 실행 시 • 후면 작업 실행 시

  26. 3. 유닉스 쉘 (계속) • 부모 쉘로부터의 변수상속 • 모든 쉘은 환경변수와 지역변수를 가진다. • 자식 쉘은 부모 쉘의 환경변수 복사본을 얻는다. • 자식 쉘은 부모 쉘의 지역변수 복사본을 얻지 않고, 초기화된 지역 변수를 갖는다. 부모 쉘 자식 쉘 환경변수 환경변수 부모로부터 복사 지역변수 지역변수 초기화

  27. 3. 유닉스 쉘 (계속) # pwd // 로그인 쉘의 현재 작업 디렉토리를 표시 /usr/james # (cd / ; pwd) // 서브 쉘 이동 후 pwd 실행 / // 서브 쉘로부터의 출력 # pwd /usr/james # _

  28. 3. 유닉스 쉘 (계속) • 변수 서브 쉘은 부모 쉘의 환경 변수의 복사본을 얻지만 지역 변수에 대한 복사본은 얻지 않는다. • 주요 환경 변수 목록 이 름 의 미 $HOME 홈 디렉토리의 절대 경로 이름 $PATH 명령어를 탐색할 디렉토리 목록 $MAIL 우편함의 절대 경로 이름 $USER 사용자 ID $SHELL 로그인 쉘의 절대 경로 이름 $TERM 터미널 유형

  29. 3. 유닉스 쉘 (계속) • 환경 변수 목록 보기: env # env HOME=/user/james PATH=/bin:/usr/bin:/usr/ucb:/etc:. LOGNAME=james HZ=100 TZ=ROK SHELL=/bin/csh MAIL=/var/mail/james LANG=ko TERM=ansi PWD=/user/james USER=james # _

  30. 3. 유닉스 쉘 (계속) • 변수 할당 • Bourne 쉘과 Korn 쉘 VariableName = Value • C 쉘 set VariableName = Value # set firstname = Graham // 지역 변수 설정 # set lastname = glass // 또 다른 지역 변수 설정 # echo $firstname $lastname // 변수들의 값 표시 Graham glass # _

  31. 이 름 의 미 $$ 쉘의 프로세스 id $0 쉘 스크립트의 이름 $1..$9 $n은 명령어 줄의 n번째 인수를 나타냄 $* 모든 명령 줄 인스의 목록 3. 유닉스 쉘 (계속) • 특별한 의미를 갖는 내장변수

  32. 3. 유닉스 쉘 (계속) # cat > script.csh // 스크립트 파일 생성 # this is a sample C shell script. // C쉘에 의해 해석 echo the name of this script is $0 // 쉘 스크립트 이름 출력 echo the first argument is $1 // 명령어 줄의 첫번째 인수 출력 echo a list of all the arguments is $* // 모든 명령 줄 인수의 목록 출력 ^C # chmod +x script.csh // 실행 허가권 부여 # script.csh james glass june the name of this script is script.csh the first argument is james a list of all the arguments is james glass june # _

  33. 3. 유닉스 쉘 (계속) • 작업 제어 • 프로세서 상태 ps -aefptu -a :모든 사용자의 프로세스목록을 출력한다. -e :모든 프로세스 리스트를 출력한다. -f :프로세스 시작 시간, 프로세스의 부모 ID, 그 프로세스에 관련된 사용자 ID, 명령 이름과 가능한 매개변수(있다면) 등 모든 정보를 출력한다. -p pid :지정된 프로세스에 대한 정보를 출력한다. -t tty :지정된 터미널에 연관된 프로세스에 대한 정보를 출력한다. -u uid :지정된 사용자에 연관된 프로세스에 대한 정보를 출력한다.

  34. 3. 유닉스 쉘 (계속) # ps -u // 사용자 지향적 출력 요청 USER PID %CPU %MEM SZ RSS TT S START TIME COMMAND s95699 12685 0.0 0.2 1560 1328 pts/10 S 16:06:45 0:00 -csh # ps -a // 모든 사용자의 프로세서를 표시 PID TT S TIME COMMAND 958 console S 0:00 /usr/lib/saf/ttymon -g -h -p ce console login: -T sun 1039 pts/2 S 0:01 [ sdt_shell ] 1042 pts/2 S 0:00 [ csh ] 1061 pts/2 S 0:08 /usr/dt/bin/dtsession 1078 pts/3 S 0:00 /bin/csh 1082 pts/4 S 0:00 /bin/csh 13122 pts/9 S 0:00 -csh 12685 pts/10 S 0:00 -csh 14188 pts/10 O 0:00 ps -a 13199 pts/12 S 0:00 -csh # _

  35. 3. 유닉스 쉘 (계속) • 프로세스의 강제종료: kill 번호가 부여된 프로세스들의 목록에 signalID라는 코드를 가진 신호 을 보낸다. kill [-signalID] {pID} kill -l signalID: 디폴트는 TERM신호(signal)로써, 프로세서를 종료 시킨다. -l : 모든 시그널 이름의 목록을 제공한다. # (sleep 10; echo done)& 2497 # kill 2497 종료됨(Terminated) ( sleep 10; echo done ) # _

More Related