Linux SHELL SHELL? 리눅스는크게커널, 쉘, 사용자프로그램으로분류 커널은운영체제의핵심으로서메모리나프로세서등을관리하며시스템을제어하는역할을함 사용자프로그램은일반적으로사용하는 SSH, FTP, HTTP 등의프로그램등을말함 쉘은커널과직접적으로연결되어사용자가프로그램에서실행시킨명령어를해석하여그결과를커널로보내는역할을함 ( 명령어해석기 ) 다양한종류가있으며사용자의활용도와사용목적에따라각각에맞는쉘을선택해서사용할수있음 리눅스는기본적으로 BASH SHELL 이설정되어있으며, 다른쉘을사용하고싶다면작업중에쉘을바꾸어사용할수도있고, 로그인시다른쉘을지정해서사용할수있음
Linux SHELL 쉘의종류 Bourne Shell 1979 년, Bell 연구소의 Steven Bourne 이개발한최초의대중화된유닉스쉘 오랜시간동안 UNIX 시스템의표준구성요소였으나, 후에개발된여러쉘에비하여기능적인면에서부족한점이있음 Korn Shell(ksh) AT&T 사의 David Korn 이제작 Bourne Shell 을포함하는더욱강력한쉘이며일반적으로유닉스에서많이쓰임 Bourne Shell 의기능들을확장한쉘로 Bourne Shell 과의호환성이높이며, C Shell 의기능들도제공 C Shell(csh) 버클리대학교에서개발됨 Bourne Shell 과호환이되지만인터페이스구조가다르고, C 언어문법과제어구조에비슷한면을가지고있음 명령어모드에서다양한기능을제공하기때문에유닉스실행시기본쉘로주로쓰이기도함
Linux SHELL 쉘의종류 TC Shell(tcsh) 1908년대초반, Ken Greer 등이 C Shell을확장시켜제작 C Shell의모든기능을제공하면서, 명령행편집을 emacs 스타일방식을취함 Bourne Agine Shell(bash) 현재리눅스시스템의기본 Shell이며가장많이이용됨 Bourne Shell의기능을추가, 발전시킨쉘 C Shell과 Korn Shell에서제공하는기능들도상당수포함되어있음
Linux SHELL /etc/shells 파일 # cat /etc/shells 사용할수있는쉘들의경로가설정되어있음
Linux SHELL 자신의쉘확인 # echo $SHELL -> SHELL 변수확인 로그인후자신이사용하는쉘이 SHELL 변수에저장되어있음
쉘변경
Linux SHELL 변경 # /bin/ksh -> 변경할쉘을실행시키면됨
Linux SHELL 변경 chsh, /etc/passwd, usermod -s # chsh -> Shell 을영구적으로변경 usermod -s 로변경할수도있으며직접 /etc/passwd 를수정할수도있음
쉘의유용한기능
Linux SHELL 의유용한기능 명령완성기능 명령어의길이가길거나, 명령어의이름이일부만생각날경우일부만입력하고 <Tab> 키를입력하게되면, 가능한명령어를완성시켜주게됨 해당하는명령어가다수일경우해당명령어들의리스트를출력 명령히스토리기능 사용했던명령어는 ~/.bash_history 파일에저장되어있음 이미사용한명령어들을다시사용하고싶을경우키보드의 키나 를사용하여실행했던명령어를검색할수있음 실행했던명령어가저장되는개수는 HISTSIZE 변수에지정할수있음 메타문자사용 명령어를실행할때파일들을인수로사용할경우특별한문자열을포함하거나혹은동시에파일들을지정할경우가있음 이러한경우메타문자를사용함
Linux SHELL 의유용한기능메타문자들 문자의미 > 표준출력을파일에기록하는출력리다이렉션기호 >> 표준출력을파일의끝에추가하는출력리다이렉션기호 < 파일로부터표준입력을읽어들이는입력리다이렉션기호 * 널문자열을포함한모든문자열치환? 모든단일문자와치환 [...] 대괄호안의어떠한문자와도일치하는파일치환대표문자 표준출력을입력으로보내는파이프기호 조건부실행 : 이전명령이실패하면실행 ; 명령어의순서에사용 & 백그라운드모드실행 && 조건부실행 : 이전명령이성공할경우실행 # 주석처리 $ 변수의접근
Linux SHELL 의유용한기능메타문자들 문자의미 > 표준출력을파일에기록하는출력리다이렉션기호 >> 표준출력을파일의끝에추가하는출력리다이렉션기호 < 파일로부터표준입력을읽어들이는입력리다이렉션기호 * 널문자열을포함한모든문자열치환? 모든단일문자와치환 [...] 대괄호안의어떠한문자와도일치하는파일치환대표문자 표준출력을입력으로보내는파이프기호 조건부실행 : 이전명령이실패하면실행 ; 명령어의순서에사용 & 백그라운드모드실행 && 조건부실행 : 이전명령이성공할경우실행 # 주석처리 $ 변수의접근
Linux SHELL 의유용한기능 리다이렉션 (Redirection) 리눅스에서는명령수행시에표준입력과표준출력장치가있음 보통키보드는표준입력, 모니터가표준출력이됨 이러한표준입력과출력을필요에따라서변경할수있음 리다이렉션 의미 명령 > 파일명명령 >> 파일명명령 >& 파일명명령 2> 파일명명령 2>& 1 명령 >>& 파일명명령 >! 파일명명령 >&! 파일명명령1 명령2 명령1 & 명령2 명령의실행결과를파일로출력명령의실행결과를파일의끝에추가하여출력명령의실행결과와에러를파일로출력파일로에러를출력명령의에러를표준출력과같은곳으로출력명령의실행결과와에러를지정한파일의끝에추가하여출력명령실행결과를지정한파일이이미존재해도무시하고출력명령실행결과와에러를지정한파일이이미존재해도무시하고출력명령1의출력을명령2의입력으로보내어실행명령1의실행결과와에러를명령2의입력으로보내어실행
쉘환경변수
Linux SHELL 환경변수 쉘환경변수 쉘의환경변수는쉘환경을입맛에맞게, 혹은필요에맞게설정하는데사용되는값들을가지고있음. 변수값을수정함으로써사용자마다원하는환경을설정할수도있음 변수 의미 변수 의미 BASH 사용하고있는 bash 쉘의경로 BASH_VERSION 사용하고잇는 bash 쉘의버전 COLUMNS 터미널의행수 ( 기본값 = 80) DISPLAY 현재 X-Window Display 위치 HISTFILE 히스토리파일의이름 HISTFILESIZE 히스토리파일사이즈 HISTSIZE 히스토리의개수 HOME 사용자의홈디렉토리 HOSTNAME 시스템의호스트명 HOSTTYPE 시스템의타입값 LINES 터미널의라인수 LOGNAME 로그인사용자명 LS_COLORS ls ls 명령어사용시파일종류별색상지정 MAIL 메일저장위치 MAILCHECK 메일점검시간 ( 기본값 = 60초 ) MANPATH man man 페이지의경로 OSTYPE 운영체제의타입 PATH 명령을찾을검색경로 PS1 주프롬프트문자열설정값 UID 현재사용자의 UID 값
Linux SHELL 환경변수변수값의확인 # printenv -> 현재시스템에설정된모든환경변수값확인 # echo $ 변수명 -> 변수명에해당하는변수값확인
Linux SHELL 환경변수변수값설정및변경 # export [ 환경변수명 ]=[ 변수값 ] -> 환경변수명으로변수값을설정
환경설정파일
Linux SHELL 프롬프트변경 쉘프롬프트변경 쉘환경변수인 PS1 을변경하면됨 export PS1= 프롬프트형식 옵션 의미 \t 현재시간을 HH:MM:SS 형식으로출력 \d 현재날짜를 요일월일 형식으로출력 \s 쉘의이름을출력 \w 현재작업디렉토리를절대경로로출력 \W 현재작업디렉토리의이름만출력 \u 현재사용자의사용자명을출력 \h 호스트만 \H 호스트이름전체 \# 현재명령의명령번호 \$ root이면 #, 일반사용자면 $ \! 이명령의히스토리번호 \nnn 8 진수에해당하는 nnn 에해당하는문자 \[ 비출력문자의시퀀스를시작 \] 비출력문자의시퀀스를종료
Linux SHELL 프롬프트변경 # export PS1= 쉘프롬프트형식지정 -> 쉘프롬프트변경 지정한쉘프롬프트를계속사용하고싶을경우사용자홈디렉토리의.bashrc 파일에내용을추가하면됨
환경설정파일
Linux SHELL 환경설정파일 /etc/profile 시스템환경설정과시작프로그램들 리눅스시스템전반에적용되는환경변수들을설정 $PATH, $USER, $LOGNAME, $MAIL, $HOSTNAME, $HISTSIZE,... 등의환경변수를지정해줌 BASH Shell 이시작될때실행됨 ~/.bash_profile 사용자환경설정과시작프로그램들 사용자의홈디렉토리에서찾으면 /etc/profile 다음으로읽어들임 없을경우 ~/.bash_login 파일을찾아대신읽으며, ~/.bash_login 파일도없을경우 ~/.profile 파일을찾음 즉, 상위 3 파일중하나만처리하며, ~/.bashrc 파일이있으면읽어들임
Linux SHELL 환경설정파일 ~/.bashrc 사용자 alias 와함수들 /etc/bashrc 시스템의 alias 와함수들 시스템전반에적용되는 umask, 프롬프트형태를지정 ~/.bash_history 입력된명령 (history) 들이저장 HISTFILESIZE 환경변수를통해크기를조정할수있음 ~/.bash_logout 로그아웃할때실행
Linux SHELL 환경설정파일 BASH Shell 이초기화파일을처리하는순서 1 /etc/profile 파일이있으면실행 2 ~/.bash_profile 파일이있으면실행 -> 없을경우 ~/.bash_login 실행 -> 없을경우 ~/.profile 실행 3 ~/.bashrc 실행 즉, 제일마지막에실행되는.bashrc 의우선순위가가장높게됨
Linux SHELL 환경설정파일.bashrc 파일변경 # vi ~/.bashrc 쉘을실행할때 alias 와쉘프롬프트변경이적용
Linux SHELL 환경설정파일변경한내용확인 접속하면쉘프롬프트모양이바뀌어있음
쉘스크립트
Shell 스크립트파일만들기 쉘스크립트 쉘을통하여프로그램을만들수있으며이러한프로그램을쉘스크립트라고함 Linux 환경에서명령어및환경변수등을사용하기용이하므로여러명령어들을연결하여원하는결과를얻어낼수있음 C 프로그램과유사한형태로프로그래밍가능함 (ex : if 문, while 문, case 문, for 문, 연산,... 등 )
Shell 스크립트파일만들기 1 변수설정및출력 read.sh 작성내용
Shell 스크립트파일만들기 1 변수설정및출력 - 결과 read.sh 실행결과
Shell 스크립트파일만들기 2 연산하기 (expr) expr.sh 작성내용
Shell 스크립트파일만들기 2 연산하기 (expr) - 결과 expr.sh 실행결과
Shell 스크립트파일만들기 3 while 문과 if 문및 sleep 사용 표현방식 의미 표현방식 의미 [ $A gt $B ] A가 B보다크다 [ $A lt $B ] A가 B보다작다 [ $A ge $B] A가 B보다크거나같다 [ $A le $B ] A가 B보다작거나같다 [ $A eq $B ] A와 B가같다 [ $A ne $B ] A와 B가다르다
Shell 스크립트파일만들기 3 while 문과 if 문및 sleep 사용 - 결과 whiletest.sh 실행내용
Shell 스크립트파일만들기 4 사용자계정생성프로그램만들기 useradd.sh 작성내용
Shell 스크립트파일만들기 4 사용자계정생성프로그램만들기 - 결과 useradd.sh 실행내용
Shell 스크립트파일만들기 5 사용자계정정보확인하기 usersearch.sh 작성내용
Shell 스크립트파일만들기 5 사용자계정정보확인하기 - 결과 usersearch.sh 실행내용
실습
Shell 스크립트파일만들기실습 1 - 다음과같은역할을하는프로그램만들기
Shell 스크립트파일만들기실습 2 - 다음과같은역할을하는프로그램만들기