리눅스 기초 - Shell (셸)
셸 (Shell)
- 리눅스와 사용자 사이의 인터페이스 역할을 수행하는 명령어 해석기 (Command Interpreter)
- 유저 ↔ 셸 ↔ OS ↔ 하드웨어
- 기본 셸 (로그인 셸) : 사용자가 로그인하면서 자동으로 실행되는 셸
- 셸의 저장 파일
: /etc/passwd
ㆍ계정 정보의 저장장소
ㆍ일반 사용자도 접근가능
: /etc/shadow
ㆍ계정의 비밀번호 저장 디렉터리
ㆍroot 사용자만 접근 가능
본 셸(Bouren Shell)
- 가장 오래된 셸이며 유닉스 시스템의 표준 구성요소
- sh 명령어를 통해 전환 가능 (기본 프롬프트 기호 = $)
- 환경설정 파일 : .profile
- alias와 작업 제어 등의 편의 기능이 부족함
※ 파일이름앞에 . 이 붙으면 hidden file로 간주
C 셸 (C Shell)
- 본 셸을 확장한 셸 (버클리 계열 셸)
- 구문의 형식이 C언어와 유사
- csh 명령어를 통해 전환 가능 (기본 프롬프트 기호 = %)
- 환경설정 파일 : .cshrc
- 크기가 커지고 처리속도가 느리나 본 셸 다음으로 가장 많이 사용된 셸
콘 셸 (Korn Shell)
- 본 셸과 C 셸의 장점을 조합하여 인터페이스가 우수하고 본 셸과의 호환성이 유지됨
- 사용자 편의를 위한 기능 제공과 빠른 속도
- ksh 명령어를 통해 전환 가능 (기본 프롬프트 기호 = $)
- 환경설정 파일 : .kshrc
- 우분투에서는 추가 설치 필요
배시 셸 (Bash Shell)
- FSF에서 무료로 공개되어 있는 셸로, 우분투 및 최근 리눅스의 기본 셸(로그인 셸)
- 본 셸과의 호환성 + C 셸 & 콘 셸의 편의성
- bash 명령어를 통해 전환 가능 (기본 프롬프트 기호 = $)
- 환경설정 파일 : .bashrc
셸의 전환
- 일시적인 전환
: 로그아웃전까지만 유효한 전환 (/etc/passwd 수정되지 않음)
: 이전 셸로 복귀 = exit
- 기본 셸 변경
: 로그인 셸을 다른 셸로 변경하는 것 (/etc/passwd 수정됨)
: 일반 사용자의 경우 자신의 기본 셸 변경 가능 (관리자 계정은 모든 사용자의 셸 변경 가능)
: usermod 명령어나 /etc/passwd 파일 수정을 통해 변경
: /etc/shells에 지정된 셸로만 변경 가능
: chsh 옵션 변경할셸 사용자
ㆍ자신의 기본 셸 변경
ㆍchsh -s /bin/bash comeve = comeve 계정의 로그인 셸을 bash 셸로 변경
셸 변수와 환경 변수
- 시스템의 환경을 설정하기 위해 셸에서 사용되는 변수
- 명령어의 path, 프롬프트의 모양 등 설정
- 셸 변수 : 현재 사용중인 셸에서만 유효한 변수
- 환경 변수 : 현재 사용중인 셸과 서브 셸까지 유효한 변수
- set : 모든 셸 변수와 환경 변수의 이름과 값을 출력
- env : 모든 환경 변수의 이름과 값을 출력
- echo : 지정한 셸 변수나 환경 변수의 값을 출력 (변수 앞에 $ 기호 사용)
: $HOME (사용자 홈 디렉터리의 절대 경로 출력)
: $PATH (현재 셸에 지정되어 있는 경로 출력)
: $SHELL (현재 사용중인 셸 출력)
: $LOGNAME (현재 로그인한 사용자의 계정 출력)
: $HISTSIZE (히스토리의 크기 출력)
변수 관리
- 셸 변수 생성 : 변수명=값
- 환경 변수 생성 : export [옵션] 변수명=값
: -n = 환경변수를 셸 변수로 전환
- 변수의 전환
: 셸 변수 → 환경 변수 : export 변수명
: 환경 변수 → 셸 변수 : export -n 변수명
- 변수 삭제
: unset 변수명
프롬프트의 구조와 설정
- 프롬프트의 기본구조
: 로그인한 사용자와 서버의 이름, 현재 위치한 디렉터리 등의 정보 포함
- deragon@comeve:/etc/X11$
: 현재 로그인한 계정 @ 서버이름 : 현재 위치한 디렉터리 (프롬프트 기호$)
- 이스케이프 문자를 이용한 프롬프트 변경
: .bashrc 파일의 PS1 환경변수의 내용 수정 (.bashrc 파일이 안보일시 ls -al)
: \u@\h:\w\$
ㆍ\사용자계정 @\호스트이름 : \현재 디렉터리의 절대경로 \ 프롬프트 기호
: \h = 호스트의 이름
: \u = 사용자 계정 이름
: \e = 색상 등 효과 지정
: \w = 현재 위치한 디렉터리를 절대 경로 형식으로 표시
: \W = 마지막 디렉터리 이름만 표시
: \[프롬프트 내에 출력하지 않는 문자열]
=> ex:) PS1 = '[\u@\W\t] \$'
- 프롬프트에 색상 지정
: '\[\e [글자색:효과m\]] 이스케이프문자'
ex:) PS1='\[\e[37;01m\]\u@\[\e[32;01m\]\h:\[\e[32;01m\]\w\[\e[37;00m\]\$'
=> 연속사용시 이스케이프\[\e[색:효과m\]]
명령어 기억 (history)
- history 옵션 : -c = 히스토리 내용제거
- $HISTSIZE : 시스템에 최대로 유지될 수 있는 명령어의 수
- !! : 바로 직전에 수행했던 명령어 다시 수행 (화살표 상하키)
- !번호 : 지정된 히스토리 명령어 번호에 해당하는 명령어 다시 수행
- !문자열 : 지정된 문자열을 포함하는 명령어 중 마지막에 수행된 명령어를 다시 수행
- 로그인 이후 수행된 명령어들은 메모리에 유지되다 로그아웃때 .bash_history 파일에 저장됨
- history 삭제 : history -c
: -c 옵션으로 삭제한다고 해도 로그아웃을 할때 .bash_history 파일에 저장됨
명령어에 별명짓기 (alias)
- 긴 명령어를 짧게 표현 가능
- 명령어와 옵션을 하나의 단어로 사용
- 여러개의 명령어를 하나의 단어로 사용
- 기존 셸 명령어를 별명으로 사용할 수 있음
- alias 별명='명령 [옵션] [:명령]'
: ex) alias mypwd='cd;pwd'
- 별명삭제 : unalias 별명
- 환경설정 파일을 이용한 alias 설정
: 시스템 환경설정 파일 (시스템을 사용하는 모든 사용자에게 적용되는 파일)
(/etc/profile과 /etc/bash.bashrc)
: 사용자 환경설정 파일 (사용자 계정마다 적용되는 파일)
(.profile, .bashrc, .hash_history, .bash_logout)
(시스템 환경설정 적용 후 사용자 환경설정 적용)