터미널 - 터미널과 셸

가이드 목표

  • 컴퓨터 사용 환경의 역사에 대해 알아봐요.
  • 터미널과 셸에 대해 알아봐요.
  • bash 셸의 기본 사용법을 익혀요.
  • 우분투의 apt 패키지 매니저 사용법을 익혀요.

필요한 것들

  • 우분투와 ssh 가 설치된 서버 컴퓨터
  • 서버 컴퓨터와 ssh 로 연결된 메인 컴퓨터

컴퓨터 사용 환경의 역사

이전 가이드에서 컴퓨터의 시각적 환경(Graphical User Interface, GUI)명령줄 환경(Command Line Interface, CLI) 에 대해 잠깐 언급했었는데요. 컴퓨터의 사용 환경 역사에 대해 아주 짧게 이야기하고 넘어가보려 해요.

초창기의 컴퓨터에선 오직 명령줄 환경만 존재했어요. 그래서 컴퓨터를 켜면 화면에는 명령 입력창만 덜렁 나왔어요. 이 이유는 시각적인 컴퓨터 환경에 대한 아이디어가 나중에 나온 것도 있지만, 당시 컴퓨터의 성능도 이를 구현할 만큼 높지 못했거든요.

하지만 컴퓨터의 활용 방법은 그때나 지금이나 크게 다르지 않았어요. 그래서 당시 사람들도 지금의 우리처럼 명령줄 환경만으로 아래의 작업들을 모두 해왔었어요.

  • 프로그램 설치/실행
  • 파일 관리
  • 인터넷 탐색
  • 게임

이런 구닥다리 컴퓨터 환경에서 지금처럼 수많은 일을 했다는 게 놀랍지 않나요? 하지만 이 때의 명령줄 환경은 배우기가 어려웠기 때문에 컴퓨터를 쓸 줄 안다는 건 전문가의 영역이었어요.

그러다 시간이 지나면서 시각적인 컴퓨터 환경이 발명됐고 이는 곧 컴퓨터 사용 환경의 대세가 됐어요. 이 진화 덕분에 이제 일반 사람들도 어려운 명령줄 환경을 배우지 않더라도 컴퓨터를 배우고 사용할 수 있게 된 거예요.

그런데 뭔가 좀 이상하죠? 명령줄 환경에서 시각적 환경으로 진화한 것이라면, 왜 아직도 명령줄 환경이 사라지지 않고 운영체제에 들어있으며, 이를 사용하는 방법도 배워야 하는 걸까요?

이는 시각적 환경보다 명령줄 환경이 더 효율적인 분야가 남아있어서예요. 대표적으로는 서버 환경을 꼽을 수 있는데, 시각적 환경은 특성상 컴퓨터 자원을 많이 소모해서 서버에게는 큰 부담이 될 수 있거든요. 누군가 시각적 환경으로 서버 컴퓨터를 사용해야 하는 것도 아니라서 필요가 없기도 하고요.

그래서 서버 소프트웨어의 경우 터미널을 통한 제어 방식만 지원하는 경우가 대부분이에요. 그래서 좋든 싫든, 서버 소프트웨어를 사용하려면 어쩔 수 없이 명령줄 사용법을 어느 정도는 알아야 해요.

하지만 너무 걱정할 필요는 없어요. 명령줄 환경도 시간이 지나면서 많이 발전해서 이제는 간단한 명령어만 알더라도 대부분의 서버 관리 작업을 할 수 있게 됐거든요.


터미널과 셸

앞서 명령줄 환경에 대해 간단히 알아봤는데요. 이 환경을 사용하기 위해 먼저 알아둘 두 가지 용어가 있는데, 바로 터미널(Terminal)셸(Shell) 이에요. 이 둘은 비슷해 보이기도 하고 같은 의미로 쓰이기도 하지만 구분해서 알아둘 필요가 있어요.

이 둘을 먼저 간단하게 정리하자면 다음과 같아요.

터미널은 우리가 명령어를 입력하는 창
셸은 그 명령어를 받아서 실제로 실행하는 프로그램

만약 윈도우에서 파워쉘(PowerShell) 이란 프로그램을 실행한다면 실제로 화면에 보이는 건 윈도우 콘솔 에뮬레이터(Windows Console Emulator) 라는 터미널 소프트웨어에요. 이 터미널 소프트웨어는 여러분의 입력 값을 전달받아 파워쉘이란 셸 소프트웨어에 전달해요. 그리고 셸에서의 실행 결과를 다시 터미널 소프트웨어에 표시해주는 과정을 거치게 되는 거죠.

터미널은 사용자와 셸과의 연결 다리 정도라고 이해할 수 있어요. 우리가 실제로 입력하는 모든 명령어는 오직 셸이 처리하게 돼요. 그래서 터미널을 배운다는 것은 결국 셸의 사용법을 배운다는 것을 의미해요.

세상에는 매우 많은 종류의 셸이 있어요. 윈도우에는 PowerShellcmd 라는 셸이 있고, 리눅스와 맥에서는 bash, zsh, fish 와 같은 셸이 존재해요. 이 셸들은 각기 다른 명령어 사용법을 가지고 있어서 모든 셸의 사용법을 배운다는 것은 현실적으로 어려워요.

여기서 우리가 알아볼 셸은 대부분의 리눅스에서 기본인 bash 라는 셸 이에요. 조금만 더 깊은 영역에서 얘기하자면 포직스(Posix) 호환 셸의 사용법을 익히는 건데요. 셸에는 포직스라는 일종의 표준 규격이 있는데 bash 셸은 이 규격을 준수해서 이를 익히면 포직스 호환 셸을 모두 사용할 수 있다는 것과 같아요.

인터넷의 여러 글들에서는 터미널과 셸을 혼용해서 사용하곤 해요. 그래서 다음과 같은 헷갈리는 문장들을 많이 볼 수 있을 거예요.

  • 터미널에 이 명령어를 입력하세요.
  • 셸에 이 명령어를 입력하세요.
  • bash 에 이 명령어를 입력하세요.
  • ssh로 연결 후 이 명령어를 입력하세요.

터미널, 셸, bash 등 많은 단어들이 나오니 혼란스럽죠? 그럴 때 글이 리눅스를 대상으로 작성된 것이라면 대부분 리눅스의 bash 셸 환경에서는 잘 동작할 것이라 가정하고 사용하시면 될 거예요.