1) 셸의 개념
- 사용자가 커널의 서비스 기능을 사용할 수 있도록 하는 사용자 인터페이스
- 사용자로부터 명령어를 입력받고, 해석해서 처리하는 대화형 인터페이스
2) 셸의 유형
본셸계열 : sh, ksh, bash
C셸계열 : csh, tcsh
3) 셸 설정 및 확인
#echo $SHELL
#chsh -l
#cat /etc/shells
#cat /etc/passwd | grep shwan
#chsh -s /bin/csh
그 외 set 명령어를 통한 확인, export 명령어를 이용한 전역 환경변수 등록 등이 있다.
4) 셸의 시작과 종료
- 로그인셸. userid + passwd 를 입력해서 진입하는 방식
- 비로그인셸. 로그인없이 티폴트로 실행되는 방식
- 인터랙티브 셸. 대화형으로 셸을 통해 명령하고 결과를 받는 방식
- 비인터랙티브 셸. 셸 스크립트에서 셸을 실행하는 경우
- 로그인 셸의 경우 /etc/profile, /etc/profile.d 를 이용해 실행
- 로그인 셸의 경우 ~/.bash_profile, ~/.bash_login ~/.profile 순으로 먼저 존재하는 파일을 읽어서 실행한다.
- 로그인셸이 아니면 인터렉티브 셸을 확인함
- 인터렉티브 셸의 경우 /etc/bashrc 를 읽어 ~/.bashrc 를 실행함
- logout, exit, Ctrl + D 를 이용
시스템 설정 파일
- /etc/profile , /etc/profile.d/*, /etc/bashrc
사용자 설정파일
- ~/.bash_profile, ~/.bash_login, ~/.profile,
- ~/.bashrc, ~/.bash_logout
5) 셸에서 유용한 기능
자동완성 기능(bash-completion)
현재 경로에 입력하려는 문자와 매칭되는 파일명이나 명령 후보를 자동으로 보여줌. TAB 입력하여 후보 확인.
히스토리 기능
- 사용자가 입력한 명령어가 보관이 됨. 저장 명령어를 열람하고 실행 가능.
$history- 특정 명령어를 실행하기 위해 열람한 번호를 !와 붙여 사용
!2- 히스토리 지우기
$history -c- 직전 명령어 입력
$!!- 최근 3개 히스토리
$history 3
alias 기능
- alias 설정
$alias show-me-passwd='cat /etc/passwd'- alias 해제
$unalias show-me-passwd
셸 키보드 단축키
- 여러 텍스트 제어 단축키 제공
명령어 치환 기능 Command substitution- 명령어의 실행 결과를 명령어의 인자로 넘기는 기능
$(command) 또는 'command'- touch 명령어를 통해 현재시각을 파일명으로 갖는 파일 생성
(date)"
표준 입출력 기능
- 사용자의 입력을 프로그램에 전달하고 결과를 보여줌.
표준입력 stadin 0 데이터 입력 기본장치
표준출력 stdout 1 출력 기본장치
표준에러 stderr 2 오류발생시 출력 기본장치
리다이렉션 기능
- 표준 출력 : > , >>
- 표준 입력 : < , <<
- ls -l 출력결과를 listing-file 파일로 표준출력 재지정.
$ls -l > listing-file- 표준입력을 파일로 재지정하여 sort 프로그램에게 데이터 전달
$sort < listing-file- cat 명령어의 옵션에 존재하지 ㅇ낳는 파일 지정하면 에러가 표준에러로 발생
$cat no-file 2>errorsfile- tmp 폴더에 'pulse'로 시작하는 파일을 찾고 표준에러는 error.log 파일로 재지정.
$find /tmp -name 'pulse*' 2>error.log- 표준에러를 표준출력과 함께 재지정. 디렉터리 출력결과와 에러 모두 dirlist파일로 재지정.
$Is Deskto Documents > dirlist 2>&1
파이프 기능
- tee 명령어는 표준입력으로부터 데이터를 읽어 표준출력으로 출력하거나 동시에 파일에 저장할수있음.
- 파이프를 사용해 ping 명령의 출력 결과를 표준 입력으로 받아 화면과 동시에 파일에 저장
$ping google.com -c 1 | tee result.txt- tee에 -a 옵션을 사용하고 파일명을 기재하면 파일이 새로 생성되는것이 아니라 파일 맨 끝에 추가
$ping google.com -c 1 | tee -a result.txt
그룹 명령 기능
;는 나열한 순서대로 명령어를 실행,
||는 앞의 명령어의 실행이 성공하면 그 결과를 출력 실패하면 다음 명령어 실행
&&는 앞의 명령어의 실행이 성공한 경우에만 다음명령어 실행
작업 제어 기능 Job Control Command
- Job : 셸에서 실행하는 프로세스
- 작업의 세가지 상태: foreground, background, stpped
- 작업을 백그라운드로 실행할 땐 & 사용
- 작업간 전환을 위해 fg, bg 명령을 사용
- 현재 셸에서 실행한 작업의 목록은 job
산술논리 연산기능
expr 명령어를 통해 산술, 논리 연산을 수행, 연산자와 피연산자는 공백으로 반드시 구분
기호가 특수문자에 해당하면 \, "",'' 를 사용하여야 함
| 는 앞의 피연산자가 0이거나 '' 이면 뒤의 피연산자 출력
&는 앞 또는 뒤의 피연산자가 0이거나 ''이면 0을 리턴, 그렇지않으면 앞의 피연산자 출력
프롬프트 제어기능
환경변수 PS1, PS2, PS3, PS4를 통해 셸 프롬프트 변경
$export PS1="dollor"
dollar
확장된 내부 명령어
- 입출력
echo, printf, read- 파일시스템
cd 디렉터리 변경, pwd 현재 디렉터리 표시, pushd,popd,dirs 디렉터리를 스택에 푸시,팝하거나 현재 스택의 목록은 볼때- 변수
let 변수에 산술연산, eval 인자를 명령어로 변환, set 내부 스크립트 변수값 변경,
unset 스크립트 변수를 null로 지움, export 변수에 값을 설정- 스크립트
source 지정한 파일을 스크립트로 실행, exit 스크립트를 종료, exec 프로세스를 실행할 때 fork하지않고 셸자체 실행
조금 긴 포스팅이었지만 리눅스 마스터 공부과정에서 사실상 가장 많은 도움이 될 포스팅이 아닐까 싶다.