• 검색 결과가 없습니다.

5장. Bash 활용하기

N/A
N/A
Protected

Academic year: 2023

Share "5장. Bash 활용하기"

Copied!
48
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

5장. Bash 활용하기

UNIX 및 실습

(2)

5장. Bash 활용하기

 학습목표

 Bash 쉘이 제공하는 다양한 기능을 이해하고 활용한다.

 환경변수를 이용해 작업의 효율을 높이는 환경을 설정하는 방법을 익힌다.

 환경 설정 파일을 이용해 자신만의 환경을

설정하는 방법을 익힌다.

(3)

Section 01 기본 사용법 익히기

 쉘 ?

 사용자와 커널 사이의 중간 역할

 사용자가 입력한 명령을 처리 하고 실행 결과를 알려줌

 쉘의 종류

 Bourne쉘, Korn쉘, C쉘, Bash쉘,…

 로그인 쉘, 서브쉘

(4)

로그인쉘과 서브쉘

 로그인 쉘과 서브쉘

로그인 쉘 : 사용자가 로그인한 직후 자동 생성되는 쉘

서브쉘 : 사용자가 직접 실행한 쉘

ssh lily.mmu.ac.kr

$ sh

% bash

$ exit

% exit

$

bash

sh

bash

login logout

로그인쉘

서브쉘

exit

exit

exit

(5)

시작 파일

/etc/profile

전체 사용자에게 적용되는 환경 설정, 시작 프로그램 지정

/etc/bashrc

전체 사용자에게 적용되는 별명과 함수들을 정의

~/.bash_profile

각 사용자를 위한 환경을 설정, 시작 프로그램 지정

~/.bashrc

각 사용자를 위한 별명과 함수들을 정의

/etc/profile

~/.bash_profile

~/.bashrc

로그인 쉘 프롬프트

(6)

시작 파일 예

# .bash_profile

# 사용자의 환경변수 설정 및 시작 프로그램

if [ -f ~/.bashrc ] then

. ~/.bashrc fi

PATH=$PATH:$HOME/bin BASH_ENV=$HOME/.bashrc USERNAME="root"

export USERNAME BASH_ENV PATH

# .bashrc

# 사용자의 별명 설정 alias rm='rm -i'

alias cp='cp -i' alias mv='mv -i'

alias ll='ls -al --color=yes'

# 시스템 시작 파일 실행 if [ -f /etc/bashrc ]

then

. /etc/bashrc fi

(7)

쉘 특수 문자 - 종류

메타문자 기능 예제

; 한 줄에 여러 개의 명령 입력 $ date;cal;ls

* 임의의 문자 또는 문자들 $ ls h*

? 임의의 한 문자 $ ls dir?

[ ] 한 문자 위치를 위한 문자의 범위 표시 $ ls [a-f]*

>, >>, < 입출력 방향 전환 $ ls > ls.out

| 명령어 파이핑 $ ls –l /etc | more

~ 홈 디렉토리 $ cd ~user1

- 이전 작업 디렉토리 $ cd -

‘ ‘ 모든 쉘 문자 무시 $ echo ‘$SHELL’

“ “ $, `, \를 제외한 모든 쉘 문자 무시 $ echo “$SHELL”

` ` 쉘 명령 수행 $ echo `date`

\ 특수문자 기능 제거 $ echo “\$SHELL”

(8)

쉘 특수 문자 -사용예제

 ; : 명령 연결

 ? : 임의의 한문자

 * : 임의의 문자열

 [ ] : 범위내의 한문자

ssh lily.mmu.ac.kr

$ mkdir ~/unix/ch5

$ cd ~/unix/ch5

$ pwd ; touch a.txt b.txt; ls /export/home/user1/unix/ch5 a.txt b.txt

$

ssh lily.mmu.ac.kr

$ ls *.txt a.txt b.txt

$

ssh lily.mmu.ac.kr

$ touch ab.txt

$ ls *.txt a.txt b.txt

$

ssh lily.mmu.ac.kr

$ ls [ab].txt a.txt b.txt

$

(9)

쉘 특수 문자 - 사용예제

- : 이전 작업디렉토리

‘ ‘ , “ ” : 문자열 묶기

` ` : back quotation

ssh lily.mmu.ac.kr

$ pwd

/export/home/user1/unix/ch5

$ cd /tmp

$ pwd /tmp

$ cd -

$ pwd

/export/home/user1/unix/ch5

$ cd –

$ pwd /tmp

$ cd -

ssh lily.mmu.ac.kr

$ echo ‘$SHELL’

$SHELL

$ echo “$SHELL”

/bin/ksh

$

ssh lily.mmu.ac.kr

$ echo “Today: `date`”

Today : 2007년 4월 25일 화요일 오후 02시 15분 04초

$

(10)

[실습하기] 쉘 특수 문자

 실습하기

1) cd ../ch3 2) ls

3) ls f*

4) ls *.c 5) ls *

6) ls file?

7) ls file[2-3]

8) cd /etc 9) pwd

10)cd - 11) pwd

12) cd ../ch5

1)

2) 디렉토리 내용 확인

3) f 로 시작하는 모든 파일 출 4) .c로 끝나는 모든 파일 출력 력 5) 모든 파일 출력

6) file_ 파일 출력 7) file2, file3 출력 8) /etc로 이동 9) 현재 경로 확인

10)이전 작업디렉토리로 이동 11)현재 경로 확인

12)5장 디렉토리로 이동

(11)

[실습하기] 쉘 특수 문자

 실습하기

1) echo “abc”

2) echo ‘$TERM’

3) echo “$TERM”

4) echo “현재 시스템은 `uname –a`입니다.”

1) print : 화면에 출력

2) $로 시작하면 쉘 변수. ‘ ‘안에서는 모든 특수문자가 그 의미를 잃어버림.

그냥 $TERM 출력

3) “ “ 안에서는 쉘 변수 값 출력 4) ` ` 은 명령의 실행 결과 출력

(12)

쉘 특수 문자 - 파이프

 한 명령의 실행결과를 다음 명령의 입력으로 전달

 | (파이프) 양쪽에 명령이 와야 함

 사용법

$ 명령1 | 명령2 | 명령3

ssh lily.mmu.ac.kr

$ ls /etc | more

(13)

[실습하기] 쉘 특수 문자 – 파이프 실습

 실습하기

1)ls /etc

2)ls /etc > ls.out 3)more ls.out

4)ls /etc | more 5)ps -ef

6)ps -ef | more

1) ls /etc 의 결과는 한 화 면에 다 보이지 않음

2) ls /etc 의 결과를 파일에 저장 (다음절에 배움)

3) more 명령을 이용하여 파일을 한 화면씩 출력 4) 파이프를 이용한 결과와

3)의 결과 비교

5) 현재 서버에서 실행중인 프로세스 목록 출력

6) 목록을 한 화면씩 출력

(14)

Section 02 입출력 방향 변경

 표준 입력

Standard input

프로그램 실행에 필요한 데이터를 읽어드리는 기본 장치

기본 표준 입력은 키보드

 표준 출력

Standard output

프로그램의 실행 결과를 출력하는 장치

기본 표준 출력은 모니터

 표준 오류

Standard error

프로그램 실행중 발생한 오류 메시지를 출력하는 장치

기본 표준 오류는 모니터

(15)

입출력 방향 변경

 표준 입출력 장치를 변경시 특수 기호 사용

 리다이렉션 : 표준 입출력 파일의 변경

표준 입력

표준 출력

표준 오류 명령어

수행

1) 키보드 2) 파일

1) 모니터 2) 파일

1) 모니터 2) 파일

<

>, >>

2>

(16)

입출력 방향 변경 – 출력 리다이렉션

 표준출력을 모니터에서 파일로 변경

> : 새로운 파일로 생성, 기존 파일의 내용은 없어짐

>> : 기존 파일의 끝에 내용 추가

 사용법

$ 명령 > 파일명

$ 명령 >> 파일명

ssh lily.mmu.ac.kr

$ ls –al > test

$ date > test

$ cat test

2007년 5월 1일 화요일 오후 2시 30분

$ pwd >> test

$ cat test

test파일의 내용은 무엇일까?

(17)

[ 실습하기] 입출력 방향 변경 – 출력 리다이렉션

 실습하기

1) ls -al

2) ls -al > ls.out 3) cat ls.out

4) pwd > ls.out 5) cat ls.out

6) date >> ls.out 7) cat ls.out

1) 결과가 모니터로 출력 2) 결과가 파일로 저장 3) 파일 내용 확인

4) 결과가 파일로 저장

5) 파일 내용에서 2)의 결과 는 어떻게 되었는가?

6) 명령의 결과를 파일에 추 가

7) 파일 내용은 어떻게 되었 는가? 4)의 결과는 어떻게 되었는가?

(18)

입출력 방향 변경 – 오류 리다이렉션

 표준 오류메시지를 파일에 저장

 사용법

$ 명령 2> 파일명

ssh lily.mmu.ac.kr

$ ls /ttt

해당 파일이나 디렉토리가 없음

$ ls /ttt 2> ls.err

$ cat ls.err

해당 파일이나 디렉토리가 없음

$

(19)

[실습하기] 입출력 방향 변경 – 오류 리다이렉션

 실습하기

1) ls /test

2) ls /test 2> ls.err 3) cat ls.err

4) rm ls.out ls.err

5) ls /var /test 1> ls.out 2> ls.err 6) cat ls.out

7) cat ls.err

8) rm ls.out ls.err

9) ls /var /test 1> ls.out 2>&1 10)cat ls.out

1) 오류메시지가 화면으로 2) 오류메시지가 파일에 출력 3) 파일 내용 확인 저장

4) 파일 삭제

5) 결과는 ls.out으로 오류 메시지는 ls.err로 저장 6) 파일 내용을 확인

7) 파일 내용을 확인 8) 파일 삭제

9) 결과와 오류메시지를 같은 ls.out 파일로 저장 10)파일 내용을 확인

(20)

입출력 방향 변경 – 입력 리다이렉션

 표준 입력을 키보드에서 파일로 변경

 사용법

$ 명령 < 파일명

ssh lily.mmu.ac.kr

$ cat < loveletter I love UNIX!

$

(21)

[실습하기] 입출력 방향 변경 – 입력 리다이렉션

 실습하기

1)vi loveletter

• I love UNIX! 입력

2)mailx user1 < loveletter 3)mailx

? 1

I love UNIX!

? d

? q

1) 메일 내용을 미리 파일로 2) 자신에게 메일 전송 작성

3) mailx 툴을 이용하여 메 일 확인

1) 메일번호 입력 2) d : 메일 삭제 3) q : mailx 종료

(22)

Section 03 Bash 쉘 환경 설정

 변수

 시스템이나 사용자에 의해 사용되는 정보를 저장하기 위한 저장소

 쉘 변수는 관례적으로 대문자를 사용

 쉘(지역) 변수

 현재의 쉘에서만 사용 가능한 변수

 확인 명령 : set

 환경(전역) 변수

 전체 쉘에서 사용 가능한 변수

 확인 명령 : env

(23)

단순 변수(simple variable)

 하나의 값(문자열)만을 저장할 수 있는 변수

 $ 이름=단어

 $ city=seoul

 변수의 값 사용

 $ echo $city

 seoul

 변수에 어느 때나 필요하면 다른 값을 대입

 $ city=pusan

 한 번에 여러 개의 변수를 생성

 $ country=korea city=seoul

(24)

단순 변수

 한글 스트링을 값으로 사용

$ country=대한민국 city=서울

$ echo $country $city 대한민국 서울

 따옴표를 이용하면 여러 단어로 구성된 스트링을 저장

$ address="서울시 용산구 청파동"

(25)

리스트 변수(list variable)

 한 변수에 여러 개의 값(문자열)을 저장할 수 있는 변수

$ 이름=( 단어리스트 )

$ cities=(서울 부산 목포)

 리스트 변수 사용

리스트 사용 의미

${name[i]} 리스트 변수 name의 i번째 원소

${name[*]}

${name[@]} 리스트 변수 name의 모든 원소

${#name[*]}

${#name[@]} 리스트 변수 name 내의 원소 개수

(26)

리스트 변수 사용 예

리스트 변수 사용

$ echo ${cities[*]}

서울 부산 목포

$ echo ${cities[1]}

서울

리스트의 크기

$ echo ${#cities[*]} # 리스트 크기 3 $ echo ${cities[4]}

리스트 변수에 새로운 도시 추가

$ cities=(${cities[*] 제주)

$ echo ${cities[4]}

제주

(27)

표준입력 읽기

read 명령어

 표준입력에서 한 줄을 읽어서 단어들을 변수들에 순서대로 저장

 남은 단어들은 마지막 변수에 모두 저장

 사용법 : $ read 변수1, ..., 변수n

 예 1:

$ read x y

Merry Christmas !

$ echo $x

Merry

$ echo $y

Christmas !

 예2 : 변수를 하나만 사용

$ read x

Merry Christmas !

$ echo $x

Merry Christmas !

(28)

환경변수와 지역변수

 쉘 변수

 환경변수와 지역변수 두 종류로 나눌 수 있다.

 환경 변수는 값이 자식 프로세스에게 상속되며

지역변수는 그렇지 않다.

(29)

환경변수와 지역변수 예

$ country=대한민국 city=서울

$ export country

$ echo $country $city 대한민국 서울

$ sh

$ echo $country $city 대한민국

$ ^D

$ echo $country $city 대한민국 서울

(30)

사전 정의 환경변수(predefined environment variable)

 그 의미가 미리 정해진 환경변수들

 $ echo 홈=$HOME 사용자=$USER 쉘=$SHELL

 홈=/home/kgu 사용자=kgu 쉘=/bin/bash

이름 의미

$USER 사용자 이름

$TERM 터미널 타입

$PATH 명령어를 검색할 디렉터리들의 리스트

$HOME 홈 디렉터리

$SHELL 로그인 쉘의 경로명

$MAIL 메일 박스의 경로명

$HOSTNAME 호스트 이름

(31)

Bash 쉘 환경 변수

 Bash 쉘 변수 정의

 쉘 변수 : 변수=값

 환경 변수 : export 변수=값

 변수 값 확인

 echo $변수

 변수 정의 해제

 unset 변수

ssh lily.mmu.ac.kr

$ ATEST=test

$ export ATEST

$

ssh lily.mmu.ac.kr

$ echo $ATEST test

$

ssh lily.mmu.ac.kr

$ unset ATEST

$ echo $ATEST

$ env

(32)

[실습하기] Bash 쉘 환경 변수

 실습하기

1) env 2) set

3) export

4) MYVAR=user1 5) sh

6) env 7) exit

8) export MYVAR 9) sh

10)echo $MYVAR 11)exit

12)unset MYVAR

1) env로 환경변수 출력 2) set으로 쉘변수 출력 3) export로 환경변수 출력 4) 쉘 변수 MYVAR 정의 5) sh로 전환 (서브쉘)

6) 환경변수를 출력하여, 그중 에 MYVAR가 있는지 확인 7) 다시 bash로 전환

8) MYVAR를 export하여 전역 변수로 바꿈

9) 다시 sh로 전환 10)MYVAR값을 출력 11)bash로 돌아감

12)MYVAR 변수를 해제

(33)

Section 04 Bash 쉘 명령 다루기 – alias

명령어에 다른 이름을 정의하여 사용

 긴 명령어 대신 짧은 별칭을 사용

 자주 사용하는 옵션 자동 수행

 여러 명령을 하나의 명령으로 대체 가능

명령

 현재 설정값 보기 : alias

 앨리어스 설정 : alias 별칭=명령

 앨리어스 해제 : unalias 별칭

alias [ 별칭=명령 ]

unalias 별칭

(34)

콘 쉘 명령 다루기 - alias

 현재 설정된 alias  alias 설정

 alias 해제

ssh lily.mmu.ac.kr

$ alias

alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias vi='vim'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

ssh lily.mmu.ac.kr

$ alias ls=‘ls –xF’

$ alias cd=‘cd;pwd’

$ alias rm=‘rm -i’

$

ssh lily.mmu.ac.kr

$ unalias rm

$ unalias cd

$ unalias ls

(35)

[실습하기] Bash 쉘 명령 다루기 - alias

 실습하기

1)alias

2)alias c=clear 3)c

4)alias dir=‘ls -l’

5)dir

6)alias home=‘cd;pwd;ls’

7)home

8)alias copy=‘cp’

9)alias move=‘mv’

10)alias ls=‘ls –F’

11)ls

12)alias

1) 기존 alias를 확인

2) clear명령의 alias 생성 3) c를 실행

4) ls –l을 dir로 alias 5) dir을 실행

6) home이라는 이름으로 alias 를 생성. 3개의 명령을 하나 의 이름으로 실행 가능 7) home 실행

8) copy 생성 9) move 생성

10)ls를 ls –F로 변경 11)ls 실행

12)alias 설정 확인

(36)

Bash 쉘 명령 다루기 - history

 사용자가 입력한 명령을 기록, 재사용 할 수 있도록 함

~/.sh_history 파일에 저장

 옵션

n

출력할 명령 개수 지정

가장 최근 명령으로 출력

 기억할 히스토리의 크기

$ HISTSIZE=100

 로그아웃 후에도 히스토리가 저장되도록 설정

$ HISTFILESIZE=100

history [옵션]

(37)

Bash 쉘 명령 다루기 – history

 history 목록  최근 3개 명령만 보기

ssh lily.mmu.ac.kr

$ history 102 pwd

103 cp *.c ~/C 104 alias

105 ls

106 ls /tmp 107 !

108 man history 109 !99

110 ls

111 history 112 alias

113 unalias history 114 history

115 alias history=‘fc –l’

116 history 117 fc -l

ssh lily.mmu.ac.kr

$ history 3

115 alias history=‘fc –l’

116 history 117 fc -l

$

(38)

Bash 쉘 명령 다루기 – 명령 재실행

 !!

 바로 전 명령 다시 실행

 !20

 History 목록의 20번째 명령어 재실행

 !gcc

 gcc로 시작하는 가장 최근의 명령 재실행

 !?test.c 번호

 test.c를 포함하는 명령 재실행

!!

! 시작문자열

! 번호

!?서브스트링

(39)

Bash 쉘 명령 다루기 – 명령 재실행

 history 목록  문자 이용

 숫자 이용

ssh lily.mmu.ac.kr

$ ! c

cp *.c ~/C

$ !!

cp *.c ~/C

ssh lily.mmu.ac.kr

$ ! 116 History 123 cd ..

124

ssh lily.mmu.ac.kr

$ history 102 pwd

103 cp *.c ~/C 104 alias

105 ls

106 ls /tmp 107 !

108 man history 109 !99

110 ls

111 history 112 alias

113 unalias history 114 history

115 alias history=‘fc –l’

116 history 117 fc -l

(40)

[실습하기] Bash 쉘 명령 다루기 – 명령 재실행

 실습하기

1)history 2)h

3)cd

4)ls –a .[a-z]*

5)vi .bash_history 6)! a

7)! l 8)! h

9)! 번호

1) history 확인

2) history가 h로 alias되어 있는지 확인

3) 홈 디렉토리로 이동 4) 숨겨진 파일 목록 확인 5) .bash_history파일의 내용 6) a로 시작하는 명령 재실행 확인 7) l로 시작하는 명령 재실행 8) h로 시작하는 명령 재실행 9) history목록의 번호로

재실행

(41)

Bash 쉘 명령 다루기 – 명령 편집

 명령어 라인 편집 설정

 set -o vi

명령어 라인에서 vi 명령을 이용하여 명령 편집

ESC 키를 누르면 편집 가능

Vi 명령인 k, j 키를 이용하여 이전 명령을 호출

h, l, x, r, c 등 vi편집 명령을 이용하여 명령어 편집

 set +o vi

명령어 편집 기능 해제

set -o vi

set +o vi

(42)

[실습하기] Bash 쉘 명령 다루기 – 명령 편집

 실습하기

1)set –o vi 2)cd /temp 3)Esc+k

4)llll 5)x

6)Enter

1) set –o vi로 명령어 라인 편집기능 활성화

2) 틀린 명령 입력

3) Esc키를 눌러 편집상태로 4) Vi의 ㅣ이동키로 이동 변경 5) 틀린 글자 삭제

6) 원하는 명령에서 Enter를 치면 명령 실행

(43)

Section 06 환경설정 파일 설정하기

 초기화 파일

쉘이 시작할 때 실행되는 명령어와 변수 설정 저장

로그인 할 때 실행

종류 : 시스템 초기화 파일, 사용자 초기화 파일

 시스템 초기화 파일

시스템을 사용하는 전체 사용자의 공통 환경설정

/etc 디렉토리에 위치

시스템 관리자가 관리

 사용자 초기화 파일

사용자 홈 디렉토리에 위치

사용자별 환경 설정 : 프롬프트, 경로, 앨리어스 등

(44)

환경 설정 파일

 쉘에 따른 시스템 초기화 파일

쉘 시스템초기화파일 사용자초기화파일

본쉘 1. /etc/profile 2. $HOME/.profile

콘쉘 1. /etc/profile

2. $HOME/.profile

(ENV=$HOME/.kshrc;export ENV) 3. $HOME/.kshrc

C쉘 1. /etc/.login

2. $HOME/.login 3. $HOME/.cshrc 4. $HOME/.logout

(45)

환경 설정 파일

 콘쉘 로그인 과정

사용자 로그인 시작 /etc/profile

~/.profile ENV 변수

~/.bashrc login 성공

No Yes

(46)

환경 설정 파일

 수정된 환경 설정 파일 내용의 적용

 logout했다가 다시 login

 logout하지 않고 적용하려면 다음 명령 수행

$. ~/.bashrc

$. ~/.profile

(47)

환경 설정 파일

 실습 순서

1) cd

2) vi .profile 3) set –a

4) PATH=$PATH:~/bin:.

5) ENV=~/.bashrc 6) set +a

7) . ~/.profile 8) vi .bashrc 9) stty erase ^h 10)TERM=vt100 11)alias 설정 12). ~/.bashrc 13)alias 동작 확인

1) 홈 디렉토리로 이동 2)

3) 자동으로 export실행토록 설 4) 경로설정 추가

5) ENV추가

6) 자동설정 해제

7) .profile 수정내용 적용 8) .bashrc 내용 수정

• alias 등 필요내용 삽입 9) .bashrc 수정내용 적용 10) alias가 동작되는지 확인

(48)

[실습과제]

 실습 각 단계 화면 캡처하여 pdf 파일로

정리하여 과제 제출 (cms.mmu.ac.kr/bear)

 본인의 쉘 환경설정 파일 수정 후 설명을 추가하여 제출

 제출기한 : 4월 7일 자정

참조

관련 문서

발효 식품이 미생물에 의해 진행됨을 발표하고 효모균을 이용해 미생물이 살기 적합한 환경을 찾는 실험을 탐구요소에 맞춰 설계하고 수행할 줄 앎..

에너지소비효율등급표시제도는 에너지의 효율을 의무적으로 표시함으로써 제품을 만드는 회사에게 제 품 생산 과정에서 에너지를 절약할 수 있는 방법을 연

‘쥬라기 공원’과 ‘둘리’로 우리들에게 친숙한 공룡에 대한 탐구를 단순한 과거의 생명체에 대한 인식이 아니라 그 시대의 환경을 통한 미래사회의 환경을

환경을 보호하는 방법을 잘 알고 있으며 이를 해결 하기 위해 캠페인 활동을 주도적으로 계획, 제작하 고 세계시민으로서 미래 환경을

-밀양시 송전탑에서 나오는 전자파를 이용해 변환장치의 성능 확인 실험 -밀양시의 환경을 고려한 변환장치 고안, 밀양시에

- STEAM 프로그램을 적용한 1, 2학년의 경우 화학 수업을 통해 실제로 FT-IR을 이용해 화합물의 스펙트럼을 찍어보고 정보 수업 시간을 이용해 코딩을 진행하고

닻채와 닻돌의 홈이 겹치는 부분을 천공하여 묶었다.먼저 천공된 닻채에 로프를 삽입하고 닻돌을 닻채와 수직방향으로 홈을 이용해 묶었다.그 후 닻채와

제안한 구간 분석법을 이용한 전파 모델 예측 방법은 기존의 이론 및 실 측 전파 모델을 구간별로 적용하는 방법으로 보다 정확한 경로 손실 모 , 델을 설정하는