ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Bash] 쉘 스크립트 개요
    Programming/Shell 2017. 8. 16. 20:58

    1-1. Unix/Linux 소개 특징


     1.1.1 UNIX

    - UNIX 1969 AT&T 벨연구소의 직원인 톰슨, 데니스 리치, 더글라스 매클로리 등이 최초 개발하였으며이후 C언어로 재작성되어 다양한 

      플랫폼에 이식될 있도록 보안되었다.

    - 벨연구소는 대학과 연구기관에 UNIX 활용할 있도록 라이선스를 제공하였으며, 버클리 대학교에서는 UNIX 네트워크 프로토콜인 TCP/IP  

      다양한 기능을 보강하여 BSD(Berkeley Software Design) 배포본을 제작하고 이후 파생되는 많은 UNIX 영향을 끼쳤다. 

     

    1.1.2 Linux

    1991 리누스 토발즈가 핀란드 헬싱키 대학의 대학원생을 의해 커널이 개발된 이래 , 1984년부터 리처드 스톨만에 의해 추진된 GNU 프로젝트의 

       다양한 소프웨어 Linux이다.

    - 현재는 X-windows를 기반으로 하는 GNOMEKDE 다양한 데스크톱 환경과 수많은 응용프로그램이 실행될 수 있도록 발전하고 있다.

    - 현재 개인용 데스크톱 환경뿐만 아니라 안드로이드 등 스마트폰에서부터 기업용 엔터프라이즈 환경에 이르기까지 다양한 플랫폼에 이식되어 활용

    - 대표적 리눅스 배포본에는 데비안, 레드햇, 슬랙웨어, SUSE, 우분투, 젠투가 있으며 그 밖에도 다양한 배포본들이 파생되어 개발되고 있다.

     


    1.2 쉘의 역할 특징

    - 일반적으로 쉘은 운영체제에서 커널(Kernel)과 사용자 사이의 인터페이스(Internace), 즉 가교 역할을 하는 프로그램으로, 운영체제의 내부 명령어나 

      응용프로그램을 실행하는 것을 말한다.

    - 시스템 전체적으로 보면 그림에서처럼 운영체제는 결국 하드웨어의 한 부분인 저장장치의 일부분에 저장된다.

    - 운영체제를 세부적으로 보면, 운영체제가 설치되어 있는 저장장치를 비롯하여 모니터, 그래픽카드, NIC 시스템에 간접적으로 연결되는 

      하드웨어를 통제하는 커널(Kernel) 이러한 커널과 사용자 응용프로그램 사이에서의 명령 전달을 담당하는 쉘로 구분할 있다.

    - 운영체제 마다 기본적으로 다양한 쉘을 제공하고 있고 사용자도 별도의 쉘을 설치해서 활용할 있다

    -> 많은 사람들은 쉘이라고 하면 검정 바탕에 흰색 글씨로만 구성된 터미널을 떠올리기 쉬운데 실제 많은 사용자가 사용하는 Windows 

        운영체제에서도 그림처럼 CUI기반의 명령 프롬프트와 GUI 기반의 탐색기를 모두 제공한다

    -> 반대로 UNIX Linux 에서도 텍스트 기반의 환경 외에 그래픽 기반의  환경을 제공하고 있다IBM AIX(Advanced Interactive Executive) 

        SUN Soliaris처럼 알려진 UNIX 환경 많은 사용자가 사용 중인 Linux 배포본인 CentOS 환경이다.

    - CDE(Common Desktop Environment)

    -> 공통 데스크톱 환경은 유닉스를 위한 그래픽 데스크톱 환경이며 모티프 위젯 툴킷을 도입하고 있다.

    -> 유닉스 표준화 단체들 가운데 하나인 공통 개방형 소프트웨어 환경이 지정한 유닉스 GUI규격이다.

    -> 주요 UNIX벤더 및 단체에서 공통된 GUI 데스크톱 환경을 위한 규격으로 CDE를 사용하는 대표적인 운영체제로는 IBMAIX, HTHP-UX, SUN의 

        Solaris, 실리콘그래픽스의 IRIX 등이 있다.

    -> 최근 각 벤더별로 사용자의 편의를 증대시킨 다양한 GUI 데스크톱 환경을 추가로 제공하고 있다.

     

     

    1.3 쉘의 종류

    - 1974 Steve R.Bourne $ 프롬프트를 기본으로 하는 Bourne Shell(sh)이라고 부르는 UNIX 쉘을 만든 이래로 K , Z 쉘등 수십 종의 쉘이 

      제작되어 활용되고 있으며, 주요 쉘의 종류를 다음의 표와 같이 구분할 수 있다.

     # 쉘의 종류

    구분

    개발자

    설치 위치

    설명

    Sh

    Stephen Bourne

    /bin/sh

    대부분의 UNIX Linux에 설치되어 있는 쉘

    Bash

    Brain Fox, Chet Ramey

    /bin/bash

    Linux 기본 쉘로 sh 호환

    Ksh

    David Korn

    /bin/ksh

    1980년대 벨연구소에서 개발, 부동 소수점 계산이 가능

    Csh

    Bill Joy

    /bin/csh

    C언어와 비슷한 스타일로 Script 작성 가능

    Tcsh

    Ken Greer

    /bin/tcsh

    csh 커맨드 히스토리 추가 기능을 보완

    - 지금 접속 중인 시스템의 쉘의 종류를 확인하려면 ps -p $$명령을 사용하면 된다
    # 쉘의 종류 확인

    - Linux 일반적 쉘인 bash 익숙해 있다가 AIX 시스템의 쉘인 ksh 처음 접속해보니 명령어나 환경변수 등에 차이가 있어 bash 변경을 시도했다.

    -> 그러나 당시 시스템에는 bash가 설치되지 않아 터미널 접속 후 한동안 불편했던 기억이 있다.

    -> 이렇듯 관리하는 시스템에 항상 자신이 원하는 쉘이 설치되어 있을 거라고 생각하면 안 된다.

     

     

    1.4 스크립트란?

    - 어린 시절 컴퓨터를 사용하던 환경은 까만 화면에 깜빡이는 커서를 이용해서 글자들의 흐름을 지켜보는 부터 시작되었다지금은 GUI 기반의 

      다양한 아이콘 클릭을 통해 필요한 프로그램을 실행하는 환경이지만  대부분 환경은 DOS라는 CUI 기반 운영체제를 사용했다

    - DOS 컴퓨터 전원이 들어가고 부팅 과정을 거치게 되면 연결된 모든 하드웨어를 바로 사용할 있는 것이 아니었기 때문에 부팅 속도 자체는 

      무 빠른 장점이 있다.

    -> 그러나 한글이나 마우스 같은 기본 라이브러리와 드라이버까지는 별도로 구동시켜야 했기 때문에 컴퓨터답게 사용하려면 많은 부분을 숙지해야 

        하므로 일반사용자는 불편했다.

    -> 이유중 하나는 지금의 컴퓨터 환경과는 비교하기 어려운 640kb 또는 1MB 메인 메모리를 어떻게 하면 효율적으로 사용할 있을지를 사용자가 

        직접 고민해야 하는 시절이다.

    - 그림의 apple 매킨토시(Macintosh)에서 구동되는 GUI 운영체제인 MAC OS 있기는 했지만 고가의 하드웨어를 사용해야 했고, DOS 프로그램과의 

      호환성 문제로 우리나라에서는 많은 사람들이 활용하지는 않았었다.

    - 컴퓨터 사용의 편의성을 확보한 GUI 기반의 실행 환경인 Windows 초기 버전이 있었지만 DOS 통해 구동되는 DOS 확장 프로그램 수준이었기 

      때문에 일반 사용자가 쉽게 사용하기에 어려움이 있었다.

    -> 번거로움을 조금이나마 해소하고자 DOS 구동 메모리 구성 드라이버의 로딩을 케이스별로 메뉴로 구성하여 케이스별로 선택할 있는 

        배치 파일을 만들어 활용하는 사람들이 있었다.

    -> 당시 배치 파일을 지금의 스크립트와 비슷한 개념으로 이해하면 것이다.

    - 쉘 스크립트(shell script) 쉘이나 명령 인터프리터에서 돌아가도록 작성되었거나 운영체제를 위해 작성된 스크립트이다.

    - 쉘 스크립트가 수행하는 일반 기능으로 파일 이용, 프로그램 실행, 문자열 출력 등이 있다.

    - 위키 백과에 기록된 내용처럼 쉘 스크립트를 "운영체제의 쉘에서 사용할 수 있는 명령어 및 환경 변수 등을 모아서 만든 패치 파일"로 정의할 수 있다.

      다시 말해서, 쉘이란 사용자가 내린 명령어를 해석하고 그 결과를 커널에게 전달하는 프로그램이라고 보면 된다.

    - 직접 타이핑해서 데몬이나 서비스를 구동하는 경우도 매우 극단적인 상황이겠지만 쉘 스크립트란 거창한 이름이 아니더라도 최소한 콘솔 환경에서 

      메모장이나 테스트 파일에 명령 줄을 미리 작성해서 복사하기와 붙여넣기를 통해서라도 활용하는 것이 일반적인 모습이다.

     

     

    1.5 스크립트 활용 이점 

    1.5.1 반복 작업에 대한 자동화가 가능

    - 쉘 스크립트를 활용하는 가장 큰 장점은 관리자의 번거로우을 덜 수 있다는 것이다.

    -> 스케줄 설정과 같이 주기적으로 수행하는 단순한 작업에 쉘 스크립트를 활용하면 관리자가 일일이 타이핑하지 않아도 된다.

    -> 사용자들이 특정 시기에 집중적으로 접속하여 시스템에서 과부하가 일어나곤 했는데, 그 시스템에 탑재되는 자료의 중요성 때문에 수시로 백업도 

        해야 하는 문제가 있다

    - 간단한 쉘 스크립트를 작성하고 사용자들이 어느 시기에 어느 규모로 접속하는지를 통계내서 사용자가 적게 접속하는 시기에 수시로 백업하는 쉘 

      스크립트 제작한 경험이 있다.

     

    1.5.2 기존의 명령어를 사용자만의 명령어로 보안 

    기본적으로 UNIX/LinuxPOSIX라는 표준 규약을 준수하지만 모든 명령어가 통일된 것은 아니기 때문에 운영체제 마다 명령 옵션이나 결과 형식에 

      약간의 차이가 있다.

    -> 운영체제에서 제공하는 명령어 실행 결과를 사용자가 원하는 형식으로 재구성해야 할 때가 있다.

    -> 운영체제가 다른 시스템에서 동일한 형태의 로그를 추출해야 할 때가 있다.

    -> 쉘 스크립트를 이용하여 기존의 명령어의 결과를 원하는 형태로 결과로 표시할 수있으며, 이를 위해 입출력 재지정을 활용하면 된다.

    - POSIX[포직스]는 유닉스 운영체계에 기반을 두고 있는 일련의 표준 운영체계 인터페이스이다.

    -> POSIX (Portable Operating System Interface) 서로 다른 UNIX OS 공통 API 정리하여 이식성이 높은 유닉스 응용프로그램 

        개발하기 위한 목적

    -> 대부분 시스템들이 AT&T에서 개발된 UNIX에 뿌리를 두고 있지만 시간이 흐를면서 다양한 제조사와 개발자의 손을 거치면서 운영체제별 

        의존성 문제가 발생되었다. 이에 POSIX는 운영체제별 의존성 문제를 해결하기 위해 서로 다른 UNIX 운영체제에서 공통 API를 정리하여 

        운영체제간 이식성이 높은 UNIX 응용 프로그램을 개발하기 위한 목적으로 재장한 API 규격이다.

    -> UNIX 계열 외에 MS Windows NT POSIX 1.0 준수하고 있으며 Windows XP부터 폐지했지만 이후 Window Server 2003 R2부터 POSIX 

        준하는 서브시스템을 지원하고 있다.

     

    1.5.3 손쉽고 빠른 개발 보완이 가능

    - 쉘 스크립트 자체는 운영체제의 명령어  등을 묶어서 프로그램화한 후 인터프리터 방식으로 수행되기 때문에 별도의 컴파일러를 설치할 필요가 없으며,

      당연히 컴파일 과정도 불필요하다.

    -> 운영체제의 명령어들은 잘 알고 있다면 손쉽고 빠른 개발 및 보완이 가능하다.

    -> 개발이라고 말하기 보다는 '필요한 절차를 기술하는 것'에 가깝다.

    - 시스템 관리자가 관리하는 여러 대의 서버 및 원격지에 있는 서버를 설정하거나 패치할 때 쉘 스크립트를 활용하면 설정 및 패치 작업을 보다 

      효율적으로 할 수 있다.

      


    1.6 정리

    - 초기 UNIX 시스템이 개발된 이래로 벤더별로 다양한 UNIX 버전과 배포본이 파생되어 운영되고 있다. 

      더욱이 이들 운영체제에서 구동되는 쉘 환경 역시 다양하게 존재하고 있다.

    -> POSIX 규약을 통해 틀에서의 상호 호환성에 점진적인 발전이 있기는 했지만 운영체제의 성능을 보다 향상시키고 독자적 기능을 

        포함하고자하는 벤더와 제작자의 노력으로 인해 시스템을

    -> 운영하는 관리자들은 새로운 시스템이 도입될 때마다 새로운 명령어를 추가적으로 습득해야 되는 상황이다이러한 상황에서 스크립트를 

        이용하면 효율적인 시스템 관리가 가능하고 관리자에게 길들여진 최적화된 시스템 구축이 가능함을 소개한다.


    'Programming > Shell' 카테고리의 다른 글

    [Bash] 코딩 규칙 및 모범 사례  (0) 2020.01.17
    [Bash] 스크립트 제어  (0) 2017.12.11

    댓글

작은거인's Blog / Designed by TISTORY