리눅스 쉘

Violet_Evgadn·2023년 4월 30일
0

Linux

목록 보기
24/34

리눅스 쉘

쉘(Shell)이란?

쉘은 리눅스 커널과 사용자를 연결해주는 명령형 인터페이스이다.

출처 : https://www.geeksforgeeks.org/introduction-to-linux-operating-system/

리눅스의 구조는 위 이미지와 같다.

가장 안쪽에 하드웨어가 존재하며 이 하드웨어가 있기 때문에 서버가 동작할 수 있는 것이다.

하지만 하드웨어만 존재하면 그저 전기가 흐르는 고철이 하나 있는 것에 불과하다.

그래서 이 하드웨어에 "커널(Kernel)"이라는 리눅스 OS의 핵심 구성 요소를 주입한다. 그럼 커널은 하드웨어를 직접 관리하며 사용자에게 관리하는 자원을 배분함으로써 사용자는 애플리케이션을 실행할 수 있는 것이다.

여기서 문제는 커널은 사용자와의 상호작용을 지원하지 않는다는 것이다. 사용자는 리눅스 하드웨어로부터 자원을 받아야 애플리케이션을 실행할 수 있는데 이 자원을 주는 요소에는 접근할 수 없는 상황이 벌어지는 것이다.

따라서 사용자는 컴퓨터(하드웨어)에게 자원을 요청하는 어떤 중계 도구가 필요하며 이 역할을 "쉘"이 지원하는 것이다.

쉘(Shell)은 사용자가 컴퓨터에게 전달하는 명령을 해석하는 프로그램으로 사용자가 원하는 작업을 쉘에게 전달하면 이 쉘이 커널에 해당 요청을 중계하여 사용자가 자원을 사용할 수 있게 해준다.

즉, 쉘은 "사용자의 명령어 해석기"라는 개념으로 접근할 수 있을 것이다.

이렇게만 보면 "리눅스 콘솔 창에서 ls 같은 명령어 입력해서 자원 사용할 수 있는데 굳이 쉘을 사용해야하나?"라는 의문이 들 수도 있다.

하지만 사실 콘솔 창에서 명령어를 입력할 때도 "배시 쉘(Bash Shell)"을 활용하고 있는 것이다. 자세히 알아보자.

쉘의 종류

리눅스 배포판마다 다양한 종류의 쉘이 제공되는데 다수의 리눅스 기본 쉘로 사용되는 것이 "bash(Bourne Again Shell) 쉘"이다.

bash 쉘은 초기 유닉스 쉘인 "Bourne 쉘"과 호환되면서도 속도와 편의성 면을 개선한 GNU 무료 공개용 쉘이다.

우리가 Linux에서 명령을 입력할 때 일반 유저의 경우 $, root의 경우 # 문자 뒤에 명령어를 입력한다.

이렇게 명령을 입력할 수 있는 라인을 "명령 행"이라고 부른다.

사용자는 리눅스 서버에서 명령 행에 명령을 입력하면 바로 Linux에서 결과를 알려준다고 생각하겠지만 사실은 사용자가 입력하고 있는 명령은 Bash Shell에 입력되고 있는 것이다.

즉, 사용자가 ls 명령어를 입력할 경우 이를 바로 커널에 전달하는 것이 아닌 커널이 이해할 수 있도록 Bash Shell이 명령어를 번역한 뒤 커널에 전달함으로써 명령이 수행될 수 있는 것이다.

이를 바탕으로 위에서 했던 "굳이 쉘을 사용해야 하나?"라는 의문도 해결될 것이다.

리눅스 환경에서 명령어를 실행할 때도 직접 실행하는 것이 아닌 Bash Shell이 명령을 번역하는 과정이 숨겨져있을 뿐 존재하기 때문이다.

대부분의 shell들은 초기 유닉스 쉘인 "Bourne 쉘"으로부터 파생되었는데 그 종류에 대해 몇 가지만 알아보자.

  • Bourne Shell
    • 실행 명령 : sh
    • 유닉스 계열 OS에서 지원하는 OS 초기부터 사용된 쉘로 많은 쉘 스크립트가 이에 기반을 둠
  • C Shell
    • 실행 명령 : csh
    • C언어와 비슷하게 스크립트를 작성할 수 있음
  • TC Shell
    • 실행 명령 : tsch
    • C 쉘을 확장 개선한 버전으로 명령 행 완성과 명령 행 편집 기능이 추가됨
  • Korn Shell
    • 실행 명령 : ksh
    • Bourne 쉘을 확장하면서도 C 쉘의 많은 기능을 추가한 쉘로 System V 계열 유닉스 사용자에게 인기가 많았음
  • Bash Shell
    • 실행 명령 : bash
    • Bourne 쉘을 토대로 C쉘과 Korn 쉘의 유용한 기능을 가지고 옴
      • Alias 기능 : 명령어 단축 기능
      • History 기능 : 화살표 키로 과거 명령어 검색 가능
      • 자동 이름 완성 기능(Tab 키)
      • 프롬프트 제어 및 명령 편집 기능
      • Job Control 기능
      • 연산 기능
    • 리눅스에서 가장 많이 사용되는 쉘
  • Z Shell
    • 실행 명령 : zsh
    • Korn 쉘을 확장한 쉘로써 history 기능이 강화되었으며 명령행 편집 기능 또한 향상됨

쉘 기능

명령어 해석

위에서 말했듯 쉘은 사용자와 커널 사이에서 명령을 해석하여 전달한다.

프로그래밍 기능

쉘을 통해 "쉘 스크립트(Shell Script)"라는 것을 만들 수 있다.

쉘 스크립트는 여러 개의 명령이나 함수를 포함한 프로그램을 말하는데 이를 통해 1개의 쉘 스크립트만 실행하면 여러 개의 명령을 실행시킬 수 있는 프로그램을 만들 수 있다.

사용자 환경 설정

리눅스의 세션 변수들을 정의하여 사용자가 리눅스 환경을 설정할 수 있다.


리눅스에서의 쉘

◎ 현재 사용하는 쉘 확인

/bin/bash --version

처음 Linux 세팅을 하였을 떄 기본 Shell을 Bash Shell로 설정하였으므로 Bash Shell의 버전을 확인하면 된다.

현재 리눅스에서 활용할 수 있는 Shell 종류

cat /etc/shells

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글