5장. Bash 활용하기
UNIX 및 실습
5장. Bash 활용하기
학습목표
Bash 쉘이 제공하는 다양한 기능을 이해하고 활용한다.
환경변수를 이용해 작업의 효율을 높이는 환경을 설정하는 방법을 익힌다.
환경 설정 파일을 이용해 자신만의 환경을
설정하는 방법을 익힌다.
Section 01 기본 사용법 익히기
쉘 ?
사용자와 커널 사이의 중간 역할
사용자가 입력한 명령을 처리 하고 실행 결과를 알려줌
쉘의 종류
Bourne쉘, Korn쉘, C쉘, Bash쉘,…
로그인 쉘, 서브쉘
로그인쉘과 서브쉘
로그인 쉘과 서브쉘
로그인 쉘 : 사용자가 로그인한 직후 자동 생성되는 쉘
서브쉘 : 사용자가 직접 실행한 쉘
ssh lily.mmu.ac.kr
$ sh
% bash
$ exit
% exit
$
bash
sh
bash
login logout
로그인쉘
서브쉘
exit
exit
exit
시작 파일
/etc/profile
전체 사용자에게 적용되는 환경 설정, 시작 프로그램 지정
/etc/bashrc
전체 사용자에게 적용되는 별명과 함수들을 정의
~/.bash_profile
각 사용자를 위한 환경을 설정, 시작 프로그램 지정
~/.bashrc
각 사용자를 위한 별명과 함수들을 정의
/etc/profile
~/.bash_profile
~/.bashrc
로그인 쉘 프롬프트
시작 파일 예
# .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
쉘 특수 문자 - 종류
메타문자 기능 예제
; 한 줄에 여러 개의 명령 입력 $ 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”
쉘 특수 문자 -사용예제
; : 명령 연결
? : 임의의 한문자
* : 임의의 문자열
[ ] : 범위내의 한문자
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
$
쉘 특수 문자 - 사용예제
- : 이전 작업디렉토리
‘ ‘ , “ ” : 문자열 묶기
` ` : 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초
$
[실습하기] 쉘 특수 문자
실습하기
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장 디렉토리로 이동
[실습하기] 쉘 특수 문자
실습하기
1) echo “abc”
2) echo ‘$TERM’
3) echo “$TERM”
4) echo “현재 시스템은 `uname –a`입니다.”
1) print : 화면에 출력
2) $로 시작하면 쉘 변수. ‘ ‘안에서는 모든 특수문자가 그 의미를 잃어버림.
그냥 $TERM 출력
3) “ “ 안에서는 쉘 변수 값 출력 4) ` ` 은 명령의 실행 결과 출력
쉘 특수 문자 - 파이프
한 명령의 실행결과를 다음 명령의 입력으로 전달
| (파이프) 양쪽에 명령이 와야 함
사용법
$ 명령1 | 명령2 | 명령3
ssh lily.mmu.ac.kr
$ ls /etc | more
[실습하기] 쉘 특수 문자 – 파이프 실습
실습하기
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) 목록을 한 화면씩 출력
Section 02 입출력 방향 변경
표준 입력
Standard input
프로그램 실행에 필요한 데이터를 읽어드리는 기본 장치
기본 표준 입력은 키보드
표준 출력
Standard output
프로그램의 실행 결과를 출력하는 장치
기본 표준 출력은 모니터
표준 오류
Standard error
프로그램 실행중 발생한 오류 메시지를 출력하는 장치
기본 표준 오류는 모니터
입출력 방향 변경
표준 입출력 장치를 변경시 특수 기호 사용
리다이렉션 : 표준 입출력 파일의 변경
표준 입력
표준 출력
표준 오류 명령어
수행
1) 키보드 2) 파일
1) 모니터 2) 파일
1) 모니터 2) 파일
<
>, >>
2>
입출력 방향 변경 – 출력 리다이렉션
표준출력을 모니터에서 파일로 변경
> : 새로운 파일로 생성, 기존 파일의 내용은 없어짐
>> : 기존 파일의 끝에 내용 추가
사용법
$ 명령 > 파일명
$ 명령 >> 파일명
ssh lily.mmu.ac.kr
$ ls –al > test
$ date > test
$ cat test
2007년 5월 1일 화요일 오후 2시 30분
$ pwd >> test
$ cat test
test파일의 내용은 무엇일까?
[ 실습하기] 입출력 방향 변경 – 출력 리다이렉션
실습하기
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)의 결과는 어떻게 되었는가?
입출력 방향 변경 – 오류 리다이렉션
표준 오류메시지를 파일에 저장
사용법
$ 명령 2> 파일명
ssh lily.mmu.ac.kr
$ ls /ttt
해당 파일이나 디렉토리가 없음
$ ls /ttt 2> ls.err
$ cat ls.err
해당 파일이나 디렉토리가 없음
$
[실습하기] 입출력 방향 변경 – 오류 리다이렉션
실습하기
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)파일 내용을 확인
입출력 방향 변경 – 입력 리다이렉션
표준 입력을 키보드에서 파일로 변경
사용법
$ 명령 < 파일명
ssh lily.mmu.ac.kr
$ cat < loveletter I love UNIX!
$
[실습하기] 입출력 방향 변경 – 입력 리다이렉션
실습하기
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 종료
Section 03 Bash 쉘 환경 설정
변수
시스템이나 사용자에 의해 사용되는 정보를 저장하기 위한 저장소
쉘 변수는 관례적으로 대문자를 사용
쉘(지역) 변수
현재의 쉘에서만 사용 가능한 변수
확인 명령 : set
환경(전역) 변수
전체 쉘에서 사용 가능한 변수
확인 명령 : env
단순 변수(simple variable)
하나의 값(문자열)만을 저장할 수 있는 변수
$ 이름=단어
$ city=seoul
변수의 값 사용
$ echo $city
seoul
변수에 어느 때나 필요하면 다른 값을 대입
$ city=pusan
한 번에 여러 개의 변수를 생성
$ country=korea city=seoul
단순 변수
한글 스트링을 값으로 사용
$ country=대한민국 city=서울
$ echo $country $city 대한민국 서울
따옴표를 이용하면 여러 단어로 구성된 스트링을 저장
$ address="서울시 용산구 청파동"
리스트 변수(list variable)
한 변수에 여러 개의 값(문자열)을 저장할 수 있는 변수
$ 이름=( 단어리스트 )
$ cities=(서울 부산 목포)
리스트 변수 사용
리스트 사용 의미
${name[i]} 리스트 변수 name의 i번째 원소
${name[*]}
${name[@]} 리스트 변수 name의 모든 원소
${#name[*]}
${#name[@]} 리스트 변수 name 내의 원소 개수
리스트 변수 사용 예
리스트 변수 사용
$ echo ${cities[*]}
서울 부산 목포
$ echo ${cities[1]}
서울
리스트의 크기
$ echo ${#cities[*]} # 리스트 크기 3 $ echo ${cities[4]}
리스트 변수에 새로운 도시 추가
$ cities=(${cities[*] 제주)
$ echo ${cities[4]}
제주
표준입력 읽기
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 !
환경변수와 지역변수
쉘 변수
환경변수와 지역변수 두 종류로 나눌 수 있다.
환경 변수는 값이 자식 프로세스에게 상속되며
지역변수는 그렇지 않다.
환경변수와 지역변수 예
$ country=대한민국 city=서울
$ export country
$ echo $country $city 대한민국 서울
$ sh
$ echo $country $city 대한민국
$ ^D
$ echo $country $city 대한민국 서울
사전 정의 환경변수(predefined environment variable)
그 의미가 미리 정해진 환경변수들
$ echo 홈=$HOME 사용자=$USER 쉘=$SHELL
홈=/home/kgu 사용자=kgu 쉘=/bin/bash
이름 의미
$USER 사용자 이름
$TERM 터미널 타입
$PATH 명령어를 검색할 디렉터리들의 리스트
$HOME 홈 디렉터리
$SHELL 로그인 쉘의 경로명
$MAIL 메일 박스의 경로명
$HOSTNAME 호스트 이름
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
[실습하기] 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 변수를 해제
Section 04 Bash 쉘 명령 다루기 – alias
명령어에 다른 이름을 정의하여 사용
긴 명령어 대신 짧은 별칭을 사용
자주 사용하는 옵션 자동 수행
여러 명령을 하나의 명령으로 대체 가능
명령
현재 설정값 보기 : alias
앨리어스 설정 : alias 별칭=명령
앨리어스 해제 : unalias 별칭
alias [ 별칭=명령 ]
unalias 별칭
콘 쉘 명령 다루기 - 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
[실습하기] 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 설정 확인
Bash 쉘 명령 다루기 - history
사용자가 입력한 명령을 기록, 재사용 할 수 있도록 함
~/.sh_history 파일에 저장
옵션
n
출력할 명령 개수 지정
가장 최근 명령으로 출력
기억할 히스토리의 크기
$ HISTSIZE=100
로그아웃 후에도 히스토리가 저장되도록 설정
$ HISTFILESIZE=100
history [옵션]
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
$
Bash 쉘 명령 다루기 – 명령 재실행
!!
바로 전 명령 다시 실행
!20
History 목록의 20번째 명령어 재실행
!gcc
gcc로 시작하는 가장 최근의 명령 재실행
!?test.c 번호
test.c를 포함하는 명령 재실행
!!
! 시작문자열
! 번호
!?서브스트링
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
[실습하기] 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목록의 번호로
재실행
Bash 쉘 명령 다루기 – 명령 편집
명령어 라인 편집 설정
set -o vi
명령어 라인에서 vi 명령을 이용하여 명령 편집
ESC 키를 누르면 편집 가능
Vi 명령인 k, j 키를 이용하여 이전 명령을 호출
h, l, x, r, c 등 vi편집 명령을 이용하여 명령어 편집
set +o vi
명령어 편집 기능 해제
set -o vi
set +o vi
[실습하기] 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를 치면 명령 실행
Section 06 환경설정 파일 설정하기
초기화 파일
쉘이 시작할 때 실행되는 명령어와 변수 설정 저장
로그인 할 때 실행
종류 : 시스템 초기화 파일, 사용자 초기화 파일
시스템 초기화 파일
시스템을 사용하는 전체 사용자의 공통 환경설정
/etc 디렉토리에 위치
시스템 관리자가 관리
사용자 초기화 파일
사용자 홈 디렉토리에 위치
사용자별 환경 설정 : 프롬프트, 경로, 앨리어스 등
환경 설정 파일
쉘에 따른 시스템 초기화 파일
쉘 시스템초기화파일 사용자초기화파일
본쉘 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
환경 설정 파일
콘쉘 로그인 과정
사용자 로그인 시작 /etc/profile
~/.profile ENV 변수
~/.bashrc login 성공
No Yes
환경 설정 파일
수정된 환경 설정 파일 내용의 적용
logout했다가 다시 login
logout하지 않고 적용하려면 다음 명령 수행
$. ~/.bashrc
$. ~/.profile
환경 설정 파일
실습 순서
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가 동작되는지 확인