6장 콘 셸 뇌를 자극하는 Solaris Bible
학습 내용 셸이란 무엇인가? 입출력 재지정 콘 셸 주무르기 변수 콘 셸 메타 문자 이전 명령어 목록 alias 콘 셸 설정 파일 셸 스크립트 뇌를 자극하는 Solaris Bible
셸이란 무엇인가? 셸의 역할 사용자가 내린 명령어를 해석해서 커널에 전달 셸 스크립트 실행 명령어 경로명 해석 와일드 카드 해석 사용자 편이 제공 명령어 입출력 제어 뇌를 자극하는 Solaris Bible
입출력 재지정 입출력 재지정의 역할 명령어의 입출력을 키보드와 화면 대신 파일로 지정 명령어 실행 결과를 다른 명령어의 입력으로 제공 명령어 입력 데이터를 파일에서 제공 명령어의 실행 결과를 파일에 저장 파일 디스크립터(fd)로 입출력 재지정 fd fd 명칭 용도 표준 장치 stdin 명령어의 입력 키보드 1 stdout 명령어의 정상 출력 화면 2 stderr 명령어의 오류 출력 뇌를 자극하는 Solaris Bible
입출력 재지정 입력 재지정 키보드 대신 파일에서 입력 데이터 제공 실행 형식 실행 예 command < filename cat < filename 뇌를 자극하는 Solaris Bible
입출력 재지정 출력 재지정 명령어의 정상적인 실행의 결과를 화면이 아닌 파일에 저장 실행 형식 실행 예 command > filename command 1> filename command >> filename command 1>> filename 실행 예 cat > filename cat >> filename 뇌를 자극하는 Solaris Bible
입출력 재지정 오류 재지정 명령어를 실행할 때 발생한 오류를 화면이 아닌 파일에 저장 실행 형식 실행 예 command 2> filename command 2>> filename 실행 예 cat 2> filename cat 2>> filename 뇌를 자극하는 Solaris Bible
입출력 재지정 동일한 파일에 출력 재지정과 오류 재지정 결과 기록 동일한 파일에 출력 재지정과 오류 재지정 결과 추가 command > filename 2> filename command 2> filename > filename command > filename 2>&1 command 2> filename >&2 동일한 파일에 출력 재지정과 오류 재지정 결과 추가 command >> filename 2>> filename command 2>> filename >> filename command >> filename 2>&1 command 2>> filename >&2 뇌를 자극하는 Solaris Bible
입출력 재지정 파이프 (pipe) tee (T) 앞 명령어의 실행 결과를 뒷 명령어의 입력으로 사용 실행 형식 command | command [ | command ] tee (T) 앞 명령어의 실행 결과를 뒷 명령어의 입력으로 사용하는 동시에 파일에 저장 tee [-a] filename 옵션 의미 비고 -a 지정한 파일이 존재하면 새로운 내용을 추가 Append 뇌를 자극하는 Solaris Bible
입출력 재지정 뇌를 자극하는 Solaris Bible
입출력 재지정 뇌를 자극하는 Solaris Bible
입출력 재지정 뇌를 자극하는 Solaris Bible
콘 셸 주무르기 콘 셸 옵션 콘 셸의 기능 설정을 제어 실행 형식 set –o [option] set +o [option] 의미 비고 -o 콘 셸의 해당 기능을 활성화 +o 콘 셸의 해당 기능을 비활성화 뇌를 자극하는 Solaris Bible
콘 셸 주무르기 출력 재지정 덮어쓰기 방지 출력 재지정으로 명시한 파일이 존재할 경우 명령어 실행이 안됨 실행 형식 set –o noclobber set +o noclobber noclobber 옵션이 활성화된 상태에서 출력 재지정 파일을 강제로 덮어쓸 경우 command >| filename 뇌를 자극하는 Solaris Bible
emacs 편집기의 편집 방법을 명령 행 편집에 사용 콘 셸 주무르기 파일 이름 완성과 명령 행 편집 이전에 사용한 명령어의 일부 글자를 수정하여 실행 실행 형식 set –o vi | emacs set +o vi | emacs 옵션 의미 비고 vi vi 편집기의 편집 방법을 명령 행 편집에 사용 emacs emacs 편집기의 편집 방법을 명령 행 편집에 사용 뇌를 자극하는 Solaris Bible
콘 셸 주무르기 로그아웃 방지 입력 재지정에서 파일의 끝을 의미하는 EOF 입력으로 로그아웃 방지 실행 형식 set –o ignoreeof set +o ignoreeof 뇌를 자극하는 Solaris Bible
변수 역할 종류 셸이 동작하는 데 필요한 임시 데이터를 저장 미리 정의된 변수의 경우 셸의 동작을 제어 환경 변수 (environment variable) 프로그래밍 언어에서 전역 변수에 해당 현재 셸뿐만 아니라 현재 셸에서 실행되는 모든 셸과 명령어가 공유 셸 변수 (shell variable) 프로그래밍 언어에서 지역 변수에 해당 현재 셸에만 존재 뇌를 자극하는 Solaris Bible
변수 중요한 변수 EDITOR와 VISUAL 명령 행 편집 기능과 파일 이름 완성 기능에 사용하는 편집 방법 지정 crontab 명령어의 설정 파일을 편집하는 명령어를 지정 실행 형식 export EDITOR=vi | EDITOR=emacs export VISUAL=vi | VISUAL=emacs 뇌를 자극하는 Solaris Bible
변수 중요한 변수 PS1 (Prompt String 1) PATH MANPATH (MAN page PATH) 셸 프롬프트 저장 실행 파일이 있는 경로명을 지정 셸 프롬프트에서 사용자가 입력한 명령어는 PATH 변수에 지정된 경로에서 맨 먼저 찾은 명령어로 실행 MANPATH (MAN page PATH) 도움말이 있는 경로명을 지정 man 명령어에서 도움말 파일을 찾기 위해 참고 뇌를 자극하는 Solaris Bible
변수 중요한 변수 HOME (HOME directory) PWD (Print Working Directory) 사용자가 로그인할 때 위치한 디렉토리의 절대 경로명을 저장 PWD (Print Working Directory) 현재 명령어를 실행하는 경로의 절대 경로명을 저장 pwd 명령어에서 참고 LOGNAME (LOGin NAME) 사용자의 로그인 이름을 저장 HOSTNAME 현재 사용하는 시스템의 이름을 저장 뇌를 자극하는 Solaris Bible
변수 뇌를 자극하는 Solaris Bible
변수 뇌를 자극하는 Solaris Bible
변수 뇌를 자극하는 Solaris Bible
변수 뇌를 자극하는 Solaris Bible
콘 셸 메타 문자 와일드 카드처럼 콘 셸에서 정의한 의미를 갖는 특수한 기호 ' ' (single quot) 모든 메타 문자의 의미를 제거 " " (double quot) ', $, \, " 등의 일부 메타 문자를 제외한 나머지 메타 문자의 의미를 제거 \ (back slash) 바로 다음에 위치하는 메타 문자의 의미를 제거 뇌를 자극하는 Solaris Bible
콘 셸 메타 문자 ` ` (back quot) ; (semicolon) 명령어의 실행 결과를 다른 명령어의 아규먼트로 전달 차례대로 실행되는 여러 개의 명령어를 한 줄에 나열 나열된 순서에 따라 명령어들이 순차적으로 실행 alias 명령어와 find 명령어에서 주로 사용 find directory expression –exec command {} \; find directory expression –exec command {} ';' find directory expression –exec command {} ";" 뇌를 자극하는 Solaris Bible
콘 셸 메타 문자 뇌를 자극하는 Solaris Bible
콘 셸 메타 문자 뇌를 자극하는 Solaris Bible
콘 셸 메타 문자 뇌를 자극하는 Solaris Bible
콘 셸 메타 문자 뇌를 자극하는 Solaris Bible
이전 명령어 목록 셀 프롬프트에서 입력한 명령어, 아규먼트, 옵션 등을 저장 HISTFILE 변수로 지정한 파일에 목록 저장 HISTSIZE 변수로 지정한 개수만큼 저장 기본적으로 $HOME/.sh_history 파일에 최근에 실행한 명령어 128개 저장 뇌를 자극하는 Solaris Bible
이전 명령어 목록 history 명령어 콘 셸에 저장된 이전 명령어 목록을 번호와 함께 출력 명령어 형식 history [-nr] [-number] [first [last]] 옵션 의미 비고 -n 번호없이 명령어 목록만 출력 No number -r 가장 최근에 실행한 명령어부터 출력 Recently command -number 출력되는 명령어 개수를 지정 first 이전 명령어 목록에서 출력을 원하는 첫 번째 명령어 last 이전 명령어 목록에서 출력을 원하는 마지막 명령어 뇌를 자극하는 Solaris Bible
이전 명령어 목록 history 명령어 뇌를 자극하는 Solaris Bible
이전 명령어 목록 history 명령어 뇌를 자극하는 Solaris Bible
이전 명령어 목록 history 명령어 뇌를 자극하는 Solaris Bible
이전 명령어 목록 history 명령어 뇌를 자극하는 Solaris Bible
이전 명령어 목록 r 명령어 이전에 실행한 명령어를 다시 실행 명령어 형식 r [ command | command_number ] r [ old=new [ command_number ] ] 옵션 의미 비고 command 이전 명령어 목록에서 실행을 원하는 명령어 command number 이전 명령어 목록에서 실행을 원하는 명령어 번호 old=new 이전 명령어 목록에서 old를 new로 변경하여 실행 뇌를 자극하는 Solaris Bible
이전 명령어 목록 r 명령어 뇌를 자극하는 Solaris Bible
이전 명령어 목록 PS1 변수 시스템의 다양한 정보를 반영하도록 변경하여 시스템 편이성 증대 예제 PS1="$LOGNAME@$HOSTNAME \$PWD \! $ " 사용자 이름, 시스템 이름, 작업 경로명, 이전 명령어 목록 번호 뇌를 자극하는 Solaris Bible
alias 기존의 명령어를 조합하여 새로운 명령어를 정의. 실행 형식 항상 특정 명령어에 특정 옵션을 부여해서 실행 긴 명령어 이름을 짧게 줄임 기억하기 힘든 명령어를 쉬운 명령어로 바꿈 실행 형식 alias [alias_name = command_list] unalias [alias_name | -a] 명령어 기능 비고 alias 새로운 명령어를 정의 unalias alias로 생성한 명령어를 삭제 뇌를 자극하는 Solaris Bible
alias 뇌를 자극하는 Solaris Bible
alias 뇌를 자극하는 Solaris Bible
alias 뇌를 자극하는 Solaris Bible
콘 셸 설정 파일 콘 셸의 변경된 설정을 로그인할 때마다 자동으로 설정 콘 셸 설정 파일의 위치와 적용 순서 set 명령어를 이용한 콘 셸 옵션 설정 alias 명령어를 이용한 새로운 명령어 생성 export 명령어를 이용한 콘 셸 변수 설정 콘 셸 설정 파일의 위치와 적용 순서 순서 파일 이름 설명 1 /etc/profile 콘 셸이 로그인 셸로 지정된 모든 사용자가 로그인할 때마다 읽어서 적용하는 파일 2 $HOME/.profile 콘 셸이 로그인 셸로 지정된 사용자가 로그인할 때 해당 파일이 홈 디렉토리에 존재하면 읽어서 적용한다. 3 $HOME/.kshrc 콘 셸이 로그인 셸로 지정된 사용자가 로그인할 때 $HOME/.profile 파일에 해당 파일이 설정된 경우에만 읽어서 적용한다. 뇌를 자극하는 Solaris Bible
콘 셸 설정 파일 /etc/profile 콘 셸을 로그인 셸로 지정한 모든 사용자가 시스템에 로그인할 때마다 가장 먼저 읽어서 적용하는 파일 작업 내용 하드 디스크의 사용량을 확인한다. /etc/motd 파일의 내용을 화면에 출력한다. 사용자에게 도착한 새로운 메일이 있는지 확인한다. 새로 생성되는 파일과 디렉토리의 권한을 지정한다. 뇌를 자극하는 Solaris Bible
콘 셸 설정 파일 /etc/profile 뇌를 자극하는 Solaris Bible
콘 셸 설정 파일 $HOME/.profile /etc/profile 파일 다음에 읽어서 적용하는 콘 셸 설정 파일 PATH, MANPATH, LD_LIBRARY_PATH, ENV 등의 셸 변수를 정의 뇌를 자극하는 Solaris Bible
콘 셸 설정 파일 $HOME/.kshrc $HOME/.profile 파일에서 ENV 변수를 $HOME/.kshrc 파일로 설정한 경우에만 읽어서 적용 다른 이름을 사용해도 무방 콘 셸에 추가된 부가 기능을 설정하는 용도로 주로 사용 set 명령어를 이용하여 콘 셸의 기능을 설정 alias 명령어를 이용하여 새로운 명령어 생성 뇌를 자극하는 Solaris Bible
콘 셸 설정 파일 콘 셸 설정 파일 새로 읽어서 설정 /etc/profile, $HOME/.profile, $HOME/.kshrc 파일은 사용자가 로그인할 때만 자동으로 적용 콘 셸 설정 파일을 변경한 이후에는 . 명령어를 이용하여 적용 가능 실행 형식 . directory_name/filename 뇌를 자극하는 Solaris Bible
콘 셸 설정 파일 뇌를 자극하는 Solaris Bible
셸 스크립트 셸 스크립트란? 솔라리스에서 제공하는 다양한 명령어와 셸에서 제공하는 기능을 조합하여 새로운 만든 명령어 프로그래밍 언어와 비슷한 키워드과 흐름 제어를 사용 뇌를 자극하는 Solaris Bible
셸 스크립트 기본적인 셸 스크립트 위에서 아래도 실행하는 순차적인 흐름 구조 뇌를 자극하는 Solaris Bible
셸 스크립트 기본적인 셸 스크립트 실행 방법 셸로 스크립트를 직접 해석 파일의 권한에 실행 권한을 추가하여 실행 뇌를 자극하는 Solaris Bible
셸 스크립트 기본적인 셸 스크립트 # 기호 이후는 모두 주석문으로 처리 셸 스크립트를 해석할 셸을 스크립트 내에 직접 지정 가능 뇌를 자극하는 Solaris Bible
셸 스크립트 셸 스크립트와 아규먼트 변수 이름 의미 $0 셸 스크립트의 이름 $1 ~ $9 셸 스크립트의 첫 번째 아규먼트, … , 아홉 번째 아규먼트 ${10} ~ ${n} 셸 스크립트의 열 번째 아규먼트, … , n 번째 아규먼트 $# 셸 스크립트의 아규먼트 개수 $@ 셸 스크립트의 모든 아규먼트 $* 뇌를 자극하는 Solaris Bible
셸 스크립트 셸 스크립트와 아규먼트 뇌를 자극하는 Solaris Bible
셸 스크립트 흐름 제어를 위한 다양한 표현식: 파일 관련 본 셸 콘 셸 의미 비고 [-r filename] filename의 내용을 읽을 수 있으면 TRUE Readable [-w filename] [[-w filename]] filename의 내용을 변경할 수 있으면 TRUE Writable [-x filename] [[-x filename]] filename을 실행할 수 있으면 TRUE Executable [[-O filename]] filename의 소유주가 셀 스크립트를 실행하는 사람과 일치하면 TRUE Owner [[-G filename]] filename의 그룹 소유주가 셀 스크립트를 실행하는 사람이 속한 그룹이면 TRUE Group owner 뇌를 자극하는 Solaris Bible
셸 스크립트 흐름 제어를 위한 다양한 표현식: 파일 관련 본 셸 콘 셸 의미 비고 [-f filename] filename이 일반 파일이면 TRUE File [-d filename] [[-d filename]] filename이 디렉토리이면 TRUE Directory [-c filename] [[-c filename]] filename이 캐릭터 디바이스 파일이면 TRUE Character device [-b filename] [[-b filename]] filename이 블록 디바이스 파일이면 TRUE Block device [[-L filename]] filename이 심볼릭 링크이면 TRUE Symbolic link [-s filename] [[-s filename]] filename의 크기가 0보다 크면 TRUE Size [[-e filename]] filename이 존재하면 TRUE Exist 뇌를 자극하는 Solaris Bible
셸 스크립트 흐름 제어를 위한 다양한 표현식: 숫자 관련 본 셸 콘 셸 의미 비고 [$n1 –eq $n2] (($n1 == $n2)) n1과 n2가 같으면 TRUE Equal [$n1 –ne $n2] (($n1 != $n2)) n1과 n2가 다르면 TRUE Not Equal [$n1 –lt $n2] (($n1 < $n2)) n1이 n2보다 작으면 TRUE Less Than [$n1 –gt $n2] (($n1 > $n2)) n1이 n2보다 크면 TRUE Greater Than [$n1 –le $n2] (($n1 <= $n2)) n1이 n2보다 작거나 같으면 TRUE Less than or Equal [$n1 –ge $n2] (($n1 >= $n2)) n1이 n2보다 크거나 같으면 TRUE Greater than or Equal 뇌를 자극하는 Solaris Bible
셸 스크립트 흐름 제어를 위한 다양한 표현식: 문자열 관련 본 셸 콘 셸 의미 비고 [s1 = s2] [[s1 == s2]] s1가 s2가 같으면 TRUE [s1 != s2] [[s1 != s2]] s1과 s2가 다르면 TRUE [[s1 == pattern]] s1이 pattern으로 표현되면 TRUE [[s1 != pattern]] s1이 pattern으로 표현안되면 TRUE [s1 < s2] [[s1 < s2]] s1이 s2보다 사전순으로 앞서면 TRUE [s1 > s2] [[s1 > s2]] s2가 s1보다 사전순으로 앞서면 TRUE [-z s2] [[-z s2]] s2의 길이가 0이면 TRUE [-n s2] [[-n s2]] s2의 길이가 1이상이면 TRUE 뇌를 자극하는 Solaris Bible
셸 스크립트 흐름 제어를 위한 다양한 표현식: 다수의 조건을 동시에 표현 본 셸 콘 셸 의미 비고 -o || 양쪽 조건 중에서 어느 하나라도 만족하면 TRUE -a && 양쪽 조건 모두를 만족하면 TRUE ! 조건의 결과를 반대로 바꿈 뇌를 자극하는 Solaris Bible
셸 스크립트 콘 셸의 수치 연산자 연산자 의미 + 덧셈 연산자 - 뺄셈 연산자 * 곱셈 연산자 / 나눗셈 연산자 % 몫 연산자 >> 비트 우측 이동 연산자 << 비트 좌측 이동 연산자 ~ 1의 보수 연산자 & AND 연산자 | OR 연산자 ^ XOR 연산자 = 할당 연산자 op= 연산 후 할당 연산자 (+=, -=, *=, /=, %=, >>=, <<=, ~=, &=, |=, ^=) ++ 1 증가 연산자 -- 1 감소 연산자 뇌를 자극하는 Solaris Bible
셸 스크립트 if 문 조건의 결과가 참 또는 거짓인지에 따라서 실행 부분이 결정 if 조건문 then 명령어들 fi else fi if 조건문 then 명령어들 elif 조건문 else fi 뇌를 자극하는 Solaris Bible
셸 스크립트 if 문 뇌를 자극하는 Solaris Bible
셸 스크립트 if 문 뇌를 자극하는 Solaris Bible
셸 스크립트 if 문 뇌를 자극하는 Solaris Bible
셸 스크립트 case 문 변수의 값이 해당하는 패턴의 명령어들을 실행 case value in pattern1|pattern2) 명령어들 ;; pattern3) *) esac 뇌를 자극하는 Solaris Bible
셸 스크립트 case 문 뇌를 자극하는 Solaris Bible
셸 스크립트 case 문 뇌를 자극하는 Solaris Bible
셸 스크립트 case 문 뇌를 자극하는 Solaris Bible
셸 스크립트 for 문 미리 정해진 횟수를 반복하여 명령어들을 실행 for var in list_of_value do 명령어들 done 뇌를 자극하는 Solaris Bible
셸 스크립트 for 문 뇌를 자극하는 Solaris Bible
셸 스크립트 while 문 조건을 만족하는 동안 명령어들을 실행 while 조건문 do 명령어들 done 뇌를 자극하는 Solaris Bible
셸 스크립트 while 문 뇌를 자극하는 Solaris Bible
셸 스크립트 until 문 조건을 만족하는 않는 동안 명령어들을 실행 until 조건문 do 명령어들 done 뇌를 자극하는 Solaris Bible
셸 스크립트 while 문 뇌를 자극하는 Solaris Bible
셸 스크립트 select 문 메뉴를 만들고 사용자가 메뉴를 선택한 값에 따라서 명령어들을 실행 select var in list_of_value do 명령어들 done 뇌를 자극하는 Solaris Bible
셸 스크립트 select 문 뇌를 자극하는 Solaris Bible
셸 스크립트 /sbin/rc0 뇌를 자극하는 Solaris Bible
셸 스크립트 K06mipagent 뇌를 자극하는 Solaris Bible
요약정리 입출력 재지정을 이용하면 명령어의 실행 결과를 저장할 수 있고, 명령간의 데이터 전달이 빠르고 용이하다. 콘 셸의 기능을 설정할 때는 변수, 옵션 등을 사용할 수 있다. alias 명령어와 history 명령어를 이용하면 편하게 명령어를 이용할 수 있다. 콘 셸의 if 문, case 문, for 문, while 문, until 문, select 문 등을 이용하여 작성된 셸 스크립트를 이용하면 더욱 편리하게 솔라리스를 사용할 수 있다. 뇌를 자극하는 Solaris Bible