제목

리눅스 마스터 2급 대비 정리(5) (Shell - 개념 및 종류, 환경설정)

   2023년08월17일     10분읽었습니다.

리눅스 마스터 2급 시험 대비를 위해 관련 책을 바탕으로 내용들을 정리하는 포스트입니다. 이번 포스트는 셸을 이해하는 파트로 개념 및 종류, 환경설정에 대해 알아보겠습니다.


개요

이번 포스트는 셸의 개념 및 종류, 환경설정에 대해 알아보겠습니다.
참고한 책은 2023 이기적 리눅스 마스터 2급 기본서 - 권소라 저, 영진닷컴입니다. 실습한 리눅스 버전은 CentOS 7이고, ISO 명은 CentOS-7-x86_64-Minimal-2009.iso입니다.

목차

  1. 개념 및 종류
  2. 환경설정

개념 및 종류

개념

  1. 셸은 명령어 해석기로써 사용자가 입력한 명령어를 해석해 커널에 전달합니다. DOS의 Command.com과 동일한 기능을 수행합니다. 커널과 사용자 간의 대화식 인터페이스를 제공합니다.
  2. 로그인할 때 실행되어 사용자별로 사용 환경 설정을 가능하게 합니다.
  3. 셸 자체가 프로그래밍 기능을 가지고 있는 강력한 스크립트 언어입니다.
  4. 입출력 방향 재지정과 파티프 기능을 제공합니다.
  5. Foreground와 Background 프로세스를 실행합니다.

종류

  1. 본셸 계열과 C셸 계열로 나뉩니다.
  2. 사용자 프롬프트가 ‘$’이면 본셸 계열, ‘%’이면 C셸 계열을 사용하고 있다는 것입니다.
  3. 대부분의 셸은 본셸 계열의 기능을 포함해 확대 발전한 형태입니다.
  4. c셸은 본셸의 모든 기능과 명령어 히스토리, 별명, 작엄 제어 기능을 추가로 가지고 있습니다.

본셸 계열 셸들

종류실행 파일특징
본셸(Bourne shell)/bin/sh유닉스에서 기본 셸로 사용
콘셸(korn shell)/bin/ksh명령어 완성 기능, 히스토리 기능을 가짐
베쉬셸(bash shell)/bin/bash본셸을 기반으로 GNU 프로젝트에 의해 개발, Linux 표준 셸로 채택, 여러 운영체제에서 사용, 명령어 완성 기능, 히스토리, 명령어 치환, 편집 등의 지원, POSIX와 호환 가능
지셸(z shell)/bin/zsh콘셸의 재작성 셸, 강력한 history 기능, 향상된 명령행 편집 기능, 파일명 중간에서부터도 자동 완성 기능 가능, 탭이나 화살표 키를 이용해 선택 기능 포함

C셸 계열 셸들

종류실행 파일특징
C셸/bin/cshC 언어의 특징을 많이 포함, 다양한 프로그래밍 작성 기능을 가짐
tc셸/bin/tcsh확장 C셸로 BSD 계열에서 가장 많이 사용, 명령어 편집 기능 제공, 새로운 환경 변수 포함

셸 확인 및 변경

  1. 로그인 셸 확인
    1. 파일 /etc/shells에서 사용할 수 있는 셸들을 확인할 수 있습니다.
    2. 파일 /etc/passwd 파일에서 계정마다 할당된 셸을 확인할 수 있습니다.
    3. 명령어 ‘echo $SHELL’은 현재 로그인한 사용자가 사용하고 있는 셸을 확인할 수 있습니다.
  2. 셸 변경
    1. 로그인 셸 변경은 반영구적인 셸 변경 방법으로 관리자가 셸 변경 후 다음 변경을 하기 전까지 지정된 셸을 사용합니다.
    2. chsh 명령어는 일반 사용자 환경에서 셸 변경 시 사용합니다. 형식은 chsh [옵션] 계정명 셸이고, -s옵션은 지정하는 셸을 앞으로 사용할 로그인 셸로 변경, -l은 /etc/shells 파일 안에 지정된 셸을 나열하는 것입니다.
    3. usermod는 관리자 환경에서 지정된 계정의 정보를 변경할 때 사용하는 명령어로 형식은 usermod [옵션] 계정명입니다.

사용할 수 있는 셸들을 확인 sh, bash, zsh이 있음

계정마다 할당된 셸을 확인 root는 zsh을 쓰고 있음

현재 사용중인 셸 확인 root의 경우 현재 사용하고 있는 셸이 zsh임

chsh 명령을 가지고 사용자 셸 변경하기 serveruser의 로그인 셸을 bash에서 zsh로 변경

환경설정

환경변수와 셸 변수

  1. 환경 변수
    • 전체 셸에서 사용 가능한 전역 변수입니다.
    • 서브 셸에 기능 상송이 가능합니다.
    • 환경 변수 확인 명령은 env입니다.
  2. 셸 변수(지역 변수)
    • 현재 로그인 셸에서만 사용 가능한 지역 변수입니다.
    • 서브 셸에 기능 상속이 불가능합니다.
    • 셸 변수 확인 명령은 set입니다.

주요 환경 변수

변수기능
PATH실행할 명령어 경로 검색, 셸 설정 파일 중 하나에 설정
HOME사용자의 홈 디렉터리 절대 경로
HOSTNAME호스트명
USER사용자 이름
DISPLAYX-windows 시스템에서 xterm과 같은 x 응용 프로그램이 화면 출력을 위해 접속할 X 서버와 주소를 지정
PS1셸 프롬프트를 선언 시 사용하는 변수
PS22차 셸 프롬프트 선언 시 사용하는 변수
PWD현재 디렉터리의 절대 경로명
SHELL로그인 셸의 절대 경로명
TERM터미널 종류의 이름
TMOUT로그아웃 관련 시간 제어
LANG프로그램 사용 시 기본 지원 언어
PRINT기본 프린터(설정 도어 있으며 lpr에게 알려주지 않아도 됨)
MAIL도착한 메일이 저장되는 경로

환경 변수 설정

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

프롬프트 설정 형식

명령어설명
\t24시로 현재 시간을 표시
\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의 주요 기능

  1. History 기능
    • 일정 개수(기본 1000개) 이상 사용했던 명령어를 .bash_history에 저장해 두고 다시 불러서 사용할 수 있게 하는 기능입니다.
    • 파일 .bash_history는 개별 사용자들의 홈 디렉터리에 있습니다.
  2. alias 기능
    • 자주 사용하는 명령어를 특정 문자로 입력해 두고 간편하게 사용할 수 있게 하는 기능

명령어 history와 관련된 다양한 옵션

옵션설명
!!마지막으로 실행했던 명령문 실행
!nn번째 명령어 실행
!-n현재 명령행에서 n 개수를 뺀 행의 명령어 실행
!string가장 최근에 ‘string’으로 시작하는 명령문 실행
!$ or !!$마지막 명령의 argument
!*마지막으로 실행된 명령에 사용된 모든 argument
!?string?가장 최근에 string을 포함하고 있는 단어를 나타냄

History 관련 환경 변수

환경 변수설명
HISTSIZE히스토리 스택의 크기 지정, 지정 시 단위는 명령어 개수
HISTFILE히스토리 파일 위치
HISTFILESIZE물리적인 히스토리 파일 크기
HISTTIMEFORMAT히스토리 명령어 수행 시간 출력 형태 지정
HISTCONTROL중복되는 명령어에 대한 기록 유무를 지정하는 변수

alias 명령어

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

참고 자료

  1. 2023 이기적 리눅스 마스터 2급 기본서 - 권소라 저, 영진닷컴