- 사용자와 커널 사이에서 명령을 해석하여 전달하는 해석기(interpreter)와 번역기(translator) 기능
- 사용자가 로그인하면 shell 이 자동으로 실행되어 사용자가 명령을 입력하기를 기다림 -> 로그인 shell
- 로그인 shell 은 /etc/passwd 파일에 사용자별로 지정
- 프롬프트: shell 이 사용자의 명령을 기다리고 있음을 나타내는 표시($)
- shell은 자체적으로 프로그래밍 기능이 있어 반복적으로 수행하는 작업을 하나의 프로그램으로 작성 가능
- shell 프로그램을 shell 스크립트라고 함
- 사용자 환경을 설정 할 수 있도록 초기화 파일 기능을 제공
- 초기화 파일에는 명령을 찾아오는 경로를 설정하거나
- 파일과 디렉터리를 새로 생성할 때 기본 권한을 설정하거나
- 다양한 환경 변수 등을 설정
- bourne shell, bash shell, korn shell 의 기본 프롬프트: $
- c shell 의 기본 프롬프트: %
사용자 정보의 가장 마지막에 나온 /bin/bash 가 기본 shell
- 프롬프트에서 다른 shell을 실행할 수 있는데, 이것을 서브 shelㅣ이라고 함
- 서브 shell은 또 다른 서브 shell 생성 가능
- 서브 shell을 종료하는 명령은 ctrl+d 또는 exit 명령어 사용
- 서브 shell이 종료되면 서브 shell 을 실행했던 이전 shell 환경으로 복귀
- 로그인 shell 에서 로그아웃하면 접속 해제
화면에 한 줄의 문자열을 출력한다
- 자료를 형식화하여 화면에 출력한다
- %d, \n 등 c언어 printf 함수의 형식을 지정
임의의 문자열을 나타내는 특수문자로 0개 이상의 문자로 대체
- 하나의 문자를 나타내는데 사용
- ' ? '는 길이가 1인 임의의 한 문자를, " [ ] " 는 괄호 안에 포함된 문자 중 하나를 나타냄
- ' ~ '와 ' - '는 디렉토리를 나타내는 특수 문자
- ' ~ '만 사용하면 현재 작업 중이니 사용자의 홈 디렉토리를 표시
- ~user2/lib 와 같이 ' ~ '와 다른 사용자의 ID 를 함께 사용하면 해당 사용자의 홈 디렉토리 표시
- ' - '는 cd 명령으로 디렉토리를 이전하기 직전의 작업 디렉토리 표시
- ' ; '과 ' | '는 연결된 명령을 왼쪽부터 차례로 실행
- ' | ' 는 왼쪽 명령의 실행 결과를 오른쪽 명령의 입력으로 전달
- ' '(작은 따옴표) 와 " "(큰 따옴표)는 문자를 감싸서 문자열로 만들어 주고, 문자열 안에 사용된 특수문자의 기능을 없앰
- ' '는 모든 특수문자를, " "는 ' $ ', '
', ' \ '를 제외한 모든 특수문자를 일반 문자로 간주하여 처리
(백틱)shell은
(백틱)로 감싸인 문자열을 명령으로 해석하여 명령의 결과로 전환
' \ ' 는 특수문자 바로 앞에 사용되는데 해당 특수문자의 효과를 없애고 일반 문자처럼 처리
입출력의 방향을 바꾸는 특수문자 -> 리다이렉션
- 표준 입력 장치: shell이 작업을 수행하는데 필요한 정보를 받아들이는 장치 -> 키보드
- 표준 출력 장치: 실행 결과를 내보내는 장치 -> 모니터
- 표준 오류 장치: 오류 메세지를 내보내는 장치 -> 모니터
- 파일 관리를 위해 붙이는 일련 번호
- 입출력 장치를 변경할 때는 이 파일 디스크립터를 사용
- 표준 입출력 장치를 파일로 바꾸는 것을 "리다이렉션(redirection)" 이라고 함
- stdin(0): 명령의 표준 입력
- stdout(1) : 명령의 표준 출력
- stderr(2) : 명령의 표준 오류
- ' > ': 기존 파일의 내용을 삭제하고 새로 결과를 저장
- ' >> ': 기존 파일의 내용 뒤에 결과를 추가
- 설정
set -o noclobber
- 해제
set +o noclobber
- 표준 오류도 기본적으로 화면으로 출력되며 표준 출력처럼 리다이렉션 가능
- 오류 리다이렉션을 위해서는 '2>'이런식으로 오류 파일 디스크립터 번호인 2를 꼭 기입해줘야 함
- 오류 메시지를 버리고 싶다면 '/dev/null' 로 오류 리다이렉션 해주면 됨 (ls /abc 2> /dev/null)\
- 표준 출력과 표준 오류를 한 파일로 리다이렉션 하기
- 명령의 정상 실행 결과를 파일로 리다이렉션(>)
- 그 명령 전체의 오류 메시지를 1번 파일(표준 출력 파일, &1이라고 표현)로 리다이렉션(2>)
- 표준 입력을 바꾼다
- 명령 0< 파일 또는 명령 < 파일 -> 파일의 내용을 명령의 표준 입력으로 넣는다
- shell의 환경을 설정하기 위한 값을 저장할 수 있도록 shell 변수와 환경 변수를 제공
- shell 변수: 현재 shell에서만 사용이 가능하고 서브 shell 로는 전달되지 않음(지역 변수)
- 환경 변수: 현재 shell뿐만 아니라 서브 shell로도 전달 됨(전역 변수)
- set: shell 변수와 환경변수 모두 출력
- env: 환경 변수만 출력
특정 변수의 값을 출력할 때는 변수 이름 앞에 ' $ ' 를 붙임
- 변수 이름과 문자열 사이에 공백이 있으면 안됨
- 변수명=문자열 -> SOME=test
SOME=test echo $SOME
- 먼저 shell 변수를 정의하고 export 명령어를 사용하여 이를 환경 변수로 변경
- export SOME -> shell 변수인 SOME 을 환경변수로 만든다
- export -n SOME -> 환경 변수인 SOME 을 shell 변수로 만든다
- export SOME=test -> shell 변수 SOME을 선언함과 동시에 환경변수로 만든다
지정한 변수를 해제한다 -> unset SOME
- alias는 우리말로 '별명'을 의미
- 기존의 명령을 대신하여 다른 이름(별명)을 붙일 수 있도록 하는 기능
- 긴 명령 대신 짧은 명령을 만들어 사용 가능
- 여러 명령을 연결하여 하나의 명령으로 만들 수도 있음
- 자주 사용하는 옵션을 포함하여 새로운 이름을 붙여서 사용 가능
1. alias 기능
- alias 이름='명령'
- alias : 현재 설정된 alias 목록을 출력
- alias 이름='명령' : 명령을 수정하여 사용하는 경우
- alias 이름='명령1;명령2;......' : 여러 명령을 하나의 이름으로 사용하는 경우
- unalias alias이름 : alias이름으로 설정된 alias를 해제 한다
- bash shell에서는 alias에 인자를 전달할 수 없음
- bash shell에서 인자를 전달하려면 프로그래밍 기능에서 function을 사용
사용자가 이전에 입력한 명령을 다시 불러 사용하는 것
1. 명령 재실행 하기: !
- !! : 바로 직전에 실행한 명령을 재실행
- !번호 : 히스토리에서 해당 번호의 명령을 재실행
- !문자열 : 히스토리에서 해당 문자열로 시작하는 마지막 명령을 재실행
2. 명령 편집하기와 재실행하기
화살표 키를 사용하여 오류가 난 명령을 다시 프롬프트로 불러내서 수정한 뒤 재실행 가능
history 저장
로그아웃 할 때 홈 디렉터리 아래의 숨김파일인 .bash_history에 히스토리 저장됨
- 사용자가 로그인 할 때마다 자동으로 실행되는 명령을 저장한 것이 환경 설정 파일
- 시스템 환경 설정 파일과 사용자 환경 설정 파일이 있음
- shell마다 다른 이름의 파일을 사용
- 시스템을 사용하는 전체 사용자의 공통 환경을 설정하는 파일
- 각 사용자의 홈 디렉터리에 숨김 파일로 생성
- 사용자가 내용을 수정하고 관리 가능
- vi로 .bash_aliases 파일 수정
- 사용자 환경 설정 파일 적용하기
source .bash_aliases . .bash_aliases