본문 바로가기
> 개발/Computer Science

CLI와 터미널, 쉘

by @일리 2023. 4. 28.

개발 공부를 시작하면서 내 인생 처음으로 맥을 구입했다. 공부를 하면서 맥에 있는 터미널을 이용할 기회가 많았는데 명령어가 무엇이 있는 줄도 모르고 나는 평생 살아왔기 때문에 한 단어 한 단어 치는 것이 너무 떨렸다. 한 번은 명령어를 잘못 입력하고서 어떻게 되돌려야할지 몰라 컴퓨터를 포맷한 적도 있다... 개발 분야에 진입할 때 나에게는 명령어들이 진입장벽으로 느껴질만큼 낯설었기 때문에 터미널에 대해 조금이라도 더 공부해두면 편리할 듯하여 공부해보려고 한다. 

사용자 인터페이스

나는 사용자 인터페이스라고 표현하기 보다는 UI (User Interface) 라고 표현하는 것이 좀더 친숙하다. 사람과 컴퓨터 사이에 상호작용할 수 있도록 만들어진 매개체를 사용자 인터페이스라고 한다. 사용자 인터페이스에는 대표적으로 CLI와 GUI가 있다.

 

1. CLI (Command Line Interface)

CLI는 콘솔창에 키보드로 커맨드=명령어를 입력해 운영체제와 상호작용하는 방식이다. 텍스트로 입력과 출력을 하기 때문에 그래픽을 표현하지 않아서 실행이 빠르다는 장점이 있다. mac OS와 리눅스, 유사 Unix 운영 체제에서는 터미널을 사용하고, 윈도우에서는 CMD(Command Prompt)를 사용한다. 

 

2. GUI (Graphical User Interface)

사용자가 그래픽으로 컴퓨터와 상호작용하는 방식을 의미한다. 키보드 뿐만 아니라 마우스를 활용하여 메뉴, 버튼, 창과 같은 그래픽 요소를 이용해 사용자가 작업을 수행한다. 

터미널(Terminal)

터미널은 명령줄 인터페이스(CLI)를 제공하는 프로그램이다. 사용자는 터미널에 명령어를 입력하고, 컴퓨터는 결과를 터미널에 출력한다. 

맥에서 내장된 터미널 프로그램이 있다.

터미널에서 명령을 입력하는 공간을 명령줄, 또는 명령 프롬프트라고 한다. 개발 공부를 하다가 한 번 정도는 쳐봤을 법한 ls, cd, mkdir을 입력하는 그곳이 바로 명령 프롬프트다. 이 명령프롬프트는 컴퓨터가 입력받을 준비가 되었을 때 화면에 뜬다.  

터미널과 쉘(Shell)

내가 잘 이해가 안갔던 부분은 터미널과 쉘(shell)의 차이다. 터미널이 곧 쉘을 의미한다고 생각했는데 아니었다.

 

쉘은 커맨드를 컴퓨터가 이해할 수 있도록 형태를 바꿔주는 인터프리터 역할을 한다. 인터프리터와 마찬가지로 쉘은 명령을 한 줄씩 읽고 처리한다. 우리가 ls, cd, mkdir과 같은 명령어를 명령 프롬프트에 입력하면, 쉘이 그것을 운영 체제가 이해할 수 있는 명령으로 변환을 하고, 운영 체제의 파일 시스템을 활용해 작업을 수행하게 한다. 

 

반면 터미널은 사용자의 명령과 결과를 출력하는 사용자 인터페이스만 제공할 뿐 입력 받은 명령을 해석하고 작동시키는 기능을 갖고 있지 않다. 다시 말해 터미널은 쉘의 입력과 출력을 표시하는 도구라고 이해하면 된다. 

 

터미널에 명령을 입력하면 터미널이 명령을 쉘로 보내고, 쉘은 명령을 해석한 뒤 운영 체제와 상호 작용하여 명령을 실행한다. 이후 쉘은 결과를 터미널로 보내 화면에 표시한다. 이렇게 터미널과 쉘은 상호작용하는 관계이다.

쉘의 종류

 

VS Code 터미널에서 bash와 zsh를 선택할 수 있다.

VS Code에서 bash 또는 zsh를 선택할 수 있다. 나는 이것들이 무엇인지 몰라서 기본 선택이었던 zsh만 이용했었는데 알고보니 이 두 가지가 쉘의 종류였다.

 

쉘에는 bash, zsh 외에도 tcsh, csh, ksh 등 다양한 종류가 있다.

궁금해서 mac 고객지원에 가서 zsh를 찾아보니 mac OS의 기본 쉘이 bash 에서 zsh로 바꼈다는 걸 알 수 있었다. 두 가지 쉘의 차이점이 궁금해서 챗 지피티에게 물어보니 친절하게도 다음과 같이 알려주었다.


Bash(Bourne-Again SHell) 및 Zsh(Z shell)는 몇 가지 유사점과 차이점이 있는 두 가지 인기 있는 Unix/Linux 셸입니다.

 

  1. 사용자 정의 가능성: Zsh는 Bash보다 더 사용자 정의가 가능합니다. 여기에는 사용자가 원하는 방식으로 셸이 작동하도록 구성할 수 있는 더 많은 내장 기능과 옵션이 있습니다. Bash는 사용자 지정이 덜하지만 인터페이스가 더 간단합니다.

  2. 명령줄 편집: Zsh는 Bash보다 더 나은 명령줄 편집 기능을 제공합니다. Zsh는 하위 문자열 검색, 잘못 입력된 명령 자동 수정 등과 같은 고급 명령줄 편집을 지원합니다.

  3. 탭 완성: Zsh는 Bash보다 더 나은 탭 완성 기능을 제공합니다. Zsh는 Bash보다 더 지능적이고 유연한 방식으로 명령, 옵션 및 인수를 완료할 수 있습니다.

  4. 호환성: Bash는 더 널리 사용되고 오랫동안 사용되었습니다. 많은 스크립트와 명령줄 도구가 Bash용으로 특별히 작성되었으므로 일부 시스템 및 응용 프로그램과 더 잘 호환될 수 있습니다.

 

전반적으로 Bash와 Zsh 중에서 선택하는 것은 사용자의 기본 설정과 요구 사항에 따라 다릅니다. Bash는 대부분의 기본 작업에 잘 작동하는 견고하고 안정적인 셸이며 Zsh는 고급 기능과 사용자 지정 옵션을 제공합니다.


터미널 관련 글을 찾다보니 vim 과 sudo 등 몇 번 봤던 명령어가 보였다. 다음에는 명령어를 공부해봐야겠다. 끝~!

'> 개발 > Computer Science' 카테고리의 다른 글

브라우저 렌더링과 인터프리터, 컴파일러  (0) 2023.02.21

댓글