리눅스/관련 내용

[LINUX] 셸(Shell)이란?

ㅎㄷㄹㅁㅇ 2023. 3. 23. 17:51
반응형

리눅스에서의 Shell

Shell이란 시스템에 대한 인터페이스를 제공하는 것을 말합니다. 리눅스, 유닉스를 사용하는 사용자로부터 정보를 입력받아 그 입력을 바탕으로 프로그램을 실행합니다. OS에서는 특정 작업에 따라 CLI(command-line-interface) or GUI(graphical user interface)를 사용하고 이를 shell, 바깥층의 개념으로 이름지어졌습니다. 

CLI를 이용한 Shell을 사용시 명령어와 호출을 하는 구문에 익숙해야 하며, Shell의 종류는 다양합니다. 

 

목차

     

    셸 프롬프트(Shell Prompt)

    Bash shell을 기준으로 명령 프롬프트라고 하는 프롬프트 #(root,최상위계정),$(일반계정)는 셸에 의해 실행됩니다. 프롬프트가 표시되는 동안 명령을 입력할 수 있습니다.
    사용자가 Enter를 입력하면 그 전까지의 명령어를 Shell이 입력 값으로 받아들입니다. 입력의 첫 번째 단어를 보고 실행할 명령을 결정하고 공백과 탭으로 구분해 명령어에 따른 옵션을 값을 수행합니다. 

     

     

     

    셸의 종류

    - sh (Bourne shell,  sh)
    Prompt : $
    Path : /bin/sh

     

    : AT&T 벨 연구소의 스티븐 본(Stephen Bourne)이 개발했고 1977년에 처음으로 유닉스 버전 7에 포함되었습니다. 
    많은 유닉스 계정에서 기본 셸로 사용될 만큼 오랫동안 인기를 누렸습니다.
     
    - bash (Bash, Bourne-again shell, 본 어게인 셸)
    Prompt : #
    Path : /bin/bash


    :본 셸을 대체하는 자유 소프트웨어로서 GNU 프로젝트를 위해 브라이언 폭스(Brian Fox)가 작성한 유닉스 셸입니다.

    배시 명령어의 문법은 거의 대부분이 sh와 호환되어 쓰일 수 있습니다. 또한 ksh, csh에서 많은 아이디어를 받아서 명령 히스토리, 디렉터리 스택, $RANDOM POSIX 형식 명령어 치환 등을 지원합니다.


    - csh (C shell, csh)
    Prompt %
    Path : /bin/csh


    : csh는 기본적으로 C언어를 전신으로 하여 만들어졌으며 강력한 프로그램 작성 기능을 가지고 있어 C 셸이라 불리게 되었습니다.

    - ksh (Kornshell, ksh)
    Prompt $
    Path : /bin/ksh


    : 콘셸(Kornshell, ksh)은 1980년대 초에 벨 연구소의 데이비드 콘이 개발한 유닉스 셸로, 1983년 7월 14일 USENIX에서 발표되었습니다.

    - zsh (Z shell, zsh)
    Prompt %
    Path : /bin/zsh 


    : Z 셸(Z shell, zsh)은 상호작용 로그인 셸이자 셸 스크립트를 위한 강력한 명령 줄 인터프리터로 사용할 수 있는 유닉스 셸이다. zsh는 bash, ksh, tcsh의 일부 기능을 포함하여 수많은 개선 사항이 갖추어진 확장형 본 셸입니다.

    - tc Shell (tee-see-shell, tcsh)
    Prompt >
    Path : /bin/tcsh

     

    : C 셸(csh) 기반이면서 C 셸과 호환되는 유닉스 셸이다. 명령 줄 완성, 명령 줄 편집 등의 기능이 포함된 C 셸입니다. 다른 셸들과 달리 tcsh 스크립트 안에 함수를 정의할 수 없으며 사용자는 csh에서처럼 별칭(alias)을 대신 사용해야 합니다.

     

     

     

    셸 확인

    접속한 계정에서 사용하고 있는 셸을 확인하는 방법은 아래 명령어를 통해 확인이 가능합니다. 

     

    또한 현재 서버 내 설치되어 있는 shell을 확인하기 위해서 /etc/shells 파일을 확인하면 알 수 있습니다. 

    rpm 명령어를 통해 설치된 shell을 확인 할 수 있지만 아래 파일을 보면 더욱 간단합니다.  

    # cat /etc/shells

     

    계정 별로 사용 중인 shell 이 다를 수 있습니다. 계정 별 shell을 확인 하기 위해 /etc/passwd 파일을 열어 확인합니다.

    $ cat /etc/passwd

     

     

     

     

    셸 변경

    shell은 사용자의 편의성과  특정 작업에 따라 계정별로 사용하는 경우가 많습니다. 계정을 생성 할 때 shell을 지정하여 생성하기도 하지만 그렇지 못한 경우라면 명령어를 통해 변경하거나 /etc/passwd 파일을 수정하여 변경할 수 있습니다.

     

    $ chsh -l
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    /bin/csh
    /bin/tcsh
    /usr/bin/csh
    /usr/bin/tcsh
    
    $ chsh 
    Changing shell for test.
    New shell [/bin/csh]
    /bin/bash
    Password: 
    Shell changed.
    
    $ echo $SHELL
    /bin/csh
    
    $ exit
    logout
    
    # su - test
    Last login: Fri Mar 24 15:22:18 KST 2023 on pts/7
    
    $ echo $SHELL
    /bin/bash

     

    chsh 명령어를 통해  계정에 접속하여 순차적으로 변경하는 방법으로 명령어를 입력하여 변경합니다.  chsh -l 명령어로 현재 사용할 수 있는 shell을 확인할 수 있으며, chsh 명령어를 통해 원하는 shell로 변경 후 패스워드를 입력합니다. 

    현재 접속중인 터미널에서 재접속을 하고 shell을 확인합니다. 

     

     

     

    Ref

    https://www.tutorialspoint.com/unix/unix-what-is-shell.htm
    https://ko.wikipedia.org/wiki/배시_(유닉스_셸)

    반응형

    '리눅스 > 관련 내용' 카테고리의 다른 글

    [SAP HANA] sapconf vs saptune  (0) 2022.03.23
    TOP