리눅스 마스터 2급 대비 정리(5) (Shell - 개념 및 종류, 환경설정)
리눅스 마스터 2급 시험 대비를 위해 관련 책을 바탕으로 내용들을 정리하는 포스트입니다. 이번 포스트는 셸을 이해하는 파트로 개념 및 종류, 환경설정에 대해 알아보겠습니다.
개요
이번 포스트는 셸의 개념 및 종류, 환경설정에 대해 알아보겠습니다.
참고한 책은 2023 이기적 리눅스 마스터 2급 기본서 - 권소라 저, 영진닷컴입니다. 실습한 리눅스 버전은 CentOS 7이고, ISO 명은 CentOS-7-x86_64-Minimal-2009.iso입니다.
목차
개념 및 종류
개념
- 셸은 명령어 해석기로써 사용자가 입력한 명령어를 해석해 커널에 전달합니다. DOS의 Command.com과 동일한 기능을 수행합니다. 커널과 사용자 간의 대화식 인터페이스를 제공합니다.
- 로그인할 때 실행되어 사용자별로 사용 환경 설정을 가능하게 합니다.
- 셸 자체가 프로그래밍 기능을 가지고 있는 강력한 스크립트 언어입니다.
- 입출력 방향 재지정과 파티프 기능을 제공합니다.
- Foreground와 Background 프로세스를 실행합니다.
종류
- 본셸 계열과 C셸 계열로 나뉩니다.
- 사용자 프롬프트가 ‘$’이면 본셸 계열, ‘%’이면 C셸 계열을 사용하고 있다는 것입니다.
- 대부분의 셸은 본셸 계열의 기능을 포함해 확대 발전한 형태입니다.
- c셸은 본셸의 모든 기능과 명령어 히스토리, 별명, 작엄 제어 기능을 추가로 가지고 있습니다.
본셸 계열 셸들
종류 | 실행 파일 | 특징 |
---|---|---|
본셸(Bourne shell) | /bin/sh | 유닉스에서 기본 셸로 사용 |
콘셸(korn shell) | /bin/ksh | 명령어 완성 기능, 히스토리 기능을 가짐 |
베쉬셸(bash shell) | /bin/bash | 본셸을 기반으로 GNU 프로젝트에 의해 개발, Linux 표준 셸로 채택, 여러 운영체제에서 사용, 명령어 완성 기능, 히스토리, 명령어 치환, 편집 등의 지원, POSIX와 호환 가능 |
지셸(z shell) | /bin/zsh | 콘셸의 재작성 셸, 강력한 history 기능, 향상된 명령행 편집 기능, 파일명 중간에서부터도 자동 완성 기능 가능, 탭이나 화살표 키를 이용해 선택 기능 포함 |
C셸 계열 셸들
종류 | 실행 파일 | 특징 |
---|---|---|
C셸 | /bin/csh | C 언어의 특징을 많이 포함, 다양한 프로그래밍 작성 기능을 가짐 |
tc셸 | /bin/tcsh | 확장 C셸로 BSD 계열에서 가장 많이 사용, 명령어 편집 기능 제공, 새로운 환경 변수 포함 |
셸 확인 및 변경
- 로그인 셸 확인
- 파일 /etc/shells에서 사용할 수 있는 셸들을 확인할 수 있습니다.
- 파일 /etc/passwd 파일에서 계정마다 할당된 셸을 확인할 수 있습니다.
- 명령어 ‘echo $SHELL’은 현재 로그인한 사용자가 사용하고 있는 셸을 확인할 수 있습니다.
- 셸 변경
- 로그인 셸 변경은 반영구적인 셸 변경 방법으로 관리자가 셸 변경 후 다음 변경을 하기 전까지 지정된 셸을 사용합니다.
chsh
명령어는 일반 사용자 환경에서 셸 변경 시 사용합니다. 형식은chsh [옵션] 계정명 셸
이고, -s옵션은 지정하는 셸을 앞으로 사용할 로그인 셸로 변경, -l은 /etc/shells 파일 안에 지정된 셸을 나열하는 것입니다.usermod
는 관리자 환경에서 지정된 계정의 정보를 변경할 때 사용하는 명령어로 형식은usermod [옵션] 계정명
입니다.
사용할 수 있는 셸들을 확인
계정마다 할당된 셸을 확인
현재 사용중인 셸 확인
chsh 명령을 가지고 사용자 셸 변경하기
환경설정
환경변수와 셸 변수
- 환경 변수
- 전체 셸에서 사용 가능한 전역 변수입니다.
- 서브 셸에 기능 상송이 가능합니다.
- 환경 변수 확인 명령은
env
입니다.
- 셸 변수(지역 변수)
- 현재 로그인 셸에서만 사용 가능한 지역 변수입니다.
- 서브 셸에 기능 상속이 불가능합니다.
- 셸 변수 확인 명령은
set
입니다.
주요 환경 변수
변수 | 기능 |
---|---|
PATH | 실행할 명령어 경로 검색, 셸 설정 파일 중 하나에 설정 |
HOME | 사용자의 홈 디렉터리 절대 경로 |
HOSTNAME | 호스트명 |
USER | 사용자 이름 |
DISPLAY | X-windows 시스템에서 xterm과 같은 x 응용 프로그램이 화면 출력을 위해 접속할 X 서버와 주소를 지정 |
PS1 | 셸 프롬프트를 선언 시 사용하는 변수 |
PS2 | 2차 셸 프롬프트 선언 시 사용하는 변수 |
PWD | 현재 디렉터리의 절대 경로명 |
SHELL | 로그인 셸의 절대 경로명 |
TERM | 터미널 종류의 이름 |
TMOUT | 로그아웃 관련 시간 제어 |
LANG | 프로그램 사용 시 기본 지원 언어 |
기본 프린터(설정 도어 있으며 lpr에게 알려주지 않아도 됨) | |
도착한 메일이 저장되는 경로 |
환경 변수 설정
명령어 | 설명 |
---|---|
export | 환경 변수 리스트 확인 |
export 변수명 = 변수값 | 해당 변수명에 변수값 등록, 셸 변수를 환경 변수로 변경 |
echo $변수명 | 변수명에 해당하는 환경 변수 값 확인 |
export 변수명=$변수명:변수값 | 기존 변수명에 변수 값 추가 |
unset 변수명 | 변수 정의 해제 |
프롬프트 설정 형식
명령어 | 설명 |
---|---|
\t | 24시로 현재 시간을 표시 |
\W | 현재 작업 디렉터리의 전체 경로 중 마지막 디렉터리만 표시 |
\w | 현재 작업 디렉터리를 절대 경로로 표시 |
\s | 사용 중인 셸 이름 표시 |
\u | 현재 사용자의 이름 표시 |
\h | 호스트 이름 표시 |
환경 설정 파일
환경 설정 파일 | 기능 |
---|---|
/etc/profile | 모든 사용자의 셸 환경을 제어하는 전역적인 시스템 설정 파일, 환경 변수와 bash가 수행 시 실행되는 프로그램을 제어, 관리자만 설정 가능해야 하며 모든 사용자들에게 반영되어야 함 |
/etc/bashrc | 별칭과 bash가 수행 시 실행되는 함수를 전역적으로 제어, 생략되기도 하며 /etc/profile에 내용이 포함되기도 함 |
~/.bash_profile | 개인 사용자의 셸 환경을 제어하는 지역적인 시스템 설정 파일, PATH, 환경 변수 등을 설정 또는 변경할 때 사용, 로그인 시 로딩 |
~/.bash_history | 사용자가 명령어나 키보드로 입력한 내용들을 파일 안에 기록, 위/아래 화살표를 사용해 사용했던 명령어 검색 가능, 전에 입력했던 명령어의 재사용을 가능하게 함 |
~/.bashrc | 별칭과 bash가 수행 시 실행되는 함수를 지역적으로 제어 |
~/.bash_logout | 로그아웃하기 직전에 실행되는 시스템 설정 파일 |
- /etc 에 있는 위 두개의 파일은 전역 설정 파일이고, 아래 4개의 파일은 지역 설정 파일입니다.
Bash shell의 주요 기능
- History 기능
- 일정 개수(기본 1000개) 이상 사용했던 명령어를 .bash_history에 저장해 두고 다시 불러서 사용할 수 있게 하는 기능입니다.
- 파일 .bash_history는 개별 사용자들의 홈 디렉터리에 있습니다.
- alias 기능
- 자주 사용하는 명령어를 특정 문자로 입력해 두고 간편하게 사용할 수 있게 하는 기능
명령어 history와 관련된 다양한 옵션
옵션 | 설명 |
---|---|
!! | 마지막으로 실행했던 명령문 실행 |
!n | n번째 명령어 실행 |
!-n | 현재 명령행에서 n 개수를 뺀 행의 명령어 실행 |
!string | 가장 최근에 ‘string’으로 시작하는 명령문 실행 |
!$ or !!$ | 마지막 명령의 argument |
!* | 마지막으로 실행된 명령에 사용된 모든 argument |
!?string? | 가장 최근에 string을 포함하고 있는 단어를 나타냄 |
History 관련 환경 변수
환경 변수 | 설명 |
---|---|
HISTSIZE | 히스토리 스택의 크기 지정, 지정 시 단위는 명령어 개수 |
HISTFILE | 히스토리 파일 위치 |
HISTFILESIZE | 물리적인 히스토리 파일 크기 |
HISTTIMEFORMAT | 히스토리 명령어 수행 시간 출력 형태 지정 |
HISTCONTROL | 중복되는 명령어에 대한 기록 유무를 지정하는 변수 |
alias 명령어
명령어 | 설명 |
---|---|
alias | 설정되어 있는 별명들 확인 |
alias 별명 =’명령어 정의’ | 새로운 별명 정의 |
unalias 별명 | 지정된 별명 해제 |