리눅스를 하다 보면 터미널(Terminal), 콘솔(Console), 쉘(Shell) 3가지 단어가 헷갈려져서 차이점을 알아보고자 한다.
터미널 (Terminal)
사용자가 리눅스 시스템과 상호작용하기 위한 프로그램으로 컴퓨터에 데이터 입력하거나 볼 때 쓰는 기기다. 이전 컴퓨터가 보급되기 전 대학과 기업에서 다중 이용자 시스템으로 사용하였다. 터미널을 통해 상호작용하였고 추후 키보드가 존재하는 디스플레이로 변경되었다고 한다.
예시 프로그램으로는 macOS의 Terminal, Windows의 PowerShell, CMD 등 존재
사용자가 명령어를 입력할 수 있는 창을 제공하여, 입력을 쉘(Shell)에 전달하고, 출력 결과를 화면에 보여준다.
쉘을 실행하는 프로그램이다.
콘솔 (Console)
시스템과 직접 연결된 입력/출력 장치 또는 그 인터페이스로, 콘솔은 운영체제와 직접 연결된 기본 입출력장치를 말한다. 과거에는 서버에 모니터와 키보드를 직접 연결해 사용하였지만 지금은 주로 가상 콘솔(Virtual Console) 형태로 존재한다. 서버에 SSH로 원격 접속하는 경우는 터미널을 사용하는 것, 서버에 직접 모니터/키보드 연결하여 로그인 한 것은 콘솔이라고 한다. 시스템과 직접 연결된 원래 입출력 채널이다.
쉘 (Shell)
사용자의 명령을 해석하고 운영체제 커널에 전달하는 프로그램이다. 넓은 정의로 다른 프로그램을 실행하는 프로그램. 터미널에 명령어 ls 를 입력하면 쉘에 ls 프로그램을 실행하고 현재 디렉토리의 파일 목록을 터미널에 출력하도록 요청한다. 터미널에서 입력한 명령어를 읽고 해석해 커널에 전달하며, 결과를 다시 사용자에게 보여준다. 터미널이 껍데기라면 쉘은 두뇌라고 볼 수 있다. 명령어 해석기이다.
해당 3가지는 계층적으로 보면
[사용자] ⇄ [터미널 프로그램] ⇄ [쉘] ⇄ [커널] ⇄ [하드웨어]
로, 터미널은 쉘을 띄워주는 창, 쉘은 명령어를 해석해서 커널에 전달, 콘솔은 시스템과 직접 연결된 입출력 장치이다.
요약
터미널은 간단하게 쉘을 띄워주는 프로그램
콘솔은 시스템과 직접 연결된 원래 입출력 장치
쉘은 명령어를 해석하여 커널에 전달하는 프로그램