Download presentation
Presentation is loading. Please wait.
1
UNIX Unbounded A Beginning Approach
이 성 현 Home : nimilx2.hannam.ac.kr Tel :
2
목차 유닉스 쉘 쉘 변수 그 밖의 메타 문자들 그 밖의 유닉스 명령어 구동 파일 ksh와 bash 유닉스 프로세스 관리 요약
질의 및 응답 실습
3
유닉스 쉘 개요 유닉스 쉘이란? 유닉스 쉘의 종류 사용자와 순수 유닉스 운영체제 사이를 연결하는 프로그램
프로그램의 실행시 사용자는 쉘을 통하여 운영체제와 통신하게 되고, 하드웨어-의존 기능들은 커널에서 관리 쉘은 자체가 프로그램, 즉 유틸리티 프로그램 사용자가 시스템에 로그인할 때마다 메모리에 적재 사용자가 입력한 각 명령어를 검사하고 해당 유닉스 프로그램에 요청한 작업을 수행 유닉스 쉘의 종류 Bourne Shell Korn Shell C Shell
4
유닉스 쉘 쉘 시작하기 쉘의 생명 주기 시스템의 각 사용자는 기본 쉘을 가지고 있음
사용자가 시스템에 성공적으로 로그인한 후에 시작되고 사용자가 로그아웃할 때까지 유지 시스템의 각 사용자는 기본 쉘을 가지고 있음 시스템의 패스워드 파일에 기술 etc/passwd 사용자가 로그인 할 때, 시스템은 시작할 쉘을 패스워드 파일에서 찾아 결정 쉘 프로그램 이름 프롬프트 기호 쉘 이름 /bin/sh $ Bourne Shell /bin/ksh Koen Shell /bin/bash Bourne Againg Shell /bin/csh & C Shell /bin/tcsh TC Shell 쉘과 쉘 프로그램 이름
5
유닉스 쉘 쉘 시작하기 사용자 쉘 확인 /etc/passwd 파일의 확인
6
유닉스 쉘 쉘 시작하기 내장된 쉘 명령어 쉘 명령어 해석기는 명령어와 같이 쉘에 의해 기계어로 번역된 특별한 내부 기능을 가지고 있음 쉘의 한 부분으로 내부적으로 인식되고 수행됨 내장 명령어의 대부분이 쉘에서 구현되고 특정 쉘에 유일한 형태로 존재 명령어 내장되어 있는 쉘 Bourne 쉘 Korn 쉘 Bourne Againg 쉘 alias ksh bash echo sh history kill set unalias unset 내장된 쉘 명령어
7
유닉스 쉘 쉘 시작하기 내장된 쉘 명령어 확인 $ man shell_builtins [Enter]
8
유닉스 쉘 쉘의 주요 기능 이해하기 표준 유닉스 쉘은 200개 이상의 유틸리티 프로그램을 소유 쉘의 기능
쉘 자신의 예 : sh 대부분 유닉스 시스템에서 가장 많이 사용하는 유틸리티 프로그램 정교하게 작성된 프로그램으로 사용자와 유닉스 시스템간의 대화를 관리 쉘은 실행 가능한 정규형 C/C++ 프로그램 /bin 디렉토리에 저장 쉘의 기능 명령어 실행 쉘의 주요 기능으로 프롬프트에서 입력한 모든 것을 기계어로 번역 명령어 분석 후 적합한 프로그램 수행 파일명 치환 파일명 치환이 명령어에 지정되면 쉘은 먼저 치환을 수행한 다음 프로그램을 시랳ㅇ 입/출력 재지정 프로그램 실행 전에 재지정이 구성 입/출력 재지정이 일어날 경우 쉘은 파일을 열고, 각 프로그램의 표준 입력이나 표준 출력에 파일을 연결
9
유닉스 쉘 쉘의 주요 기능 이해하기 쉘의 기능 파이프
파이프 라인(pipeline)라고 불리며 간단한 프로그램을 사용하여 보다 복잡한 작업을 수행하도록 도와줌 환경 제어 사용자에게 적합한 환경을 제공 적절한 변수 구성을 통하여 홈 디렉토리, 프롬프트 출력, 작업 환경을 구성 백그라운드 프로세싱 현재 쉘에서 다른 작업을 수행하는 동안 독립적으로 백그라운드에서 프로그램을 실행 작업 수행 시간을 도와 주는 비대화식 프로그램 쉘 스크립트 쉘 스크립트(shell script)는 여러 가지 쉘 명령어들을 포함하고 있는 파일 파일의 이름은 나중에 저장된 프로그램을 실행하기 위해 사용되며, 단일 명령어를 이용하여 지정된 명령어들을 수행하도록 함
10
유닉스 쉘 정보의 출력 : echo 명령어 Echo 명령어 메시지를 출력하기 위한 명령어
표준 출력 장치인 터미널에 전달 받은 인자를 출력 인자가 없을 경우, 빈 라인을 출력하고 기본적으로 출력의 마지막에 새로운 명령을 받을 수 있도록 프롬프트를 추가 옵션 기능 -n 새로운 라인 출력을 하지 못하게 함 -e 백슬래쉬 이스케이프 문자의 해석을 가능하게 함 echo 명령어 옵션
11
유닉스 쉘 정보의 출력 : echo 명령어 이스케이프 문자 문자열에 추가하여 메시지의 형식을 조절할 수 있는 문자
문자 앞에 ‘\’를 입력, 원하는 출력을 제공하도록 쉘에 의해서 해석 이스케이프 문자 의미 \a 경고음(벨) \b 백스페이스 \c 새로운 라인 없이 출력 \f 폼 피드(form feed) \n 캐리지 리턴(carriage return)과 라인 피드(line feed, new line) \r 라인 피드 없이 캐리지 리턴 \t 수평 탭 \v 수직 탭 이스케이프 문자
12
유닉스 쉘 메타문자의 특별한 의미 제거 쉘 메타문자는 쉘에서 특별한 의미를 가짐
인용(quoting) 또는 이스케이핑(escaping) 메타문자의 특별한 의미를 제거하는 과정 인용문자의 구성 백 슬래쉬 \ 큰 따옴표 “ 작은 따옴표 ‘ 이스케이프 문자 의미 “” $, 작은 따옴표, 큰 따옴표를 제외한 모든 문자는 큰 따옴표 사이에 위치하면 특별한 의미가 없어짐 ‘’ 작은 따옴표를 제외한 모든 문자는 작은 따옴표 사이에 위치하면 특별한 의미가 없어짐 \ 어떠한 문자라도 백 슬래쉬 뒤에서는 특별한 의키가 없어짐 인용문자
13
쉘 변수 쉘 변수 쉘 프로그램 환경 변수 지역 변수 명령어 해석기처럼 사용자 인터페이스와 작업을 관리
명령 파일, 파일 수정과 같이 요청한 작업을 수행하는데 적합한 쉘을 제공하고, 사용자의 홈 디렉토리, 터미널 유형, 프롬프트 표시와 같이 확실한 정보와 정보에 대한 경로를 탐색하기 위해 필요 쉘 변수에 정보를 저장 쉘 변수는 환경을 최적화하거나 관리하기 위한 특별한 값으로 구성된 아이템 환경 변수(environment variable)와 지역 변수(local variable)의 두 가지 형태가 존재 환경 변수 표준 변수(standard variable) 시스템이 알고 있는 이름을 가지고 있다 시스템이 요구하는 필수적인 요소에 대한 기록을 탐색하는데 사용 관리자에 의해서 정의 ex : TERM=ansi 지역 변수 사용자 정의 변수 사용자가 원하는 대로 정의하고 바꿀 수 있으며, 삭제가 가능
14
쉘 변수 변수 출력과 제거 : set과 unset 명령어 set 명령어
현재 사용하고 있는 쉘이 어떤 변수들로 구성되어 있는지 알고 싶은 경우 사용하는 명령어
15
쉘 변수 변수 출력과 제거 : set과 unset 명령어 unset 명령어 원하지 않는 변수를 삭제
ex : unset ERRON [Enter]
16
쉘 변수 변수의 값 할당 쉘 변수의 값 출력 변수 값 할당 쉘 변수 출력
사용자는 자신의 변수들을 생성할 수 있으며, 표준 변수에 할당된 값을 수정할 수 있음 ex : age=32 [Enter] ex : SYSTEM=UNIX [Enter] 쉘 변수의 값 출력 쉘 변수 출력 쉘 변수에 저장된 값에 접근하기 위해서는 반드시 변수의 이름 앞에 $ 표시를 사용 echo 명령어를 사용하여 쉘 변수에 지정된 값을 출력 ex : age=32 echo $age $32
17
쉘 변수 표준 쉘 변수에 대한 이해 표준 쉘 변수 표준 쉘 변수의 이해
표준 쉘 변수에 할당된 값들은 보통 시스템 관리자에 의해 구성 사용자에 의해 변경된 변수의 값은 임시적인 형태를 지니고 있으며, 현재의 세션에만 적용 표준 쉘 변수의 경우 .profile 파일의 변수 값을 변경 표준 쉘 변수의 이해 HOME 사용자 홈 디렉토리에 대한 완전한 경로명을 할당 cd 명령어의 경우 홈 디렉토리에 대한 경로명을 정의하기 위해 HOME 변수를 검사한 다음, 사용자 홈 디렉토리에 대한 시스템을 변경 IFS 내부 필드 구분자(Internal Field Separator) 변수는 명령 라인 요소의 구분자처럼, 쉘에 의해 처리되는 문자의 목록으로 구성 MAIL 수신한 메일의 파일명을 구성 메일을 수신할 경우 해당 파일에 저장 정기적으로 파일의 내용을 검사한 후에 메일 수신 여부를 알려줌
18
쉘 변수 표준 쉘 변수에 대한 이해 표준 쉘 변수의 이해 MAILCHECK
PATH 디렉토리 구조에서 쉘이 명령어의 위치를 탐색하기 위한 디렉토리명으로 구성 경로 문자열에 나와 있는 디렉토리는 콜론으로 구성 PS1 프롬프트 문자열 1(Prompt String 1; PS1) 변수는 프롬프트 표시에 사용되는 문자열을 구성 PS2 프롬프트 문자열 2 변수는 쉘이 명령의 나머지 부분을 기다리고 있거나, 명령 라인의 완선 전에 [Enter]키를 눌렀을 때 출력되는 프롬프트로 구성 CDPATH 완젼한 경로면의 목록으로 구성되며, PATH와 유사 cd 명령어의 연산에 영향을 미침 SHELL 사용자의 로그인 쉘에 대한 완전한 경로명을 구성
19
쉘 변수 표준 쉘 변수에 대한 이해 표준 쉘 변수의 이해 TERM 사용자 터미널 유형을 구성 TZ 사용자의 타임 존을 구성
20
그 밖의 메타문자들 명령어의 수행 : 단일 역인용부호(‘) 사용법 명령어의 순차적 실행 : 세미콜론(;) 이용
포함된 명령어를 함께 수행하거나 명령 라인의 동일한 위치에서 명령어의 출력에 삽입하라고 쉘에게 요청 명령어 치환이라고 부름 형식 : ‘command’ 명령어의 순차적 실행 : 세미콜론(;) 이용 세미콜론으로 분리된 일련의 명령을 입력 쉘이 순차적으로 수행 명령어의 그룹화 : 괄호 () 이용 ()안에 일련의 명령어를 입력하여, 명령어를 그룹화 마치 하나의 명령어처럼 재지정 가능
21
그 밖의 메타문자들 백그라운드 프로세싱 : 앰퍼샌드(&) 이용
다중 작업의 경우 이전 수행되는 명령의 수행이 종료되기를 기다리지 않도록 명령의 처리를 백그라운드로 돌림
22
그 밖의 메타문자들 명령어 연결 : 파이프 연산자(|) 이용
쉘은 하나의 프로세스 표준 출력은 다른 프로세스 표준 입력에 사용할 수 있는 기능을 제공 명령어 사이에 파이프를 사용함으로써 기능 사용 형식 : command | command
23
그 밖의 유닉스 명령어 시간 대기 : sleep 명령어 PID 출력 : ps 명령어 지정한 시간동안 대기하도록 프로세스를 실행
지정한 시간만큼 수행한 프로세스가 대기 후 실행 결과를 출력 PID 출력 : ps 명령어 시스템에 있는 실행 중인 프로세스의 상태를 알기 위해 사용 사용자의 실행 중인 프로세스에 대한 정보를 출력 PID : 프로세스 ID TTY : 프로세스를 조정하는 터미널 번호 TIME : 프로세스가 소비한 시간(초 단위) COMMAND : 명령어의 이름 옵션 기능 -a 현재 사용자뿐만 아니라, 수행 중인 모든 프로세스의 상태를 출력 -f 모든 명령 라인을 포함한 모든 목록의 정보를 출력 ps 명령어 옵션
24
그 밖의 유닉스 명령어 PID 출력 : ps 명령어 옵션의 사용
25
그 밖의 유닉스 명령어 지속적인 실행 : nohup 명령어 프로그램 종료 : kill 명령어
사용자가 로그아웃할 경우 백그라운드 프로세스가 종료 nohup 명령어를 이용하여 백그라운드 프로세스가 종료 시그널에서 제외되록 함 nohup 명령어를 로그아웃을 한 후에도 프로그램을 지속적으로 처리하고자 할 때 사용 프로그램 종료 : kill 명령어 정상적으로 동작하지 않는 프로세스를 종료 시키기 위해 사용 사용자가 동작한 프로세스만 종료 가능
26
그 밖의 유닉스 명령어 프로그램 종료 : kill 명령어 시그널 목록 kill 명령을 통하여 내릴 수 있는 신호 목록을 표시
27
그 밖의 유닉스 명령어 출력의 분배 : tee 명령어 보통 파이프 연산자와 함께 사용되며, 출력을 다른 장치에 전송할 수 있음
Ex : ls –C | tee dir.list
28
그 밖의 유닉스 명령어 출력의 분배 : tee 명령어 파일 탐색 : grep 명령어 tee 명령어 옵션
지정한 패턴을 가지는 파일이나 파일의 목록을 탐색하기 위해 사용 grep 명령어에 사용하는 패턴을 정규식이라고 부름 사용 예 grep UNIX myfile 옵션 기능 -a 존재하는 파일에 덮어쓰지 않고, 파일에 결과를 덧붙인다 -i 인터럽트를 무시하여, 인터럽트 신호에 응답하지 않는다 tee 명령어 옵션
29
그 밖의 유닉스 명령어 파일 탐색 : grep 명령어 명령어 옵션 옵션 기능 -c 오직 찾은 줄의 수만 세어서 출력 -i
대소문자 구분 없이 검색 -l 결과를 출력할 때 지정한 패턴이 있는 파일의 이름만을 출력 -n 출력할 때 찾은 라인의 앞에 파일 내에서의 행번호를 붙인다 -v 지정한 패턴이 없는 행들만 출력 grep 명령어 옵션
30
그 밖의 유닉스 명령어 텍스트 파일 정렬 : sort 명령어 파일에서 알파벳이나 상수로 구성된 내용을 정렬할 때 사용
실행 결과는 기본적인 값에 의해 자동으로 화면에 출력되며, 인자 또는 재지정을 통해 새로운 파일로 생성할 수 있다 기본적으로 각 라인별로 정렬
31
그 밖의 유닉스 명령어 텍스트 파일 정렬 : sort 명령어 명령어 옵션 옵션 기능 -b
필드를 비교하는 경우, 공백으로 시작되는 필드를 무시 -d 사전식 순서에 따라 정렬, 구두 문자와 제어문자는 무시 -f 대소문자 구별을 하지 않음 -n 산술적인 값에 따라 정렬 -o 출력을 표준 출력 장치 대신에 지정한 파일로 변경 -r 지정한 순서와 반대의 순서로 출력 sort 명령어 옵션
32
구동 파일 시스템 프로파일 시스템 프로파일(System Profile) /etc/profile에 위치
프로파일의 실행은 쉘이 수행하는 첫번째 과정 로그인 메시지, 시스템의 전반적인 환경 변수를 구성하는 명령을 포함 시스템 관리자에 의해서 생성되고 관리
33
구동 파일 사용자 프로파일 사용자 프로파일(User Profile) 사용자가 로그인할 때마다 구동하는 파일
사용자가 실행하는 쉘 환경 변수를 구성하는 명령을 포함
34
ksh와 bash 쉘 변수 ksh와 bash는 표준 쉘(sh)에서 사용한 많은 동일 변수를 사용 중요 변수 ENV
환경 파일의 절대 경로명을 포함 ENV=$HOME/mine/my_env HISTSIZE History 목록 파일에서 유지하고자 하는 명령어를 지정하는 변수 기본크기는 128 HISTSIZE=100 TMOUT 명령어를 입력하지 않을 경우 일정한 시간이 되기 전까지 시스템이 기다리는 시간 지정시간내에 명령어를 입력하지 않을 경우 자동 로그오프 TMOUT=60 VISUAL 명령어를 편집할 때 사용하는 변수 VISUAL=vi
35
ksh와 bash 쉘 옵션 옵션을 이름으로 설정하여 기능을 설정하거나 해제 가능 set – 옵션명 중요 쉘 옵션
noclobber 사용자의 파일이 변경되는 것을 예방 ex : set –o noclobber [Enter] ignoreeof 사용자가 실수로 [Ctrl-d]를 눌러서 로그오프 하는 현상을 예방 ex : set –o ignoreeof [Enter]
36
ksh와 bash 명령어 라인 편집 사용자가 명령어 라인을 편집하거나, 편집하지 못하도록 한번에 한 라인만 편집할 수 있는 vi 편집기의 특수한 라인 버전을 사용하여 history 파일에 있는 명령어를 편집 가능 명령어 라인 편집 옵션 설정하기 set 명령어를 이용하여 명령어 라인 편집 옵션을 설정하거나 관리 ex : set –o vi [Enter] EDITOR=/usr/bin/vi [Enter] VISUAL=/usr/bin/vi [Enter] vi 스타일 명령어 라인 편집기 사용 방법 ksh 명령어 라인 편집기는 현재 명령어 라인과 history 파일을 편집할 수 있음 초기 실행은 vi 입력 모드 키 조작 [Enter] : 현재의 명령어 라인을 실행 [Esc] : 입력 모드에서 해당 키를 누르면 명령어 모드가 실행
37
ksh와 bash 명령어 라인 편집 옵션 기능 h와 l 명령어 라인에서 커서를 한 문자 왼쪽과 오른쪽으로 이동 k와 j
History 목록에 있는 한 엔트리씩 위쪽과 아래쪽으로 이동 b와 w 명령어 라인에서 커서를 왼쪽과 오른쪽으로 한 단어씩 이동 $ 커서를 라인의 마지막 문자로 이동 x 현재 문자를 삭제 xw 현재 단어를 삭제 I와 i 텍스트를 삽입 A와 a 텍스트를 추가 R과 r 텍스트를 교체 편집기 명령어들
38
ksh와 bash 별칭(alias) 명령어 명령어들의 히스토리 : history 명령어 별칭(alias) 별칭의 해제
자주 사용하는 명령어 중 긴 이름을 가진 명령어를 짧게 줄인다거나, 명령어의 이름을 바꾸어서 명령어를 기억하기 쉽도록 할 수 있는 기능 제공 ex : alias del=rm [Enter] alias rm= rm –r 별칭의 해제 unalias 명령어를 사용 명령어들의 히스토리 : history 명령어 히스토리(history) 쉘이 세션을 유지하는 동안 사용한 모든 명령어들의 목록을 저장하기 위한 기능을 제공 history 명령어는 history 목록에서 동작하는 유틸리티 중의 하나 ksh에 대한 기본 히스토리 파일은 .sh_history, bash에 대한 기본 히스토리 파일은 .bash_history라고 부름 히스토리 파일은 시스템에 의해 사용자의 홈 디렉토리에 생성 ex : history [Enter]
39
ksh와 bash 명령어 재실행(ksh) : r(redo) 명령어 명령어 history 목록 : fc 명령어
지정한 번호를 통해 히스토리 파일에 잇는 명령어를 재실행 명령어 history 목록 : fc 명령어 이전에 명령어 히스토리 목록에 저장된 명령어의 목록, 편집, 재실행을 제공
40
ksh와 bash 명령어 history 목록 : fc 명령어 fc 옵션 fc 별칭 만들기
이전 명령어에 대한 편집, 재실행을 가능하게 하는 많은 옵션을 포함 fc 별칭 만들기 fc 명령어에 대한 별칭을 생성 ex : alias r=‘fc –e –’ [Enter] alias history=‘fc –l’ [Enter] 옵션 기능 -l 명령어 번호 순서로 명령어 목록을 보여줌 -n -l로 명령어의 목록을 보여줄 때 명령어 번호를 보여주지 않음 -r -l로 명령어의 목록을 역순으로 보여줌 -s 편집기를 실행하지 않고 명령어를 실행 grep 명령어 옵션
41
ksh와 bash 로그인과 구동 sh와 마찬가지로 .profile을 읽어 관련 정보를 출력
.profile에서 ksh 또는 bash 환경 파일들을 읽어 쉘 환경을 설정
42
ksh와 bash 프롬프트에 이벤트 번호 추가하기 프롬프트 변수(bash) 설정하기
이벤트 번호를 통하여 쉘 프롬프트를 변경할 수 있음 ex : PS1=“!$” [Enter] PS1=“[!]$” [Enter] 프롬프트 변수(bash) 설정하기 특수 문자 코드를 이용하여 쉘 프롬프트를 변경 ex : PS1=“[\!]$” [Enter] 문자 의미 \! 현재 명령어의 history 번호를 출력 \$ 사용자 디렉토리가 루트가 아니면 프롬프트에 $를 출력, 루트면 #를 출력 \d 현재 날짜를 출력 \s 실행하고 있는 쉘의 이름을 출력 \t 현재 시간을 출력 grep 명령어 옵션
43
UNIX 프로세스 관리 프로세스(Process) 실행중인 프로그램 유닉스 측면에서 프로그램이 실행을 위해 메모리에 적재된 상태
프로세스 테이블 프로세스의 상태 및 정보를 유지 관리하기 위한 목적의 테이블 포함 정보 프로세스 번호 프로세스 상태 준비/대기 대기를 위한 프로세스의 이벤트 번호 시스템 데이터 영역 주소 프로세스의 생성 fork 시스템 루틴을 호출함으로써 생성 실행중인 프로세스가 fork를 호출할 경우 동일한 프로세스 사본을 생성 부모 프로세스 : fork 루틴을 호출한 프로세스 자식 프로세스 : 복사한 프로세스 부모와 자식 프로세스가 다른 PID를 가짐
44
UNIX 프로세스 관리 프로세스 생성 및 관리 과정 부모 프로세스가 fork를 호출하고 프로세스 실행
부로 프로세스는 자식의 PID를 넘겨 받고, 자식 프로세스는 복귀 코드를 획득 부모 프로세스가 자식의 PID를 수신하면, wait 시스템 호출을 생성하고, sleep 상태에 들어가 자식 프로세스가 종료될 때까지 대기 자식 프로세스가 제어를 얻은 다음 작업 수행 자식 프로세스가 복귀 코드를 점검, 0인 경우 exec 시스템 호출 자식 프로세스가 실행을 마칠 경우 exit 시스템 호출을 생성하고, 자식 프로세스가 종료됨 프로세스 수행의 심화 과정 교재 317, 318 그림 참조
45
요약 유닉스에서의 쉘의 역활 쉘 변수의 정의와 기능 유닉스 명령어의 활용 쉘 구동 파일에 대한 이해
ksh와 bash, sh의 공통점 및 차이점 ksh와 bash의 활용 유닉스에서의 프로세스 관리 절차
46
질의 및 응답
47
실습
Similar presentations