본문 바로가기
네트워크/Linux

4. Shell

by Testengineer 2021. 12. 4.
반응형

1. 개념 및 종류

(1) Shell의 개념

명령어 해석기(command interpreter)이다. 사용자가 입력한 명령어를 해석하여 커널에 전달한다. DOS의 command.com과 같은 기능을 수행한다. 커널과 사용자 간의 대화식 인터페이스를 제공한다.
로그인할 때 실행되어 사용자 별로 사용 환경 설정을 가능하게 한다.
강력한 스크립트 언어이다. 셸 자체가 프로그래밍 기능을 갖고 있다.
입출력 방향 재지정(redirection)과 파이프(pipe) 기능을 제공한다.
포그라운드/백그라운드 프로세스를 실행한다.

(2) Shell의 종류
본셸(Bourne shell) 계열과 C셸 계열로 나뉜다.
사용자 프롬프트가 '$'이면 본셸 계열, '%'이면 C셸 계열을 사용하고 있다는 것이다. 대부분의 셸은 본셸 계열의 기능을 포함하여 확대 발전한 형태이다.
C셸은 본셸의 모든 기능과 명령어 히스토리, 별명(alias), 작업 제어 기능을 추가로 가지고 있다.

종류 실행파일 특징
본셸 계열
(Bourne shell)
본셸 /bin/sh - 벨 연구소의 스티븐 본이 1979년에 개발
- 유닉스에서 기본 셸로 사용
콘셸
(korn shell)
/bin/ksh - AT&T사의 데이비드 콘이 1986년 개발
- 벨 연구소에서 본셸을 확장해서 만듬
- 명령어 완성 기능, 히스토리 기능 있음
배쉬셸
(bash shell)
/bin/bash - 브레인 폭스가 1989년에 개발
- 본셸을 기반으로 GNU 프로젝트에 의해 개발
- linux 표준 셸로 채택됨
- 리눅스, 맥OS X등 다양한 운영체제에서 사용
- 명령어 완성 기능, 히스토리, 명령어 치환, 편집등의 기능이 있음
- POSIX와 호환가능
지셸
(z shell)
/bin/zsh - 폴 팔스타드가 1990년에 개발
- 확장형 본셸로 korn shell의 재작성 셸
- 강력한 history 기능
- 향상된 명령행 편집 기능
- 파일명 중간에서부터도 자동 완성 기능 가능
- 탭이나 화살표 키를 이용해 선택 기능 포함됨
종류 실행파일 특징
C셸 계열 C셸 /bin/csh - 버클리 대학의 빌조이가 1981년에 개발
- C언어의 특징을 많이 포함
- 히스토리, 별명, 작업 제어등의 기능 포함
- 다양한 프로그래밍 작성 기능을 가짐`
tc셸 /bin/tcsh - Ken Greer가 1982년에 개발
- 확장 C셸로 BSD계열에서 가장 많이 사용
- 명령어 편집 기능을 제공
- emacs, history explore
- 자동완성기능, 자동 로그아웃
- 로그인 상태, 사용자, 터미널 모니터링
- $host, $hosttype등의 새로운 환경 변수 포함


(3) Shell 확인 및 변경
셸은 사용자가 로그인 후 자동으로 생성되는 로그인 셸(login shell)과 사용자가 직접 변경 실행하는 서브 셸(sub shell)로 구분할 수 있다. 로그인 셸을 확인할 때는 파일 /etc/shells에서 사용할 수 있는 셸들을 확인할 수 있다. 파일 /etc/passwd 파일에서 계정마다 할당된 셸을 확인할 수 있다. 명령어 echo $SHELL은 현재 로그인한 사용자가 사용하고 있는 셸을 확인할 수 있다.
로그인 셸 변경은 반영구적인 셸 변경 방법으로 관리자가 셸 변경 후 다음 변경을 하기 전까지 지정된 셸을 사용한다. 일반 사용자 환경에서 셸 변경시 명령어 chsh을 사용한다. 관리자 환경에서 지정된 계정의 정보를 변경할 때는 명령어 usermod를 사용한다.

2. 환경설정

(1) 환경변수와 셸 변수

환경 변수(전역 변수) 셸 변수(지역 변수)
- 전체 셸에서 사용 가능한 전역 변수
- 서브 셸에 기능 상속 가능
- 환경 변수 확인 명령 : env
- 현재 로그인 셸에서만 사용 가능한 지역변수
- 서브 셸에 기능 상속 불가능
- 셸 변수 확인 명령 : set

환경 변수 설정

명령어 설명
export 환경 변수 리스트 확인
export 변수명=변수값 해당 변수명에 변수값 등록, 셸 변수를 환경 변수로 변경
echo $변수명 변수명에 해당하는 환경변수 확인
export 변수명=$변수명:변수값 기존 변수명에 변수값 추가
unset 변수명 변수 정의 해제

프롬프트 설정 형식
셸의 프롬프트 형식을 사용자 임의대로 변경할 수 있다.

명령어 설명
\t 24시로 현재 시간을 표시
\W 현재 작업 디렉터리의 전체 경로 중 마지막 디렉터리만 표시
\w 현재 작업 디렉터리를 절대 경로로 표시
\s 사용중인 셸 이름 표시
\u 현재 사용자의 이름을 표시
\h 호스트 이름을 표시

(2) 환경 설정 파일
셸 시작시 자동으로 실행되는 고유의 시작 파일이 있다. 이 파일은 사용자 운영환경을 설정한다.
배쉬 셸의 시작 파일은 /etc/profile, /etc/bashrc, ~/.bash_profile, ~/.bashrc 이다.
셸 파일은 전역적 파일과 지역적 파일로 나뉜다. 전역적 파일에는 사용자에게 공통으로 영향을 주는 내용이 들어 있으며 /etc 아래에 위치한다. 지역적 파일은 사용자 개개인을 위한 설정 내용이 들어 있으며, 사용자의 홈 디렉터리에서 숨김 파일 형태로 위치한다.
bash 셸 관련 설정 파일들

환경 설정 파일 기능
전역
설정 파일
/etc/profile 모든 사용자의 셸 환경을 제어하는 전역적인 시스템 설정 파일
환경변수와 bash가 수행시 실행되는 프로그램을 제어
관리자만 설정 가능해야 하며 모든 사용자들에게 반영되어야 함
/etc/bashrc alias와 bash가 수행시 실행되는 함수를 전역적으로 제어
생략되기도 하며 /etc/profile 내용이 포함되기도 함
지역
설정 파일
~/.bash_profile 개인 사용자의 셸 환경을 제어하는 지역적인 시스템 설정 파일
PATH, 환경 변수 등을 설정 또는 변경할 때 사용
로그인시 로딩
~/.bash_history 사용자가 명령어나 키보드로 입력한 내용들을 파일안에 기록
위/아래 화살표를 사용하여 사용했던 명령어 검색 가능
전에 입력했던 명령어 재사용 가능
~/.bashrc alias와 bash 수행시 실행되는 함수를 지역적으로 제어
~/.bash_logout 로그아웃하기 직전에 실행되는 시스템 설정 파일

디렉터리 /etc/profile.d는 몇몇 응용 프로그램들이 시작 시 자동 실행할 스크립트 파일 경로를 넣어둔다. 지정된 경로에 있는 스크립트 파일들이 부팅 시 자동 실행되고 일반 사용자의 alias 설정 등과 관련된 스크립트도 존재한다.
(3) bash shell의 주요 기능
history 기능

  • 기본 천 개 이상 사용했던 명령어를 .bash_history에 저장해 두고 다시 불러서 사용할 수 있게 하는 기능이다.
  • 대부분 셸은 이전 입력했던 명령어를 반복하거나 약간 변형하여 다시 사용할 수 있도록 하는 기능을 한다.
  • 파일 .bash_history는 개별 사용자들의 홈 디렉터리에 있다.
  • 명령어 history와 관련된 다양한 옵션
    !! 마지막으로 실행했던 명령문 실행
    !n n번째 명령어 실행
    !-n 현재 명령행에서 n개수를 뺀 행의 명령어 실행
    !string 가장 최근에 'string'으로 시작하는 명령문 실행
    !$ 또는 !!$ 마지막 명령의 argument
    !* 마지막으로 실행된 명령에 사용된 모든 argument
    !?string? 가장 최근에 string을 포함하고 있는 단어를 나타냄
  • History 관련 환경변수
    HISTSIZE 히스토리 스택의 크기 지정, 지정 시 단위는 명령어 개수
    HISTFILE 히스토리 파일 위치
    HISTFILESIZE 물리적인 히스토리 파일 크기
    HISTTIMEFORMAT 히스토리 명령어 수행 시간 출력 형태 지정
    HISTCONTROL 중복되는 명령어에 대한 기록 유무를 지정하는 변수

alias 기능
자주 사용하는 명령어를 특정 문자로 입력해 두고 간편하게 사용할 수 있게 하는 기능이다.

명령어 설명
alias 설정되어 있는 별명들 확인
alias 별명='명령어 정의' 새로운 별명 정의
unalias 별명 지정된 별명 해제

반응형

'네트워크 > Linux' 카테고리의 다른 글

6. 리눅스 프로그램 & 주변장치 연결  (0) 2021.12.18
5. 프로세스 관리  (0) 2021.12.11
3. 파일 시스템 관련 명령어  (0) 2021.11.27
2. Partition & Boot Manager  (0) 2021.10.30
1. 리눅스의 이해  (0) 2021.10.23

댓글