쉘이란 무엇인가?
쉘을 공부할 때 같이 커널도 공부를 하는게 좋다.
커널이란 알맹이 코어 이런 뜻을 가지며, 쉘은 껍데기, 주변 이라는 뜻을 가진다.
먼저 이 사진을 보면 가장 안쪽에 하드웨어가 있다.
하드웨어란 우리가 쓰는 CPU, 메모리, SSD 등을 의미한다. 컴퓨터를 쓴다는건 결국 기계를 동작시켜 결과를 얻어내는 일이다. 하드웨어를 감싸는 것이 바로 커널이다. 커널은 하드웨어를 직접적으로 제어하는 운영체제에서 가장 중심이 되는 코어이다.
그 커널 바깥쪽에는 쉘이 존재한다. 쉘은 사용자가 리눅스에서 ls 명령어를 내리면 디렉토리의 리스트를 보여주는것 같은 입력한 명령이 쉘을 대상으로 명령을 내리는 것이다.
쉘은 우리가 입력한 명령을 해석해서 커널이 이해할 수 있는 방식으로 커널에게 전달한다. 그렇다면 커널은 하드웨어를 제어해서 처리를 수행할 수 있도록 명령하고 마지막으로 하드웨어가 그 결과를 수행한다.
그 결과를 커널에 알려주고 커널이 쉘에게 알려주며 우리가 그 결과를 확인할 수 있는 것이다.
커널을 실제로 제어하는 것은 어려운 일이고 제어할 수 없기 때문에 사람이 이해하기 쉬운 형태의 명령어를 입력하면 그 명령어를 쉘에 해당하는 프로그램들이 해석해서 커널에게 전달해 주는 것이다.
bash vs zsh
리눅스에서 echo "hello"를 검색해 보자
이 명령어는 뒤에 들어오는 문자를 화면에 출력하는 것이다.
그 후 echo $0이라고 입력해 보자.
그러면 bash 라는 단어가 나온다. 이는 쉘이라는 카테고리에 속하는 구체적인 제품중의 하나인 bash 라는 프로그램을 사용한다는 의미이다.
그 다음 우리가 알아볼 것은 zsh 이다. 먼저 리눅스 창에 zsh라고 쳐보면 파일이나 폴더를 찾을 수 없다고 나온다. 이것은 zsh를 설치하지 못했다는 것이다.
우분투이므로 apt-get을 통해서 zsh를 다운받아 준다.
그 후 zsh를 치면 이런 화면이 나온다.
그 다음 우리는 엔터를 눌러준다.
그 후 echo $0이라고 입력하면 zsh이 동작하는 것을 알 수 있다. 우리가 이제 입력하는 명령어는 zsh를 통해서 커널로 전달되고 그 결과는 zsh를 통해서 화면에 뿌려진다.
그렇다면 이 두 쉘은 어떤 차이점이 존재할까?
먼저 bash와 zsh는 부모가 같기 때문에 유사한 특성을 가지고 있다. 하지만 zsh는 bash가 가지지 않은 추가적인 기능을 가지고 있어 조금 더 편리하다는 평가를 받고있다.
bash의 경우 cd를 입력한 후 tab을 두번 누른다면 숨김 폴더들이 나오게 된다.
하지만 zsh의 경우 cd를 입력한 후 tab을 한 번 누르면 디렉토리들이 나오지만 숨김 디렉토리는 나오지 않는다. 이렇듯 간단한 명령에서도 차이점을 보인다.
pwd의 경우에는 둘 다 같은 모습을 보여주고 있다.
만약 절대경로를 통해서 /home/ubuntu에 들어오려면 어떻게 해야할까?
bash의 경우 cd /home/ubuntu라고 쳐야 완성이 된다.
zsh의 경우 cd /h/u를 입력한 후 tab키를 누르면
위와같이 자동으로 완성시켜 준다.
둘 모두 결과는 같지만 편의성 자체는 zsh가 더 높다는 것을 보여준다.
zsh, bash를 통해서 ubuntu의 하위 디렉토리인 why 디렉토리로 들어갔다.
home 디렉토리 하위에는 why 말고도 여러 디렉토리가 존재한다. 그 중 dir1으로 돌아가려 한다.
zsh의 경우 cd why dir1으로 입력하면 dir1으로 들어갈 수 있다.
그러나 bash에서는 이 명령어가 실행되지 않는다.
즉 명령어들의 편의성이 각 쉘마다 차이점이 존재한다.
커널과 쉘은 분리되어 있기 때문에 자신에게 맞는 쉘을 선택하여 커널을 조종할 수 있다.
이러한 사진을 보자. 하드웨어와 커널은 같지만 쉘은 나뉘어져 있고 유저들은 자신에게 맞는 쉘을 사용하는 모습을 볼 수 있다.
같은 컴퓨터에 접속하여 사용하더라도 사용하는 쉘에 따라서 커널에 접근하는 방법이 달라진다.
자신에게 맞는 쉘을 선택해서 운영체제를 제어하는 것이 중요하다.
출처
https://opentutorials.org/course/2598/14203
'[Linux]' 카테고리의 다른 글
[linux] crontab이란 무엇인가? (0) | 2023.01.09 |
---|---|
[Linux 기초] 쉘 스크립트란 무엇인가? (0) | 2022.12.17 |
[Linux 기초] 왜 CLI를 사용하는 것인가? (0) | 2022.12.11 |
[Linux 기초] 다운로드 방법 (wget, git) (0) | 2022.12.11 |
[Linux 기초] Package Manager (0) | 2022.12.08 |