Linux Shell: 제대로사용하기 - Bash 소개 - 명령기본 + - Redirection - 명령행편집 - 셸 (Shell) 사용자가입력한명령을해석하고실행하는명령해석기 (Command Interpreter) 사용자가처음수행할수있는특수프로그램 UNIX 셸종류 sh: Stephen Bourne, 기본표준셸, $ prompt csh: Bill Joy, C 와닮은꼴, % prompt ksh: David Korn, sh 과호환, $ prompt zsh: Paul Falstad, ksh 의업그레이드 bash: Brian Fox, GNU free software, sh 과호환, csh 과 ksh 의장점수용, $ prompt 그외에도많음.
셸의기능 셸의공통기능 다수의내장명령어제공 메타문자 입력 / 출력 / 오류의재지정 (redirection) 파이프라인 명령어대치 / 완성 / 편집 환경변수와지역변수 후면처리 하위셸 (subshell) 생성 셸프로그래밍 작업제어 셸시작 로그인 계정생성시기본셸이지정된다. 셸변경 로그인셸확인 : echo $SHELL 현재수행중인셸확인 : ps 해당셸의이름을입력 sh, csh, ksh, tcsh, zsh, 셸프로그램이설치되어있지않을경우실행되지않는다. 빠져나올때는 exit
Bash Bash (Bourne Again Shell) GNU 표준셸 리눅스표준셸 1988년처음배포 현재버전 3.2 Bash 정보 다운로드 : http://www.gnu.org/software/bash 리눅스에 bash 가설치되어있지않은경우또는 upgrade 매뉴얼 온라인 : http://www.gnu.org/software/bash/manual 명령행에서 help 명령으로도움말기능제공 명령기본 + More meta-characters 메타문자의미예? 문자하나 a? ab, ac, a3, * 문자여러개 c*t cat, chat, come at, set에있는하나의문자 [abc] abc 중하나 [a-z] 모든소문자중하나 [-a-z] -와모든소문자중하나 [set] [!set] set 에없는하나의문자 { s1,s2, } s1 and s2 and [!0-9] 숫자가아닌문자 [0-9!] 모든숫자와! b{ed,olt,ar}s beds, bolts, bars ls *.{c,h,o} 확장자가.c,.h,.o 인모든파일리스트
명령기본 + 셸에서의미를가지는특수문자 메타문자 의미 메타문자 의미 ~ 홈디렉터리 $ 변수 ` 명령대체 & 백그라운드작업 # Comment *? 와일드카드 ( ) 하위셸시작 / 종료 \ 문자그대로 파이프 [ ] 문자집합 { } 명령블록 ; 셸명령분리 강한인용부호 약한인용부호 < 입력재지정 > 출력재지정 / 경로명분리! 논리 NOT 명령기본 + 백그라운드작업 & 여러작업을동시에수행 입력없이시간이많이걸리는작업에편리
명령기본 + 특수문자를일반문자로취급하려면? 인용부호사용 \ 사용 약한인용부호 : $,?, \ 제외하고일반문자로해석 명령기본 + 명령행의계속 \n 을일반문자로취급하기 행의끝에 \ 사용 \n 을완전히무시하고한줄로연결 인용부호 ( ) 로연결 \n 을명령의끝이아닌하나의문자로취급
명령기본 + 컨트롤키 컨트롤키 stty 명 기능 ^C intr 현재명령중지 ^D eof 입력의끝 ^\ quit ^C가동작하지않을경우현재명령중지 ^S stop 화면출력정지 ^Q start 화면출력다시시작 DEL, ^? erase 마지막문자삭제 ^U kill 전체명령행삭제 ^Z susp 현재명령일시중단 Redirection 표준입출력 데이터가유닉스시스템에저장되거나전송되는표준방식 다양한입출력기기를추상화하고공통된처리방식을사용하도록최초로시도 세가지표준파일 stdin (0) : 표준입력 stdout (1) : 표준출력 stderr (2) : 표준오류출력 http://en.wikipedia.org/wiki/image:stdstreams-notitle.svg
Redirection 쉘에서제공하는편의기능 표준입력또는출력을파일등다른입출력장치로보냄. 메타문자를사용해서 redirection 을지시한다. 기호 Redirection 의미 > 출력 redirection 출력 redirection, csh의 >! noclobber 옵션을중복정의 >> 기존파일에출력을추가기존의파일에출력을추가, csh의 noclobber 옵션을중복 >>! 정의하고파일이존재하지않으면파일생성 다른명령으로파이프출력 < 입력 redirection <<word >& >>& word로시작하는줄의앞줄까지표준입력으로받아들임표준출력과표준에러를파일로 redirection한다. 표준출력과표준에러를파일에추가한다. Redirection Redirection 을이용한텍스트파일편집 입력끝 (EOF) 표시는 ^d >> 로 redirection: 기존파일에추가
Redirection 입력 입출력혼용 Redirection Pipe 한프로세스의표준출력을다른프로세스의표준입력으로사용 하나의커다란문제를작은작업으로나누어해결하는것이가능 예 : man 명령의결과를파일에저장 $ man 명령어 colcrt > 파일 $ program1 program2 program3 http://en.wikipedia.org/wiki/image:pipeline.svg
Redirection Named Pipe 표준입출력외에파일을이용해파이프설정 $ mkfifo 파이프이름 파이프이름 사용은 redirection (<, >) 이용 두개이상의프로세스가함께실행되어야함. Keyboard stderr stdin Program1 pipe stdout stdin Display Program2 stdout, stderr 명령행편집 단순히명령을타이핑하고 Enter 키입력? 잘못쓴글자는? Backspace 복잡한명령을재사용하고싶으면? 이전에했던명령을보고싶으면? 긴명령을한꺼번에혹은한단어씩지우고싶으면? 이전명령을조금만바꿔서다시사용하고싶으면? 기타등등 명령행편집기능!
명령행편집 두가지모드 Emacs 모드 / vi 모드 vi 모드로바꾸고싶으면 set o vi Emacs 모드기본명령 명령 기능 명령 기능 ^B( ) 한문자왼쪽으로이동 ^F( ) 한문자오른쪽으로이동 ^D 오른쪽한문자삭제 ESC-B 한단어왼쪽으로이동 ESC-F 한단어오른쪽으로이동 ESC-DEL 왼쪽한단어삭제 ESC-D 오른쪽한단어삭제 ^Y 마지막삭제항목되살림 ^A 명령행시작점으로이동 ^E 명령행맨끝으로이동 ^K 현재에서끝까지삭제 명령행편집 히스토리.bash_history 에사용한명령을기록 500 개를기록하도록설정되어있다. history : 히스토리파일을보는명령 명령기능명령기능 ^P( ) 이전명령!! 마지막명령 ^N( ) 다음명령!n n 번째명령 ^R 뒤로검색!-n n번째앞의명령 string ESC-< 히스토리파일의첫명령으로시작하는마지막!string 명령 ESC-> 히스토리파일의끝명령 ^str1^str2 마지막명령의 str1 을 str2 로바꾸어반복
명령행편집 내용자동완성 TAB 함수, 경로명, 파일명등의입력시텍스트일부를입력후 TAB 키를누른다. 일치하는것이여러개있을경우가장긴것이선택된다. 자동완성관련키명령 ESC-? ESC-/ ESC-~ ESC-$ ESC-@ ESC-! ESC-TAB 기능 선택할수있는모든경우출력파일명자동완성사용자명자동완성변수명자동완성호스트명자동완성명령자동완성히스토리목록에서이전명령의자동완성 명령행편집 vi 모드명령행편집 vi 편집기사용과거의같다. 나만의편집기능정의 emacs, vi 모드다싫다면?.inputrc 내에 readline 함수를사용.inputrc Control-t: end-of-line Control-o: > output \e-b\e-x: backward-kill-word 자세한내용은매뉴얼을참조하자.
시동파일 (startup file) 셸이시작할때여러가지환경설정등기초작업을수행하는명령들을모은파일 Bourne Shell(sh):.profile C Shell(csh):.login,.cshrc Korn Shell(ksh):.profile Bash:.bash_profile,.bashrc,.bash_logout.bash_profile: 로그인시실행. 없으면.bash_login,.profile 차례로찾아수행.bashrc: 셸수행시마다실행. 로그인시에도실행되도록하려면.bash_profile 에. ~/.bashrc 를포함시킨다..bash_logout: 로그아웃시실행. 개별시동파일외에 /etc/profile, /etc/bashrc 등실행 시동파일수정 환경설정을변경하고, 그를로그인시마다변화없이유지하고싶을때 vi 등의편집기로수정 효력이생기려면? 새로로그인하거나셸을실행 source 또는. 명령어를사용하면즉각효력발생 그외환경설정파일.vimrc.emacs $ source.bashrc
Alias 명령어의별칭또는약어정의 alias name=command = 좌우에공백없어야한다. 순서에따라적용된다. 현재적용되는모든 alias를보려면? $ alias 명령어외의 alias? $ alias ss=~/system/quiz $ cd ss alias rm= rm -i alias ls= ls sfc alias la= ls a alias dir= ls alias cds= cd ~/system/quiz 공백문자로끝나는 alias 를만들어해결 고수가되면? alias 보다셸스크립트 / 함수활용 셸옵션 on 또는 off 로설정하여동작을제어 $ set o optionname $ set +o optionname 옵션을 on 옵션을 off 옵션 emacs ignoreeof noclobber noglob nounset vi 설명 emacs 모드시작. 기본값은 on ^D로로그아웃하는것방지출력재지정 (>) 시 overwrite 방지와일드카드확장방지정의하지않은변수사용시오류메시지 vi 모드시작
셸변수설정 셸변수 : bash 제공내장변수 + 사용자지정변수 on/off 만으로설정하지못하는요소설정 셸변수값설정 varname=value = 좌우로공백이없어야하고두단어이상은 로묶는다. 다른명령에변수를사용하려면이름앞에 $ 붙인다. 지정변수삭제 unset varname 변수값의확인 echo $varname 설정한변수값을환경변수로효력발생 export $varname 공통적인내장환경변수 변수 의미 변수 의미 HOME 홈디렉터리경로 BASH_VERSION 실행중인 bash의버전 PATH 명령어를탐색할경로 PWD 현재디렉터리 MAIL 메일박스의절대경로 HISTFILE 히스토리저장파일명 USER 사용자 ID HISTFILESIZE 히스토리에저장할최대명령수. 기본값은 500 SHELL 로그인셸의절대경로 EDITOR 기본편집기절대경로 TERM 터미널유형 CDPATH cd 명령시사용할탐색경로 PS1, PS2, PS3, PS4 프롬프트문자열변수
PATH 설정 명령을입력했을때그명령 ( 의실행파일 ) 이어디있는지셸이찾을수있게해주는변수 : 로구분하여경로명을입력한다. PATH=/bin:/usr/bin:$HOME/bin 이미설정된 PATH 에덧붙일때는 $PATH 활용 PATH=$PATH:/usr/local/bin 명령어를입력하면 $PATH 에설정된경로의앞에서부터찾는다. 즉, 같은이름이있으면앞의경로에있는것실행 경로가많으면명령어실행이오래걸릴까? hash 명령을한번실행해보자. 프롬프트설정 나만의프롬프트를만들자! PS1: 기본프롬프트문자열변수 미리정의된기호와사용자가선호하는문자들을사용해만든다. \ 가해석되어야하므로약한인용부호 ( ) 를사용한다.
프롬프트문자열정의 기호의미기호의미 \a ASCII beep 문자 (\007) \j 현재수행중인작업의수 \d 요일, 월, 일 형식의날짜 \l 셸의터미널디바이스명 \e ASCII escape 문자 (\033) \v Bash 의버전 \H 호스트명 \V Bash 의 release \h 처음. 까지의호스트명 \w 현재작업디렉터리 (~/ ) \n RETURN (carriage return + linefeed) \W 현재작업디렉터리 ( 마지막 ) \s 실행중인셸이름 \! 현재명령의히스토리번호 \T HH:MM:SS 형식 (12시간제) 의현재시간 \# 현재명령의명령번호 \t HH:MM:SS 형식 (24시간제) 의현재시간 \$ UID가 0이면 #, 아니면 $ 출력 \@ am/pm 형식 (12시간제) 의현재시간 \nnn 8진수로된문자코드 \A HH:MM 형식 (24시간제) 의현재시간 \\ backslash \u 현재사용자명 \[ \] 비출력용문자열시작과끝 vi 환경설정.vimrc 파일에자신만의 vi 환경을설정 옵션, 키보드매핑, 화면구성 ( 색깔등 ), 프로그래밍언어별설정등가능 옵션 220 개가넘는옵션 set option=value vi 실행시 ex-mode 에서직접입력가능 즉시효력을발생하나다음 vi 실행시에는유지되지않는다. 옵션을리셋 : set nooption 어떤옵션의값을보고싶으면 : set option? 어떤옵션의값을디폴트값으로설정 : set option&
vi 환경설정 옵션예 set ic set ai set ts=4 set sm set si set bg=dark ignorecase autoindent tabstop=4 showmatch smartindent background command 도미리설정 syntax on 언어의문법에따라색깔을달리표현