470 likes | 713 Views
UNIX Unbounded A Beginning Approach. 이 성 현 Home : nimilx2.hannam.ac.kr E-mail : shlee@netwk.hannam.ac.kr Tel : +82-42-629-7559. 목차. 유닉스 쉘 쉘 변수 그 밖의 메타 문자들 그 밖의 유닉스 명령어 구동 파일 ksh 와 bash 유닉스 프로세스 관리 요약 질의 및 응답 실습. 유닉스 쉘. 개요 유닉스 쉘이란 ? 사용자와 순수 유닉스 운영체제 사이를 연결하는 프로그램
E N D
UNIX UnboundedA Beginning Approach 이 성 현 Home : nimilx2.hannam.ac.kr E-mail : shlee@netwk.hannam.ac.kr Tel : +82-42-629-7559
목차 • 유닉스 쉘 • 쉘 변수 • 그 밖의 메타 문자들 • 그 밖의 유닉스 명령어 • 구동 파일 • ksh와 bash • 유닉스 프로세스 관리 • 요약 • 질의 및 응답 • 실습
유닉스 쉘 • 개요 • 유닉스 쉘이란? • 사용자와 순수 유닉스 운영체제 사이를 연결하는 프로그램 • 프로그램의 실행시 사용자는 쉘을 통하여 운영체제와 통신하게 되고, 하드웨어-의존 기능들은 커널에서 관리 • 쉘은 자체가 프로그램, 즉 유틸리티 프로그램 • 사용자가 시스템에 로그인할 때마다 메모리에 적재 • 사용자가 입력한 각 명령어를 검사하고 해당 유닉스 프로그램에 요청한 작업을 수행 • 유닉스 쉘의 종류 • Bourne Shell • Korn Shell • C Shell
유닉스 쉘 • 쉘 시작하기 • 쉘의 생명 주기 • 사용자가 시스템에 성공적으로 로그인한 후에 시작되고 사용자가 로그아웃할 때까지 유지 • 시스템의 각 사용자는 기본 쉘을 가지고 있음 • 시스템의 패스워드 파일에 기술 • etc/passwd • 사용자가 로그인 할 때, 시스템은 시작할 쉘을 패스워드 파일에서 찾아 결정 쉘과 쉘 프로그램 이름
유닉스 쉘 • 쉘 시작하기 • 사용자 쉘 확인 • /etc/passwd 파일의 확인
유닉스 쉘 • 쉘 시작하기 • 내장된 쉘 명령어 • 쉘 명령어 해석기는 명령어와 같이 쉘에 의해 기계어로 번역된 특별한 내부 기능을 가지고 있음 • 쉘의 한 부분으로 내부적으로 인식되고 수행됨 • 내장 명령어의 대부분이 쉘에서 구현되고 특정 쉘에 유일한 형태로 존재 내장된 쉘 명령어
유닉스 쉘 • 쉘 시작하기 • 내장된 쉘 명령어 확인 • $ man shell_builtins [Enter]
유닉스 쉘 • 쉘의 주요 기능 이해하기 • 표준 유닉스 쉘은 200개 이상의 유틸리티 프로그램을 소유 • 쉘 자신의 예 : sh • 대부분 유닉스 시스템에서 가장 많이 사용하는 유틸리티 프로그램 • 정교하게 작성된 프로그램으로 사용자와 유닉스 시스템간의 대화를 관리 • 쉘은 실행 가능한 정규형 C/C++ 프로그램 • /bin 디렉토리에 저장 • 쉘의 기능 • 명령어 실행 • 쉘의 주요 기능으로 프롬프트에서 입력한 모든 것을 기계어로 번역 • 명령어 분석 후 적합한 프로그램 수행 • 파일명 치환 • 파일명 치환이 명령어에 지정되면 쉘은 먼저 치환을 수행한 다음 프로그램을 시랳ㅇ • 입/출력 재지정 • 프로그램 실행 전에 재지정이 구성 • 입/출력 재지정이 일어날 경우 쉘은 파일을 열고, 각 프로그램의 표준 입력이나 표준 출력에 파일을 연결
유닉스 쉘 • 쉘의 주요 기능 이해하기 • 쉘의 기능 • 파이프 • 파이프 라인(pipeline)라고 불리며 간단한 프로그램을 사용하여 보다 복잡한 작업을 수행하도록 도와줌 • 환경 제어 • 사용자에게 적합한 환경을 제공 • 적절한 변수 구성을 통하여 홈 디렉토리, 프롬프트 출력, 작업 환경을 구성 • 백그라운드 프로세싱 • 현재 쉘에서 다른 작업을 수행하는 동안 독립적으로 백그라운드에서 프로그램을 실행 • 작업 수행 시간을 도와 주는 비대화식 프로그램 • 쉘 스크립트 • 쉘 스크립트(shell script)는 여러 가지 쉘 명령어들을 포함하고 있는 파일 • 파일의 이름은 나중에 저장된 프로그램을 실행하기 위해 사용되며, 단일 명령어를 이용하여 지정된 명령어들을 수행하도록 함
유닉스 쉘 • 정보의 출력 : echo 명령어 • Echo 명령어 • 메시지를 출력하기 위한 명령어 • 표준 출력 장치인 터미널에 전달 받은 인자를 출력 • 인자가 없을 경우, 빈 라인을 출력하고 기본적으로 출력의 마지막에 새로운 명령을 받을 수 있도록 프롬프트를 추가 echo 명령어 옵션
유닉스 쉘 • 정보의 출력 : echo 명령어 • 이스케이프 문자 • 문자열에 추가하여 메시지의 형식을 조절할 수 있는 문자 • 문자 앞에 ‘\’를 입력, 원하는 출력을 제공하도록 쉘에 의해서 해석 이스케이프 문자
유닉스 쉘 • 메타문자의 특별한 의미 제거 • 쉘 메타문자는 쉘에서 특별한 의미를 가짐 • 인용(quoting) 또는 이스케이핑(escaping) • 메타문자의 특별한 의미를 제거하는 과정 • 인용문자의 구성 • 백 슬래쉬 \ • 큰 따옴표 “ • 작은 따옴표 ‘ 인용문자
쉘 변수 • 쉘 변수 • 쉘 프로그램 • 명령어 해석기처럼 사용자 인터페이스와 작업을 관리 • 명령 파일, 파일 수정과 같이 요청한 작업을 수행하는데 적합한 쉘을 제공하고, 사용자의 홈 디렉토리, 터미널 유형, 프롬프트 표시와 같이 확실한 정보와 정보에 대한 경로를 탐색하기 위해 필요 • 쉘 변수에 정보를 저장 • 쉘 변수는 환경을 최적화하거나 관리하기 위한 특별한 값으로 구성된 아이템 • 환경 변수(environment variable)와 지역 변수(local variable)의 두 가지 형태가 존재 • 환경 변수 • 표준 변수(standard variable) • 시스템이 알고 있는 이름을 가지고 있다 • 시스템이 요구하는 필수적인 요소에 대한 기록을 탐색하는데 사용 • 관리자에 의해서 정의 • ex : TERM=ansi • 지역 변수 • 사용자 정의 변수 • 사용자가 원하는 대로 정의하고 바꿀 수 있으며, 삭제가 가능
쉘 변수 • 변수 출력과 제거 : set과 unset 명령어 • set 명령어 • 현재 사용하고 있는 쉘이 어떤 변수들로 구성되어 있는지 알고 싶은 경우 사용하는 명령어
쉘 변수 • 변수 출력과 제거 : set과 unset 명령어 • unset 명령어 • 원하지 않는 변수를 삭제 • ex : unset ERRON [Enter]
쉘 변수 • 변수의 값 할당 • 변수 값 할당 • 사용자는 자신의 변수들을 생성할 수 있으며, 표준 변수에 할당된 값을 수정할 수 있음 • ex : age=32 [Enter] • ex : SYSTEM=UNIX [Enter] • 쉘 변수의 값 출력 • 쉘 변수 출력 • 쉘 변수에 저장된 값에 접근하기 위해서는 반드시 변수의 이름 앞에 $ 표시를 사용 • echo 명령어를 사용하여 쉘 변수에 지정된 값을 출력 • ex : age=32 echo $age $32
쉘 변수 • 표준 쉘 변수에 대한 이해 • 표준 쉘 변수 • 표준 쉘 변수에 할당된 값들은 보통 시스템 관리자에 의해 구성 • 사용자에 의해 변경된 변수의 값은 임시적인 형태를 지니고 있으며, 현재의 세션에만 적용 • 표준 쉘 변수의 경우 .profile 파일의 변수 값을 변경 • 표준 쉘 변수의 이해 • HOME • 사용자 홈 디렉토리에 대한 완전한 경로명을 할당 • cd 명령어의 경우 홈 디렉토리에 대한 경로명을 정의하기 위해 HOME 변수를 검사한 다음, 사용자 홈 디렉토리에 대한 시스템을 변경 • IFS • 내부 필드 구분자(Internal Field Separator) 변수는 명령 라인 요소의 구분자처럼, 쉘에 의해 처리되는 문자의 목록으로 구성 • MAIL • 수신한 메일의 파일명을 구성 • 메일을 수신할 경우 해당 파일에 저장 • 정기적으로 파일의 내용을 검사한 후에 메일 수신 여부를 알려줌
쉘 변수 • 표준 쉘 변수에 대한 이해 • 표준 쉘 변수의 이해 • MAILCHECK • MAIL 변수로 구성된 파일에서, 메일의 수신에 대한 검사 주기를 설정 • PATH • 디렉토리 구조에서 쉘이 명령어의 위치를 탐색하기 위한 디렉토리명으로 구성 • 경로 문자열에 나와 있는 디렉토리는 콜론으로 구성 • PS1 • 프롬프트 문자열 1(Prompt String 1; PS1) 변수는 프롬프트 표시에 사용되는 문자열을 구성 • PS2 • 프롬프트 문자열 2 변수는 쉘이 명령의 나머지 부분을 기다리고 있거나, 명령 라인의 완선 전에 [Enter]키를 눌렀을 때 출력되는 프롬프트로 구성 • CDPATH • 완젼한 경로면의 목록으로 구성되며, PATH와 유사 • cd 명령어의 연산에 영향을 미침 • SHELL • 사용자의 로그인 쉘에 대한 완전한 경로명을 구성
쉘 변수 • 표준 쉘 변수에 대한 이해 • 표준 쉘 변수의 이해 • TERM • 사용자 터미널 유형을 구성 • TZ • 사용자의 타임 존을 구성
그 밖의 메타문자들 • 명령어의 수행 : 단일 역인용부호(‘) 사용법 • 포함된 명령어를 함께 수행하거나 명령 라인의 동일한 위치에서 명령어의 출력에 삽입하라고 쉘에게 요청 • 명령어 치환이라고 부름 • 형식 : ‘command’ • 명령어의 순차적 실행 : 세미콜론(;) 이용 • 세미콜론으로 분리된 일련의 명령을 입력 • 쉘이 순차적으로 수행 • 명령어의 그룹화 : 괄호 () 이용 • ()안에 일련의 명령어를 입력하여, 명령어를 그룹화 • 마치 하나의 명령어처럼 재지정 가능
그 밖의 메타문자들 • 백그라운드 프로세싱 : 앰퍼샌드(&) 이용 • 다중 작업의 경우 이전 수행되는 명령의 수행이 종료되기를 기다리지 않도록 명령의 처리를 백그라운드로 돌림
그 밖의 메타문자들 • 명령어 연결 : 파이프 연산자(|) 이용 • 쉘은 하나의 프로세스 표준 출력은 다른 프로세스 표준 입력에 사용할 수 있는 기능을 제공 • 명령어 사이에 파이프를 사용함으로써 기능 사용 • 형식 : command | command
그 밖의 유닉스 명령어 • 시간 대기 : sleep 명령어 • 지정한 시간동안 대기하도록 프로세스를 실행 • 지정한 시간만큼 수행한 프로세스가 대기 후 실행 결과를 출력 • PID 출력 : ps 명령어 • 시스템에 있는 실행 중인 프로세스의 상태를 알기 위해 사용 • 사용자의 실행 중인 프로세스에 대한 정보를 출력 • PID : 프로세스 ID • TTY : 프로세스를 조정하는 터미널 번호 • TIME : 프로세스가 소비한 시간(초 단위) • COMMAND : 명령어의 이름 ps 명령어 옵션
그 밖의 유닉스 명령어 • PID 출력 : ps 명령어 • 옵션의 사용
그 밖의 유닉스 명령어 • 지속적인 실행 : nohup 명령어 • 사용자가 로그아웃할 경우 백그라운드 프로세스가 종료 • nohup 명령어를 이용하여 백그라운드 프로세스가 종료 시그널에서 제외되록 함 • nohup 명령어를 로그아웃을 한 후에도 프로그램을 지속적으로 처리하고자 할 때 사용 • 프로그램 종료 : kill 명령어 • 정상적으로 동작하지 않는 프로세스를 종료 시키기 위해 사용 • 사용자가 동작한 프로세스만 종료 가능
그 밖의 유닉스 명령어 • 프로그램 종료 : kill 명령어 • 시그널 목록 • kill 명령을 통하여 내릴 수 있는 신호 목록을 표시
그 밖의 유닉스 명령어 • 출력의 분배 : tee 명령어 • 보통 파이프 연산자와 함께 사용되며, 출력을 다른 장치에 전송할 수 있음 • Ex : ls –C | tee dir.list
그 밖의 유닉스 명령어 • 출력의 분배 : tee 명령어 • tee 명령어 옵션 • 파일 탐색 : grep 명령어 • 지정한 패턴을 가지는 파일이나 파일의 목록을 탐색하기 위해 사용 • grep 명령어에 사용하는 패턴을 정규식이라고 부름 • 사용 예 • grep UNIX myfile tee 명령어 옵션
그 밖의 유닉스 명령어 • 파일 탐색 : grep 명령어 • 명령어 옵션 grep 명령어 옵션
그 밖의 유닉스 명령어 • 텍스트 파일 정렬 : sort 명령어 • 파일에서 알파벳이나 상수로 구성된 내용을 정렬할 때 사용 • 실행 결과는 기본적인 값에 의해 자동으로 화면에 출력되며, 인자 또는 재지정을 통해 새로운 파일로 생성할 수 있다 • 기본적으로 각 라인별로 정렬
그 밖의 유닉스 명령어 • 텍스트 파일 정렬 : sort 명령어 • 명령어 옵션 sort 명령어 옵션
구동 파일 • 시스템 프로파일 • 시스템 프로파일(System Profile) • /etc/profile에 위치 • 프로파일의 실행은 쉘이 수행하는 첫번째 과정 • 로그인 메시지, 시스템의 전반적인 환경 변수를 구성하는 명령을 포함 • 시스템 관리자에 의해서 생성되고 관리
구동 파일 • 사용자 프로파일 • 사용자 프로파일(User Profile) • 사용자가 로그인할 때마다 구동하는 파일 • 사용자가 실행하는 쉘 환경 변수를 구성하는 명령을 포함
ksh와 bash • 쉘 변수 • ksh와 bash는 표준 쉘(sh)에서 사용한 많은 동일 변수를 사용 • 중요 변수 • ENV • 환경 파일의 절대 경로명을 포함 • ENV=$HOME/mine/my_env • HISTSIZE • History 목록 파일에서 유지하고자 하는 명령어를 지정하는 변수 • 기본크기는 128 • HISTSIZE=100 • TMOUT • 명령어를 입력하지 않을 경우 일정한 시간이 되기 전까지 시스템이 기다리는 시간 • 지정시간내에 명령어를 입력하지 않을 경우 자동 로그오프 • TMOUT=60 • VISUAL • 명령어를 편집할 때 사용하는 변수 • VISUAL=vi
ksh와 bash • 쉘 옵션 • 옵션을 이름으로 설정하여 기능을 설정하거나 해제 가능 • set –옵션명 • 중요 쉘 옵션 • noclobber • 사용자의 파일이 변경되는 것을 예방 • ex : set –o noclobber [Enter] • ignoreeof • 사용자가 실수로 [Ctrl-d]를 눌러서 로그오프 하는 현상을 예방 • ex : set –o ignoreeof [Enter]
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] : 입력 모드에서 해당 키를 누르면 명령어 모드가 실행
ksh와 bash • 명령어 라인 편집 편집기 명령어들
ksh와 bash • 별칭(alias) 명령어 • 별칭(alias) • 자주 사용하는 명령어 중 긴 이름을 가진 명령어를 짧게 줄인다거나, 명령어의 이름을 바꾸어서 명령어를 기억하기 쉽도록 할 수 있는 기능 제공 • ex : alias del=rm [Enter] alias rm= rm –r • 별칭의 해제 • unalias 명령어를 사용 • 명령어들의 히스토리 : history 명령어 • 히스토리(history) • 쉘이 세션을 유지하는 동안 사용한 모든 명령어들의 목록을 저장하기 위한 기능을 제공 • history 명령어는 history 목록에서 동작하는 유틸리티 중의 하나 • ksh에 대한 기본 히스토리 파일은 .sh_history, bash에 대한 기본 히스토리 파일은 .bash_history라고 부름 • 히스토리 파일은 시스템에 의해 사용자의 홈 디렉토리에 생성 • ex : history [Enter]
ksh와 bash • 명령어 재실행(ksh) : r(redo) 명령어 • r 명령어를 통해 이전에 실행하였던 명령어들을 재실행 가능 • 지정한 번호를 통해 히스토리 파일에 잇는 명령어를 재실행 • 명령어 history 목록 : fc 명령어 • 이전에 명령어 히스토리 목록에 저장된 명령어의 목록, 편집, 재실행을 제공
ksh와 bash • 명령어 history 목록 : fc 명령어 • fc 옵션 • 이전 명령어에 대한 편집, 재실행을 가능하게 하는 많은 옵션을 포함 • fc 별칭 만들기 • fc 명령어에 대한 별칭을 생성 • ex : alias r=‘fc –e –’ [Enter] alias history=‘fc –l’ [Enter] grep 명령어 옵션
ksh와 bash • 로그인과 구동 • sh와 마찬가지로 .profile을 읽어 관련 정보를 출력 • .profile에서 ksh 또는 bash 환경 파일들을 읽어 쉘 환경을 설정
ksh와 bash • 프롬프트에 이벤트 번호 추가하기 • 이벤트 번호를 통하여 쉘 프롬프트를 변경할 수 있음 • ex : PS1=“!$” [Enter] PS1=“[!]$” [Enter] • 프롬프트 변수(bash) 설정하기 • 특수 문자 코드를 이용하여 쉘 프롬프트를 변경 • ex : PS1=“[\!]$” [Enter] grep 명령어 옵션
UNIX 프로세스 관리 • 프로세스(Process) • 실행중인 프로그램 • 유닉스 측면에서 프로그램이 실행을 위해 메모리에 적재된 상태 • 프로세스 테이블 • 프로세스의 상태 및 정보를 유지 관리하기 위한 목적의 테이블 • 포함 정보 • 프로세스 번호 • 프로세스 상태 준비/대기 • 대기를 위한 프로세스의 이벤트 번호 • 시스템 데이터 영역 주소 • 프로세스의 생성 • fork 시스템 루틴을 호출함으로써 생성 • 실행중인 프로세스가 fork를 호출할 경우 동일한 프로세스 사본을 생성 • 부모 프로세스 : fork 루틴을 호출한 프로세스 • 자식 프로세스 : 복사한 프로세스 • 부모와 자식 프로세스가 다른 PID를 가짐
UNIX 프로세스 관리 • 프로세스 생성 및 관리 과정 • 부모 프로세스가 fork를 호출하고 프로세스 실행 • fork가 프로세스를 복제하고 부모 프로세스에게 제어를 반환 • 부로 프로세스는 자식의 PID를 넘겨 받고, 자식 프로세스는 복귀 코드를 획득 • 부모 프로세스가 자식의 PID를 수신하면, wait 시스템 호출을 생성하고, sleep 상태에 들어가 자식 프로세스가 종료될 때까지 대기 • 자식 프로세스가 제어를 얻은 다음 작업 수행 • 자식 프로세스가 복귀 코드를 점검, 0인 경우 exec 시스템 호출 • 자식 프로세스가 실행을 마칠 경우 exit 시스템 호출을 생성하고, 자식 프로세스가 종료됨 • 프로세스 수행의 심화 과정 • 교재 317, 318 그림 참조
요약 • 유닉스에서의 쉘의 역활 • 쉘 변수의 정의와 기능 • 유닉스 명령어의 활용 • 쉘 구동 파일에 대한 이해 • ksh와 bash, sh의 공통점 및 차이점 • ksh와 bash의 활용 • 유닉스에서의 프로세스 관리 절차