1 / 77

Shell Part 1

Shell Part 1. http://rainbow.sunmoon.ac.kr/~yypark http://ubilab.sunmoon.ac.kr. Shell 기초. 쉘. 출력. 유닉스 운영체제. 입력. What is Shell?. 유닉스 운영체제의 사용자 인터페이스 사용자가 입력한 명령을 운영체제가 이해할 수 있는 명령으로 바꾸고 운영체제가 처리한 결과를 사용자에게 돌려주는 일종의 프로그램. 쉘 역사. bash shell. bash(GNU Bourne-Again Shell)

caine
Download Presentation

Shell Part 1

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. Shell Part 1 http://rainbow.sunmoon.ac.kr/~yypark http://ubilab.sunmoon.ac.kr

  2. Shell기초

  3. 출력 유닉스 운영체제 입력 What is Shell? • 유닉스 운영체제의 사용자 인터페이스 • 사용자가 입력한 명령을 운영체제가 이해할 수 있는 명령으로 바꾸고 운영체제가 처리한 결과를 사용자에게 돌려주는 일종의 프로그램 3

  4. 쉘 역사 4

  5. bash shell • bash(GNU Bourne-Again Shell) • 리눅스에서 /bin/sh로 항상 설치되는 표준 쉘 • GNU 도구모음의 일원 • 소스코드가 공개되어 있고 거의 모든 유닉스 변형에 이식 가능 • GNU 웹사이트 http://www.gnu.org에서 무료로 다운로드받을 수 있음 5

  6. bash 버전 확인 6

  7. 사용자에 따른 쉘 설정하기 • 각 리눅스 사용자 계정에 따라, 사용할 쉘을 설정해 줄 수 있다 7

  8. Bash Shell환경

  9. 사용자 로그인 /etc/profile 을 읽어들임 .bash_profile 파일을 실행(source)시킴 초기화 파일 • 배시 쉘은 여러 가지 초기화 파일들을 ‘source’ 명령어를 사용하여 현재 쉘에 적용. 해당 파일에 설정된 모든 변수들이 현재 쉘의 일부가 됨(자식 쉘이 생성되지 않음) • /etc/profile • 사용자가 로그인할 때, 쉘 프롬프트가 나타나기 전에 시스템 전체에 적용되는 초기화 파일 • .bash_profile • 사용자의 홈 디렉토리에 위치 (ex: /root/.bash_profile) • 별명, 함수, 환경변수 및 시작 스크립트 등을 설정하거나 정의함 9

  10. /etc/profile ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc /etc/profile 파일 • 사용자가 로그인할 때, 시스템 전체적으로 공통된 초기화를 위해 관리자가 설정하는 파일 • 배시 쉘이 시작할 때 실행되며, 시스템 상의 모든 본 쉘과 콘 쉘 사용자들에게 적용됨 • 주로 새로 도착한 메일의 확인이나, 오늘의 메시지(message of the day) 출력 등과 같은 작업을 수행 10

  11. ~/.bash_profile 파일 • /etc/profile 다음에 읽어들이는 파일 • ~/.bash_profile 파일을 수정한 후 적용하려면 다음과 같이 ‘source’명령어를 사용하여 적용하거나 로그아웃한 다음 다시 로그인 한다 • #source .bash_profile • 홈디렉토리에 ~/.bash_profile이 없으면 쉘은 ~/.bash_login을 찾고 이 파일도 없으면 ~/.profile을 찾는다(배시 쉘은 이들 세 파일들 중에서 하나만 처리함) 11

  12. ~/.bash_profile 파일 예 12

  13. ~/.bashrc 파일 • BASH_ENV(ENV) 변수에는 관례상 이름인 .bashrc 파일의 이름이 지정됨 • 새로운 배시 쉘이나 대화형 배시 쉘 또는 배시 스크립트가 시작할 때마다 이 파일이 실행됨 • 배시 쉘에만 적용되는 특별한 설정사항이 들어있음 13

  14. /etc/bashrc 파일 • 시스템 전체에 적용되는 함수와 별명들은 /etc/bashrc 파일에서 설정할 수 있음 (주 프롬프트는 보통 이 파일에서 설정) 14

  15. ~/.bash_logout 파일 • 로그아웃할때 ~/.bash_logout 파일이 존재하면 이 파일을 실행 • 임시파일을 비우는 명령어, 히스토리 파일을 정리하는 명령어, 로그아웃 시간을 기록하는 명령어 등이 있음 15

  16. Shell명령행

  17. 명령행 • 공백(스페이스, 탭)으로 구분되는 하나 이상의 단어(혹은 token)로 시작하여 개행문자(\n)로 끝남 • 첫번째 단어를 명령어로 인식, 뒤이어 나오는 단어들은 인자로 취급 • 명령어 : ls나 pwd, 또는 cd나 test등의 내부 명령어, 쉘 스크립트 등과 같이 실행 가능한 프로그램. 메타문자와 같은 특수문자도 포함 17

  18. 명령어 처리 순서 • 명령어는 키워드, 내장명령어, 함수, 스크립트, 실행 가능한 프로그램 등이다 • 처리순서 • 1)키워드 (if, while, until 등) • 2)별명 (typeset –f 참고) • 3)내장 명령어 • 4)함수 • 5)스크립트와 실행 가능한 프로그램 18

  19. 내장 명령어와 help 명령어 • 내장명령어 • 쉘 내부 코드의 일부 • 쉘이 실행중이면 언제든지 사용가능 • 명령어 help는 자체 내장 명령어임 19

  20. 명령행 처리 순서의 변경 • 명령어 ‘command’ • 쉘이 명령행 처리 순서에 따라 별명과 함수를 우선적으로 찾아보는 것을 막아줌 • 명령어 ‘builtin’ • 단지 내장 명령어만 실행시킴. 함수나 검색경로 상의 프로그램들은 무시함 • 명령어 ‘enable’ • 내장 명령어들의 사용 여부를 설정 • 내장 명령어의 사용을 해체하려면 –n 옵션을 사용 20

  21. 종료 상태 • 명령어나 프로그램의 수행이 끝날 때 부모 프로세스에 종료 상태를 되돌림 • 0부터 255 사이의 정수로 표현 • 0이외의 상태는 명령어의 수행이 실패했음을 뜻함 • 명령어를 찾지 못할 경우 => 127의 상태 반환 • 치명적인 시그널로 인한 종료 => 128에 그 시그널의 값을 더하여 반환 • 변수 ‘?’ => 마지막에 수행된 종료상태가 저장됨 21

  22. 명령행에서 여러 명령어 사용 • 명령행 한 줄에 여러 개의 명령어를 사용할 수 있음 • 각 명령어들은 세미콜론(;)으로 구분 • 해당 명령행을 종료할 때는 개행문자를 입력함 22

  23. # 첫번째 명령어가 성공적으로 실행되면(종료상태값: 0) && 다음의 명령어도 실행된다. #gcc 프로그램이 program.c를 성공적으로 컴파일하면 이때 생성된 program 실행파일을 실행하게 된다 명령어 그룹화 • 명령어들을 그룹으로 묶어서 실행한후, 결과를 파이프나 리다이렉션에 사용할 수 있다 23

  24. #편집기인 gedit를 백그라운드로 실행한다 #실행중인 gedit 프로세스를 종료한다 백그라운드에서 실행 • 포그라운드(foreground) • 일반적으로 사용자의 명령어가 실행 • 명령어의 실행이 끝날때 까지 프롬프트가 나타나지 않음 • 항상 명령어의 종료를 기다려야 함 • 백그라운드(background) • 앰퍼센드(&)기호를 명령어의 마지막에 추가하면 쉘은 쉘 프롬프트를 즉시 나타내고 명령어를 백그라운드에서 동시에 실행시킬 수 있음 • 다른 명령어를 수행시키기 위해 이전 명령어의 종료를 기다릴 필요가 없음 • 변수 ‘!’는 마지막으로 백그라운드에서 수행되었던 작업의 PID번호를 저장하고 있음 24

  25. 작업 제어 • 배시 쉘이 제공하는 작업 제어(job control) 기능은 사용자가 작업의 실행 환경을 포그라운드 혹은 백그라운드 중에서 임의로 지정할 수 있게 해줌 • 실행 중인 프로그램을 프로세스(process) 혹은 작업(job)이라고 부르며, 각 프로세스는 프로세스 ID 번호(PID)를 갖게 됨 25

  26. # vi 편집기를 실행한 상태에서 ^Z 키를 누르면 편집기의 실행이 백그라운드 상태에서 중지됨. Stopped라는 메시지가 출력되고 쉘 프롬프트가 즉시 나타남 # sleep 명령어를 백그라운드에서 실행. [2]는 이 명령어가 백그라운드에서 두번째로 실행되는 작업임을 나타냄. PID는 7328이다. # jobs 명령어는 현재 백그라운드에서 실행중인 작업들을 보여줌 # jobs –l 명령어는 백그라운드 실행중인 작업의 PID번호를 함께 보여줌 # %% 인자는 가장 최근에 실행한 명령어를 표시하도록 한다 # fg 명령어를 사용하여 해당번호의 작업을 포그라운드로 가져옴. (Vi 편집기가 실행되면 다시 ^Z키를 누른다) # -x 옵션으로 작업의 PID번호만 출력함. %1은 1번에서 중단된 vi 세션 # kill 명령어는 TERM 시그널을 해당 프로세스에 보내 종료시킴 %1이므로 vi 프로그램이 종료됨 작업 제어 예제 26

  27. 히스토리(history) • 쉘에서 제공하는 히스토리 기능을 사용하여 명령행에서 입력한 명령어들을 지정한 개수만큼 보관함 • 로그인 후 사용자가 입력한 명령어들은 쉘 메모리의 히스토리 목록에 저장 • 로그아웃 할때 히스토리 파일에 덧붙이게 됨 • 한번 사용했던 명령어들은 히스토리 목록에서 불러와 재실행시킬 수 있음 27

  28. 내장명령어 history • 히스토리 파일의 기본 이름 => .bash_history • 내장명령어 history는 히스토리 목록의 항목을 일련번호(event number)와 함께 출력 28

  29. fc 명령어(1) • 명령어 fc –l 을 사용하여 히스토리 목록을 출력하거나 편집할 수 있음 • ‘fc –l’ 은 기본값으로 히스토리 목록 중 마지막 16항목을 출력 29

  30. fc 명령어(2) • ‘fc –l -3’ • 목록의 마지막 세 항목을 출력함 • ‘fc –ln’ • 옵션 n은 목록에서 일련번호를 제외하고 출력함 • ‘fc –lr’ • 마지막 목록 16항목을 거꾸로 출력함 • ‘fc –l 15 20’ • 15번에서 20번까지의 명령어들을 출력함 30

  31. # date 명령어를 실행. 히스토리 목록이 갱신됨 # !!는 히스토리 목록의 마지막 등록된 명령어를 재실행 # 히스토리 목록의 150번 명령어를 재실행 # 히스토리 목록에서 d로 시작하는 명령어중 마지막으로 실행된 명령어를 재실행 # date 명령어를 dare로 잘못 입력 # ^키를 이용해 히스토리 목록의 마지막 명령어의 잘못된 입력을 정정함. 첫번째 r이 t로 교체되어 date가 됨 history 예제(1) 31

  32. history 예제(2) 32

  33. history 예제(3) # ‘!$’는 마지막 명령어의 마지막 인자를 의미 # ‘!^’는 히스토리 목록에서 마지막 명령어가 가지는 첫번째 인자 # ‘*’는 명령어 다음의 모든 인자를 나타냄 # 히스토리 상의 마지막 명령어를 출력만 하고 실행하지는 않음 33

  34. 별명(alias) • 별명(alias)은 어떤 명령어를 사용자가 알맞게 줄여서 재정의할 수 있도록 배시 쉘에서 지원하는 기능 • 새로운 쉘이 시작할 때마다 실행되기 위해 주로 .bashrc 파일에서 정의 34

  35. 별명(alias) 정의 • ‘alias’ 명령어 사용 • 첫번째 인자는 지정할 별명 • 명령행의 전체 부분이 해당 별명에 지정됨 • 여러 명령어를 사용할 경우, 세미콜론(;)으로 분리시킴 • 공백이나 메타문자를 포함할 때는 작은따옴표로 묶어줌 35

  36. 별명(alias) 삭제 • ‘unalias’ 명령어 사용 • 일시적으로 별명을 비활성화할 때는 역슬래시를 별명 앞에 붙임 36

  37. 메타문자(와일드카드) • 문자 자체가 아닌 어떤 다른 의미를 나타내기 위해 사용하는 특수 문자 37

  38. 메타문자 예제(1) • 별표 문자 (*, asterisk) 38

  39. # 두 개의 문자로 이루어진 파일이름들을 출력 # 현재 디렉토리에는 두개의 문자로 이루어진 파일이름이 없으므로 쉘은 물음표를 메타문자가 아닌 일반 문자로 처리하여 echo 명령어의 인자로 사용함 메타문자 예제(2) • 물음표 (?) 39

  40. 메타문자 예제(3) • 대괄호 ([ ], square bracket) 40

  41. 메타문자 예제(4) • 중괄호 ({ }, curly brace) 41

  42. Shell변수

  43. 쉘 변수 • 지역변수 (local variable) • 자신을 생성한 쉘에서만 사용가능 • 환경변수 (environment variable) • 자신을 생성한 쉘 뿐만 아니라, 이로부터 파생되어 나온 자식 프로세스에서도 사용가능 • 변수 명칭 표준 • 알파벳, 0부터 9까지 숫자, 밑줄문자(_) 사용가능 • 첫글자는 알파벳과 밑줄문자(_)만 가능 • 대소문자 구별함 • 변수에 값을 할당할 때 등호(=) 양쪽에 공백이 있어서는 안됨 • 널 값 지정시 등호 바로 다음에 개행문자 입력 형식: variable=value 43

  44. #변수생성 내장명령어 “declare” #공백이 있으면 문자열을 분리하여 단어들로 인식하므로 따옴표 사용 # 널값 지정 #마침표는 변수이름에 사용불가 지역변수 설정 예제 44

  45. 환경변수 설정 • 자신이 생성된 쉘 뿐만 아니라, 자식 쉘이나 프로세스에서도 사용 • 전역변수라 함 • 표준에 따라, 환경변수 이름은 대문자를 사용(예: HOME, LOGNAME, PATH, SHELL 등) • 일반적으로 홈 디렉토리의 .bash_profile 파일에서 정의함 • 변수에 값을 대입하거나, 설정이 끝난 후에 ‘export’ 명령어를 사용 형식: export variable=value variable=value; export variable declare –x variable=value 45

  46. # pid number for parent shell # start a subshell # pid number for new shell # Exit the subshell and go back to parent shell # pid number for parent shell 환경변수 설정 예제 46

  47. 변수값 출력: echo 명령어 • 내장명령어 echo는 자신의 인자들을 표준 출력으로 보낸다. –e 옵션을 사용하면 출력의 형식을 제어할 수 있는 다양한 확장 문자열(escape sequence)을 사용할 수 있다. 47

  48. printf 명령어 • 출력 서식을 지정 • 배시 2.0 버전이후 내장명령어가 됨 • 서식 문자열을 C언어의 printf함수와 같은 방식으로 출력시켜줌 48

  49. 위치 인자 • 위치 인자(positional parameter)라 불리는 특별한 내장 변수들은 명령행에서 쉘 스크립트로 인자를 넘겨주기 위해 사용 • 쉘 스크립트의 이름은 변수 $0에 저장됨 • ‘set’ 명령어를 사용하여 위치 인자를 설정할 수 있음 49

  50. # prints the first positional parameter # eval 명령어는 명령행을 두번 분석하여 실행시킴 # set 명령어에 – 옵션을 사용하면 모든 위치 인자들을 삭제하거나 설정을 해제함 위치 인자 예제 50

More Related