본문 바로가기

TEAM STUDY/LINUX

유닉스 쉘의 기능과 종류

728x90
반응형

쉘이란

  • 사용자와 커널 사이의 중간 역할
  • 명령을 해석하고 실행 결과를 알려주는 역할
  • 사용자의 명령 입력 편의를 위한 환경 설정

 

쉘의 기능

명령어 해석기 기능

  • 사용자와 커널 사이에서 명령을 해석하여 전달
  • 사용자가 로그인하면 셸이 자동으로 실행되어 사용자가 명령을 입력하기를 기다림 → 로그인 셸
  • 프롬프트: 셸이 사용자의 명령을 기다리고 있음을 나타내는 표시

 

프로그래밍 기능

  • 셸은 자체 내에 프로그래밍 기능이 있어 반복적으로 수행하는 작업을 하나의 프로그램으로 작성 가능
  • 이러한 셸 프로그램을 셸 스크립트라고 지칭함

 

사용자 환경 설정 기능

  • 사용자 환경을 설정할 수 있도록 초기화 파일 기능 제공명령을 찾아오는 경로 설정
  • 파일과 디렉터리를 새로 생성할 때 기본 권한을 설정
  • 다양한 환경 변수 ( 일반적으로 ex > $대문자 ) 등을 설정
  • 사용자별로 사용 환경의 특성을 초기화 파일에 설정
  • 로그인 시, 초기화 파일이 실행됨

 

본 셸(Bourne shell)

  • 유닉스 V7에 처음 등장한 최초의 셸
  • 개발자의 이름인 스티븐 본(Stephen Bourne)의 이름을 따서 본 셸이라고 함
  • 초기에 단순하고 처리 속도가 빨라서 많이 사용
  • 경로를 확인해보면 배시 셸과 심벌릭 링크로 연결되어 있음
  • 지금도 시스템 관리 작업을 수행하는 많은 셸 스크립트는 본 셸을 기반으로 함
  • 히스토리, 에일리어스, 작업 제어 등 사용자의 편의를 위한 기능을 제공하지 못해 이후에 다른 셸들이 등장
  • 본 셸의 경로를 확인해보면 배시 셸과 심벌릭 링크로 연결되어 있음

 

C 셸(C shell)

  • 캘리포니아대학교(버클리 캠퍼스)의 빌 조이(Bill Joy)가 개발
  • 2BSD 유닉스에 포함되어 발표
  • 본 셸에는 없던 에일리어스나 히스토리 같은 사용자 편의 기능 포함
  • 셸 스크립트 작성을 위한 구문 형식이 C 언어와 같아 C 셸이라는 이름을 가지게 되었음
  • C 셸의 명령 이름 → csh

 

콘 셸(Korn shell)

  • 1980년대 중반 AT&T 벨연구소의 데이비드 콘(David Korn)이 콘 셸을 개발
  • 유닉스 SVR 4에 포함되어 발표
  • C 셸과 달리 본 셸과의 호환성을 유지하고 히스토리, 에일리어스 기능 등 C 셸의 특징도 모두 제공하면서 처리 속도도 빠름
  • 콘 셸의 명령 이름 → ksh

 

배시 셸(bash shell)

  • 본 셸을 기반으로 개발된 셸로서 1988년 브레인 폭스(Brain Fox)가 개발
  • 본 셸과 호환성을 유지하면서 C 셸, 콘 셸의 편리한 기능도 포함
  • 배시 셸의 명령 이름 → bash
  • 배시 셸의 모든 버전은 GPL 라이선스에 의거하여 자유롭게 사용 가능
  • 리눅스의 기본 셸로 제공되고 있어 리눅스 셸로도 많이 알려짐

 

셸 종류 알아보기

  • 프롬프트 모양 참조
    • $
      • 본 셸, 배시 셸, 콘 셸의 기본 프롬프트
    • %
      • C 셸의 기본 프롬프트
  • 사용자 정보 확인: /etc/passwd 파일
    • 가장 앞에 나온 정보가 로그인 ID
    • 사용자 정보의 가장 마지막에 나온 /bin/bash가 기본 셸
  • 현 UNIX의 쉘 종류 알아보기: ps
  • 현 UNIX의 쉘의 경로 알아보기: ls –l /bin/sh

 

로그인 셸과 서브 셸

  • 로그인 쉘
    • 사용자가 로그인 한 직후 자동 생성되는 기본 쉘
  • 프롬프트에서 다른 셸을 실행할 수 있는데 이를 서브 셸이라 함
  • 서브 셸은 또 다른 서브 셸 생성 가능
  • 서브 셸을 종료하는 명령: ^d(ctrl+d), exit 등
  • 로그인 셸에서 로그아웃하면 접속 해제

 

 

유닉스 쉘의 사용법 및 환경 변수

배시 셸의 사용법

  • 현재 환경 변수의 전체 목록
    • declare 명령어
  • 입출력 방향 바꾸기
    • ① 표준 입출력 장치
      • 종류 설명 표준 입력 장치 셸이 작업을 수행하는 데 필요한 정보를 받아들이는 장치 → 키보드
    • 표준 출력 장치
      • 실행 결과를 내보내는 장치 → 모니터
    • 표준 오류 장치
      • 오류 메시지를 내보내는 장치 → 모니터

 

입출력 방향 바꾸기

  • 파일 관리를 위해 붙이는 일련 번호
  • 입출력 장치를 변경할 때는 이 파일 디스크립터를 사용
  • 표준 입출력 장치를 파일로 바꾸는 것을 ‘리다이렉션(Redirection)’이라고 함
  • 표준 입출력 장치의 파일 디스크립터

 

배시 셸의 사용법

  • 입출력 방향 바꾸기
    • 방향 바꾸기
      • 출력 재지정
      • 입력 재지정
      • >, >> (stdout을 파일로 저장 또는 추가)
      • < (파일을 stdin으로 전달)
    • 파이프( | )
      • Process 연결 (stdout 을 stdin 으로 전달)
      • Process 간의 데이터 흐름은 자동으로 조절됨
    • 출력 리다이렉션
      • >
        • 기존 파일의 내용을 삭제하고 새로 결과를 저장
      • >>
        • 기존 파일의 내용 뒤에 결과를 추가
      • 1
        • 파일 디스크립터 1번
      • 셀은 > 를 사용한 리다이렉션에서 지정한 이름의 파일이 없으면 파일을 생성해서 명령의 수행 결과를 저장
      • 파일이 있으면 이전의 내용이 없어지고 명령의 수행 결과로 대체
    • 예상치 않게 파일의 내용이 겹쳐 쓰이는 상황을 예방하기 위한 설정

  • 파일에 내용 추가하기  :  >>
    • 기능
      • 파일에 내용을 추가함
    • 형식
      • 명령 >> 파일명
    • 지정한 파일이 있는 경우
      • 기존 파일의 끝에 명령의 실행 결과 추가
    • 지정한 파일이 없는 경우
      • 파일을 생성

오류 방향 바꾸기 

  • 오류 리다이렉션: 표준 오류 메시지를 파일에 저장
    • 표준 오류도 기본적으로 화면으로 출력되며 표준 출력처럼 리다이렉션 가능
    • 표준 출력 리다이렉션 → 오류 메시지는 리다이렉션 안됨
    • 오류 리다이렉션에서는 파일 디스크립터 번호를 생략 불가
    • 표준 출력과 표준 오류를 한 번에 리다이렉션하기
  • 입력 리다이렉션 : 표준 입력을 바꿈
    • 명령  ◎ < 파일명
    • 명령 < 파일명

 

배시 셸의 환경변수 설정 방법

  • export 명령어를 통해 실행: 1만 적용(재부팅 시 초기화)
    • export PATH=$PATH:$JAVA_HOME/bin
  • .bashrc 파일 설정을 수정
    • $vi ~/ .bashrc …. 파일의 아랫쪽에 Export PATH=“$PATH:$JAVA_HOME/bin” 를 추가

 

배시 셸의 환경변수

  • CDPATH
    • cd 명령에서 사용되는 변수를 설정
    • cd 명령의 대상 디렉토리가 상대적 경로 이름으로 지정된 경우 cd 명령이 처음에 현재 디렉토리(.)에서 대상 디렉토리를 찾음
    • 대상을 찾을 수 없는 경우, 대상 디렉토리를 찾고 디렉토리 변경이 완료될 때까지 CDPATH 변수에 나열된 경로 이름을 연속해서 검색
    • 대상 디렉토리를 찾을 수 없는 경우, 현재 작업 디렉토리가 수정되지 않은 채 남음
    • [사례]
      • CDPATH 변수가 /home/user1으로 설정되고 두 디렉토리가 /home/user1의 아래 bin와 doc가 있다면, /home/user1/bin 디렉토리에 위치하고 cd doc를 입력하면 전체 경로를 지정하지 않더라도 디렉토리가 /home/user/doc로 변경
  • HOME
    • 사용자의 홈 디렉토리에 대한 경로를 설정
  • LANG
    • 로케일을 설정
  • LOGNAME
    • 현재 로그인한 사용자의 이름을 정의 - LOGNAME의 기본값은 로그인 프로그램에서 passwd 파일에 지정한 사용자 이름으로 자동으로 설정 - 이 변수는 참조만 해야 하고 재설정하면 안 됨
  • MAIL
    • 사용자의 메일함에 대한 경로를 설정
  • MANPATH
    • 사용 가능한 매뉴얼 페이지의 계층을 설정 [주 의] Oracle Solaris 11부터 MANPATH 환경 변수는 더 이상 필요하지 않음, man 명령은 PATH 환경 변수 설정에 따라 적합한 MANPATH를 결정
  • PATH
    • 사용자가 명령을 입력할 때 실행할 프로그램을 찾기 위해 셸이 검색하는 디렉토리를 순서대로 지정
    • 디렉토리가 검색 경로에 없으면 사용자가 명령의 전체 경로 이름을 입력해야 함
    • 로그인 프로세스의 일부로 기본 PATH가 자동으로 정의되고 .profile에 지정된 대로 설정
  • PS1
    • bash 또는 ksh93 셸에 대한 셸 프롬프트를 정의
  • SHELL
    • make, vi 및 다른 도구에서 사용되는 기본 셸을 설정
  • TERMINFO
    • 대체 terminfo 데이터베이스가 저장되는 디렉토리의 이름을 지정
    • /etc/profile 또는 /etc/.login 파일에서 TERMINFO 변수를 사용
    • TERMINFO 환경 변수를 설정할 때 시스템은 먼저 사용자가 정의한 TERMINFO 경로를 검사
    • 사용자가 정의한 TERMINFO 디렉토리에서 터미널의 정의를 찾지 못하면 기본 디렉토리 /usr/share/lib/terminfo에서 정의를 검색
    • 시스템이 어느 위치에서도 정의를 찾지 못하면 터미널이 "dumb"로 식별됨
  • TERM
    • 터미널을 정의
    • /etc/profile 또는 /etc/.login 파일에서 재설정해야 함
    • 사용자가 편집기를 호출할 때 시스템이 이 환경 변수에 정의된 동일한 이름의 파일을 찾음
    • 터미널 특성을 확인하기 위해 TERMINFO로 참조된 디렉토리를 검색
  • TZ
    • 시간대를 설정
    • 시간대는 ls -l 명령에서 날짜를 표시하는 데 사용
    • TZ가 사용자 환경에 설정되지 않은 경우 시스템 설정이 사용
    • 그렇지 않으면 GMT(Greenwich Mean Time)가 사용
728x90
반응형

'TEAM STUDY > LINUX' 카테고리의 다른 글

쉘 스크립트와 쉘 변수 다루기  (0) 2021.01.23
유닉스 쉘 익히기  (0) 2021.01.16
유닉스 쉘의 기능과 종류  (0) 2021.01.16
[ 리눅스 마스터 ] 디렉토리 ?  (0) 2021.01.13
vi 입력과 수정  (0) 2021.01.10