UNIX 및실습 5 장. Bash 활용하기
학습목표 5 장. Bash 활용하기 Bash 쉘이제공하는다양한기능을이해하고활용한다. 환경변수를이용해작업의효율을높이는환경을설정하는방법을익힌다. 환경설정파일을이용해자신만의환경을설정하는방법을익힌다.
Section 01 기본사용법익히기 쉘? 사용자와커널사이의중간역할 사용자가입력한명령을처리하고실행결과를알려줌 쉘의종류 Bourne 쉘, Korn 쉘, C 쉘, Bash 쉘, 로그인쉘, 서브쉘
로그인쉘과서브쉘 로그인쉘과서브쉘 로그인쉘 : 사용자가로그인한직후자동생성되는쉘 서브쉘 : 사용자가직접실행한쉘 ssh lily.mmu.ac.kr $ sh % bash $ exit % exit $ login 로그인쉘 bash sh logout exit exit 서브쉘 exit bash
시작파일 /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 $ touch ab.txt $ ls *.txt a.txt b.txt $ * : 임의의문자열 ssh lily.mmu.ac.kr $ ls *.txt a.txt b.txt $ [ ] : 범위내의한문자 ssh lily.mmu.ac.kr $ ls [ab].txt a.txt b.txt $
쉘특수문자 - 사용예제 - : 이전작업디렉토리 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 $ ` ` : back quotation 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[*]} ${name[@]} ${#name[*]} ${#name[@]} 의미리스트변수 name의 i번째원소리스트변수 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) 그의미가미리정해진환경변수들 이름 의미 $USER $TERM $PATH $HOME $SHELL $MAIL 사용자이름터미널타입명령어를검색할디렉터리들의리스트홈디렉터리로그인쉘의경로명메일박스의경로명 $HOSTNAME 호스트이름 $ echo 홈 =$HOME 사용자 =$USER 쉘 =$SHELL 홈 =/home/kgu 사용자 =kgu 쉘 =/bin/bash
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 [ 별칭 = 명령 ] unalias 별칭 명령어에다른이름을정의하여사용 긴명령어대신짧은별칭을사용 자주사용하는옵션자동수행 여러명령을하나의명령으로대체가능 명령 현재설정값보기 : alias 앨리어스설정 : alias 별칭 = 명령 앨리어스해제 : unalias 별칭
콘쉘명령다루기 - 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' alias 설정 ssh lily.mmu.ac.kr $ alias ls= ls xf $ alias cd= cd;pwd $ alias rm= rm -i $ alias 해제 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 history [ 옵션 ] 사용자가입력한명령을기록, 재사용할수있도록함 ~/.sh_history 파일에저장 옵션 n 출력할명령개수지정 가장최근명령으로출력 기억할히스토리의크기 $ HISTSIZE=100 로그아웃후에도히스토리가저장되도록설정 $ HISTFILESIZE=100
Bash 쉘명령다루기 history history 목록 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 최근 3 개명령만보기 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 $ 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 $! c cp *.c ~/C $!! cp *.c ~/C 숫자이용 ssh lily.mmu.ac.kr $! 116 History 123 cd.. 124
[ 실습하기 ] 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 set +o vi 명령어라인편집설정 set -o vi 명령어라인에서 vi 명령을이용하여명령편집 ESC 키를누르면편집가능 Vi 명령인 k, j 키를이용하여이전명령을호출 h, l, x, r, c 등 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 콘쉘 C 쉘 1. /etc/profile 1. /etc/.login 2. $HOME/.profile (ENV=$HOME/.kshrc;export ENV) 3. $HOME/.kshrc 2. $HOME/.login 3. $HOME/.cshrc 4. $HOME/.logout
콘쉘로그인과정 사용자로그인시작 환경설정파일 /etc/profile ~/.profile ENV 변수 No Yes ~/.bashrc login 성공
환경설정파일 수정된환경설정파일내용의적용 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가동작되는지확인
[ 실습과제 ] 실습각단계화면캡처하여 pdf 파일로정리하여과제제출 (cms.mmu.ac.kr/bear) 본인의쉘환경설정파일수정후설명을추가하여제출 제출기한 : 4 월 7 일자정