쉘과 커널

hyHA·2023년 12월 17일
0

쉘과 커널의 관계

Kernel(커널)이라는 것은 알맹이, 핵심, 코어.
Shell(셸)이라고 하는 것은 껍데기 주변.

컴퓨터를 쓴다는 건 기계들을 동작시켜서 어떤 원하는 결과를 얻어내는 일이다

사용자가 Linux에서 ls - al 하고 엔터를 치면
현재 디렉토리에 있는 파일의 목록을 운영체제가 확인하고 그 결과를 여러분의 눈에 출력시켜준다

이 과정을 좀 더 자세하게 들여다보면,

개발자가 Shell에게 명령을 입력하면,
Shell은 입력받은 명령을 해석해서 Kernel이 이해 할 수 있는 방식으로 전달
Kernel은 하드웨어를 제어해서 처리를 수행할수 있도록 명령
하드웨어가 동작 후 처리결과를 Kernel에게 알려줌
KernelShell에게 알려주면 사용자는 실행된 결과를 확인할 수 있다.

  • 하드웨어라 : 컴퓨터의 기계적인 부분들. 메모리, 하드디스크, SSD, CPU..
  • Kernel : 하드웨어(물리적인 기계)를 직접적으로 제어하는, 운영체제에서 가장 중심이 되는 그 코어
  • Shell : 사용자가 입력한 명령을 해석하는 프로그램
    • Kernel을 사람이 직접 제어하는 것은 어려운 일이고 제어할 수 없기 때문에, 사람이 입력한 명령어를 해석해서 Kernel에게 전달해 주는 것

커널과 쉘이 분리되어 있는 이유(추정)

그렇다면 Linux, 더 나아가서 Unix 계열의 시스템을 만든 사람들은 왜 Kernel이라고 하는 부분과 Shell이라는 부분을 한덩어리로 만들지 않고 이렇게 분리한걸까?

그것은 추정하건대 여러가지의 Shell이 생길 수가 있다. 그럼 사용자 입장에서는 선호하는, 편하게 느껴지는 Shell 프로그램을 선택해서 좀 더 편리하게, 취향에 맞게 Kernel을 제어할수 있을 것

Shell이라는것이 무엇인가를 이해하기 위해서는 하나의 Shell만을 써서는 Shell과 Kernel을 구분하는 것이 쉽지가 않다. 그래서 몇가지 종류의 서로 다른 Shell을 써보면 kernel과 Shell을 구분하기가 좋을 수 있다

지금까지 써왔던 Shell이 어떤 구체적인 프로그램이였는지를 확인하고 그리고 지금까지 써보지 않은 Shell을 써보는 걸 통해서 아~ Shell이라는 것은 Kernel이랑 구분되는구나 이거를 좀 확인할 수 있다

그리고 이 내용은 운영체제를 쓰는 입장에서 알면 좋고 몰라도 괜찮은 일. 어렵지만 중요하지 않은 내용일 수 있다. 하지만 공부하는 과정에서 만나는 여러가지 개념을 좀 쉽게 이해하고, 또 오래 기억하고, 관점포인트가 좀 더 풍부해지면서, 좀 더 재밌게 공부하기 위해서는 이런 주변에 있는, 저 밑에서 일어나는 어떤 본질적이고 근원적인 일들이 어떻게 돌아가는지를 좀 알면 또 그게 도움이 된다

아래에서 bash와 zsh의 비교를 통해, 사용자들은 자기가 선호하는 shell을 깔아서 사용을 하게 되면 자기에게 더 맞는 환경을 구성할 수 있다는 것을 알 수 있다. 이렇게 shell을 kernel의 일부로 넣지 않은 걸 통해서 사용자들이 shell을 선택할 수 있게 한 거라고 볼 수 있지 않을까

하드웨어가 중간에 있고 kernel이 그 바깥에, 그리고 여러 명의 사용자들이 존재하는데 각각의 사용자마다 각각의 서로 다른 shell을 쓰고 있는 것

위 그림을 해석하면, 사용자는 자기가 원하는 명령어를 입력해서 shell에게 전달. 그럼 shell은 사용자가 입력한 명령(built-in-command, cat, ls 같은 것들)을 구동시켜서 그 명령어가 유닉스의 kernel에 요청을 하면 그 결과를 가져와서 유저에게 그 결과를 보여주는 것

bash vs zsh

echo 라고 하는거는 뒤에 들어온 문자를 화면에 출력하는 녀석.
echo hello라고 하면 hello가 출력된다.
echo $0 을 하면 shell 이라는 카테고리에 속하는 구체적인 제품이 뜸. 아마 대부분 bash일 것

zsh 설치

이번에는 다른 shell을 한번 써보자.

zsh zshell 이렇게 입력했을 때 'no file, no such file or directory' 라고 나오면이 프로그램이 설치가 안 돼 있는 것

지금은 zshell 이라고 하는 걸 배우는 수업이 아니기 때문에 설치하지 않아도 되고 중요한 것은 shell 이 무엇인가를 드러내는 것이 우리 수업의 목표이기에 설치에 너무 집중하지 않아도 된다

sudo apt-get install 라고 입력하면, 리눅스 중에 ubuntu 같은 운영체제에서는 이 프로그램을 설치 할 수 있다.

zsh라고 치면 메시지가 뜨는데 요거는 무시해도 괜찮음. 엔터 치자.
echo $0 을 했을 때 zsh 라고 뜨면 zshell라고 하는 shell이 동작하고 있는 상태
즉, 사용자가 입력하는 명령들은 zshell을 통해서 커널로 전달되고 있고, 커널에서 만들어진 결과는 zshell을 통해서 우리의 화면에 표시되고 있는 것이다

bash와 zshell 간에 어떤 차이가 있는가

bash와 zshell은 부모가 같기 때문에, 역사적으로 상당히 유사한 특성을 갖고 있다.
하지만 zshell의 경우에는 bash가 갖고 있지 않은 좀 더 추가적인 기능들을 가지고 있기 때문에 좀 더 편리하다 라고 평가를 받고 있다.

화면을 두 개로 쪼개자.
위쪽에 있는건 zshell이고, 아래쪽에 있는건 bash
(아마 대부분 bash가 기본적으로 탑재돼 있을 것이고 이 zshell을 저는 설치를 해서 요걸 한번 써볼려고 하는 )

  • cd 라고 하고 한 칸 띄우고 tab 키를 눌러 보자

bash의 경우에는 이렇게 숨겨진 디렉터리 . 으로 시작하면 숨김 디렉터리 요거까지 표시를 해준다
zshell의 경우에는 tab 키를 한 번만 눌러도디렉터리의 명령이(목록이) 나오는데 숨김 디렉터리는 또 표현이 안된다.

  • pwd 라고 입력한 상태에서 절대 경로를 통해서 ubuntu 라는 디렉터리로 들어 오고 싶다면,

bash에서는 cd /home/ubuntu 이렇게 하셔야 되는데
zshell에서는 cd /h/u 요렇게 하고 tab키를 누르면 cd /home/ubuntu으로 자동으로 완성을 해줌. 그 상태에서 엔터치면 됨.

결과는 같지만 zshell이 좀 더 편의성이 높다는 것을 우리가 알 수가 있다

  • ubuntu/why디렉터리말고 ubuntu/dir1으로 이동해보자

먼저 why 라고 하는 디렉터리로 들어가보자
bash는 cd /home /ubuntu/why 이런 식으로 입력해야 되는데
zshell에서는 cd /h/u/w라고 하고 tab키를 누르면 자동완성이 되고 엔터를 치면 같은 결과

그리고 이 경로에서 why라는 디렉터리 말고 dir1 이라는 디렉터리로 바꾸자
zshell에서는 cd why dir1이라고 하면 된다.
하지만 이런 기능은 bash에서는 작동하지 않는다.
즉, 사용자가 입력하는 어떤 명령어들의 편의성이 각각의 shell 마다 다르다는 것.

profile
룰루랄라

0개의 댓글