Shell and Terminal

컴퓨터와 대화를 나누는 방법은 다양합니다. 우리가 흔히 사용하는 그래픽 사용자 인터페이스(GUI)는 마우스를 클릭하거나 키보드를 타이핑하는 것만으로도 원하는 작업을 수행할 수 있게 해주는 편리한 도구입니다. 하지만 이보다 더 깊이 있는 대화를 위해서는 컴퓨터의 언어를 이해하고, 그것을 통해 직접 시스템과 소통해야 합니다.

이를 위해서는 컴퓨터 시스템과 상호작용하는 두 가지 주요 도구인 터미널(Terminal)과 쉘(Shell)에 대해 이해할 필요가 있습니다. 그런데 이 두 용어는 종종 혼용되어 사용되지만, 각각 다른 역할과 기능을 가지고 있습니다.

터미널은 컴퓨터와 사용자 사이의 브릿지 역할을 하는 인터페이스입니다. 사용자의 명령을 컴퓨터 시스템에 전달하고, 시스템의 결과를 사용자에게 보여주는 역할을 합니다. 반면에, shell은 사용자의 명령을 해석하고 실행하는 컴퓨터 프로그램입니다. shell은 사용자와 시스템 사이의 통역사와 같은 역할을 하며, 사용자가 입력한 명령을 컴퓨터가 이해할 수 있는 언어로 번역합니다.

CLI

CLI(Command Line Interface)는 명령줄 이라고 불리기도 하며, 이러한 명령 줄 인터페이스 자체를 나타내는 것으로 그래픽 인터페이스와 다른 개념으로 사용됩니다. 각각의 의미와 어떤 방식이 효율적인지 다루어봅니다.

macOS 시스템 설정을 여는 방법

CLI(Command Line Interface)란

CLI(Command Line Interface)는 컴퓨터 사용자와 컴퓨터 운영 체제 또는 응용 프로그램 간에 상호 작용하는 방법 중 하나입니다. 이것은 다음과 같은 특징을 가집니다.

  • CLI는 텍스트 기반으로 작동합니다. 사용자는 명령어와 텍스트 입력을 사용하여 컴퓨터와 소통합니다. 이는 그래픽 사용자 인터페이스(GUI)와 대조됩니다.
  • CLI는 명령어와 해당 명령을 조작하는 데 필요한 매개변수를 사용합니다. 사용자는 특정 명령을 입력하고 매개변수를 추가하여 원하는 작업을 수행합니다.
  • CLI는 스크립트 언어와 함께 사용하여 작업을 자동화하는 데 매우 유용합니다. 이를 통해 반복적인 작업을 간편하게 수행할 수 있습니다.
  • CLI는 리눅스, 유닉스, macOS 및 다른 유닉스 계열 운영 체제에서 특히 널리 사용됩니다. 이러한 환경에서는 터미널(또는 콘솔) 애플리케이션을 통해 CLI를 실행할 수 있습니다.
  • CLI는 숙련된 사용자에게는 빠른 액세스 및 작업 효율성을 제공할 수 있습니다. 명령을 직접 입력하면서 복잡한 작업을 수행할 수 있습니다.

예를 들어, 리눅스 CLI에서는 파일 관리,패키지관리, 네트워크 설정, 사용자 관리 등 다양한 시스템 관리 작업을 명령어를 통해 수행할 수 있습니다. CLI는 개발자, 시스템 관리자, 네트워크 관리자 및 다른 IT 전문가들에게 중요한 도구 중 하나이며, 컴퓨터와 상호 작용하는 강력한 방법 중 하나입니다.

GUI(Graphical User Interface)란

CLI는 텍스트 기반으로 작동하는 것이 반해 GUI는 그래픽 요소를 사용하여 사용자가 마우스로 작업을 수행합니다. 창, 버튼, 아이콘 등이 포함됩니다. GUI 더 알아보기

  • GUI는 일반적으로 직관적이며 사용하기 쉽습니다. 사용자가 그래픽 요소를 클릭하거나 드래그하여 작업을 수행합니다.
  • 데이터와 정보는 그래픽으로 시각적으로 표현되므로 사용자는 정보를 쉽게 이해할 수 있습니다.
  • 일반적으로 CLI에 비해 더 쉽게 접근할 수 있으며, 명령어를 배우지 않아도 됩니다.
  • GUI는 그래픽 요소가 많아 시스템 자원을 더 많이 사용합니다. 그래픽 환경을 실행하는 데에는 높은 그래픽 성능이 필요합니다.
TrustedInstaller 고급 권한 실행을 위한 PowerRun 파워런 설치 및 사용 방법

터미널

터미널(Terminal)은 다양한 컴퓨터 시스템 및 환경에서 사용되는 텍스트 기반의 인터페이스를 나타내며, 사용자가 명령어를 입력하고 시스템 작업을 수행하는 데 사용됩니다. CLI를 사용할 수 있게 해주는 소프트웨어 애플리케이션입니다. 콘솔과 터미널의 차이 알아보기

  • 터미널은 텍스트 기반으로 작동합니다. 사용자는 명령어와 텍스트를 입력하고 시스템 및 응용 프로그램과 상호 작용하기 위해 터미널을 사용합니다.
  • 터미널은 주로 명령 줄 인터페이스(CLI)를 실행하기 위해 사용됩니다. 사용자는 CLI를 통해 명령어를 입력하고 컴퓨터에서 다양한 작업을 수행할 수 있습니다.
  • 터미널은 다양한 운영 체제에서 사용됩니다. 예를 들어, 리눅스 및 유닉스 계열의 운영 체제에서는 터미널 애플리케이션을 사용하여 CLI를 실행하며, macOS 및 Windows 운영 체제에서도 터미널 애플리케이션을 사용할 수 있습니다.
  • 터미널을 사용하여 스크립트를 작성하고 작업을 자동화할 수 있습니다. 이는 반복적인 작업을 효율적으로 수행하는 데 도움이 됩니다.
  • 시스템 관리자는 서버 관리를 위해 터미널을 사용하며, 개발자는 소프트웨어 개발 및 디버깅을 위해 터미널을 활용합니다. 또한, 원격 서버에 SSH를 통해 접속하여 터미널을 사용하는 경우가 흔합니다.

널리 사용되는 터미널 애플리케이션은 다음과 같은 것들이 있습니다.

  • macOS Terminal: macOS에서 기본으로 제공되는 터미널 애플리케이션.
  • Windows Terminal: 최신 Windows에서 사용 가능한 터미널 애플리케이션으로, 다양한 환경을 지원.
  • GNOME Terminal: 리눅스에서 사용되며 GNOME 데스크톱 환경에서 실행되는 터미널 애플리케이션.
  • KDE Konsole: KDE Plasma 데스크톱 환경에서 사용되는 터미널 애플리케이션.
  • Terminator: 여러 터미널 세션을 동시에 관리하고 타일링으로 배치할 수 있는 고급 터미널 애플리케이션.
  • tmux: 다중 터미널 세션과 윈도우 관리를 위한 터미널 멀티플렉서.
  • Alacritty: 빠르고 경량한 터미널 애플리케이션.
  • Hyper: HTML, CSS, JavaScript로 사용자 정의할 수 있는 오픈 소스 터미널 애플리케이션.

Shell

쉘(Shell)은 명령 줄 인터페이스(CLI) 환경에서 사용되는 프로그램 또는 환경을 나타냅니다.

Windows에서 유니코드 지원하지 않는 프로그램 유니코드 강제 적용하기

Shell이란

Shell은 사용자가 입력한 명령어를 해석하고 실행하는 역할을 수행하며, 다음과 같은 특징이 있습니다.

  • Shell은 사용자가 입력한 명령어를 해석하고 실행니다. 사용자가 명령어를 입력하면 Shell은 해당 명령어를 해석하여 시스템 또는 응용 프로그램에 전달하고 실행합니다.
  • Shell은 사용자가 현재 작업하는 환경을 제어합니다. 환경 변수, 디렉토리 위치, 사용자 권한 등을 관리하며 사용자 환경을 구성합니다.
  • Shell 스크립트를 작성하여 일련의 명령어를 자동화하고 스크립트를 실행하여 반복적인 작업을 효율적으로 수행할 수 있습니다.
  • 사용자는 Shell 환경을 자신의 필요에 맞게 사용자 정의할 수 있습니다. 에일리어스(alias), 환경 변수 설정, 명령어 히스토리 관리 등을 통해 개인적인 환경을 조성할 수 있습니다.
  • Shell은 스크립트 프로그래밍 언어로 사용될 수 있습니다. 복잡한 작업을 수행하고 특정 조건에 따라 명령을 실행하는 스크립트를 작성할 수 있습니다.

Shell의 종류

Shell은 컴퓨터 시스템에서 중요한 역할을 하며, CLI 환경에서 사용자와 시스템 간의 상호 작용을 가능하게 합니다. 다양한 운영 체제에서 다양한 Shell을 사용할 수 있으며, 사용자의 작업 스타일과 환경에 맞게 선택할 수 있습니다. 다음과 같은 Shell이 널리 사용되고 있습니다.

  • Bash(Bourne Again Shell): 가장 일반적으로 사용되는 리눅스의 기본 Shell입니다. 스크립트 작성 및 명령 실행에 매우 유용합니다.
  • Zsh(Z Shell): 사용자 정의 가능한 기능을 갖춘 강력한 Shell. 플러그인 및 테마를 지원하며 터미널 사용자 중에 매우 인기가 있으며 현재 macOS의 기본 Shell로 사용되고 있습니다.
  • Fish(Friendly Interactive Shell): 사용하기 쉬운 Shell로, 명령 완성 기능이 뛰어나며 컬러 구문 강조 기능을 제공합니다. 쉽게 배울 수 있어 Shell의 입문자에게 좋습니다.
  • PowerShell: Microsoft에서 개발한 Windows 환경에서 사용되는 Shell. Windows 시스템 관리 및 자동화에 특히 유용하며 .NET 개체와 상호 작용할 수 있습니다. powershell 더 알아보기
  • Dash: 경량의 POSIX 호환 Shell로, 스크립트를 실행하는 데 효율적입니다. 주로 스크립트가 필요한 시스템 작업에 사용됩니다.
  • Ksh(KornShell): 고급 Shell로서 스크립트 작성 및 명령 실행을 위한 다양한 기능을 제공합니다. 주로 유닉스 시스템에서 사용됩니다.
참고: 작은 의미에서의 Shell은 CLI 환경에 국한 되지지만, 더 포괄적인 의미로 보면 Shell 이라는 것은 동작이나 명령을 프로그램 언어로 변환해서 입력하고 실행하는 것이니 CLI 와 GUI를 모두 포괄하는 개념으로 볼 수 있을 것 입니다.
리눅스 권한 퍼미션 chmod chown rwxrwxrwx

SSH(Secure Shell)

SSH (Secure Shell)는 네트워크를 통해 원격 컴퓨터 또는 서버에 안전하게 접속하고 통신하기 위한 프로토콜 및 프로그램입니다.

SSH의 주요 특징

전술한대로 Shell은 명령을 실행하는 인터페이스로, SSH는 안전한 방식으로 원격 서버에 접속하여 원격 Shell을 실행하고 명령을 실행하기 위한 프로토콜 및 도구로 SSH를 사용하면 원격 서버에 Shell 접근을 안전하게 관리할 수 있습니다.

  • SSH는 통신 데이터를 암호화하여 보안을 강화합니다. 이것은 중요한 데이터를 전송할 때 중요합니다. 암호화를 사용하면 제 3자가 데이터를 감청하거나 조작하는 것을 방지합니다.
  • SSH는 서버와 클라이언트 간의 안전한 인증을 제공합니다. 사용자는 패스워드 또는 공개키 기반의 인증을 사용하여 원격 서버에 접속할 수 있습니다. 공개키 기반의 인증은 보안성이 더 높습니다.
  • 주로 원격 서버에 접속하여 원격 관리를 위해 사용됩니다. SSH를 사용하면 원격 서버에 접속하고 원격 Shell을 실행하여 명령을 실행하고 파일을 관리할 수 있습니다.
  • SSH를 사용하면 원격 서버와 로컬 컴퓨터 간의 포트 포워딩을 설정할 수 있습니다. 이것은 로컬 컴퓨터와 원격 서버 간의 안전한 통신을 가능하게 합니다.
  • SSH 클라이언트 및 서버는 다양한 운영 체제에서 실행 가능하므로 다양한 플랫폼 간에 원격 통신이 가능합니다.

SSH 사용 사례

SSH는 네트워크 보안과 원격 관리를 위한 핵심 도구 중 하나이며, 원격 서버에 접속하거나 데이터를 안전하게 전송해야 하는 다양한 상황에서 사용됩니다.

  • 대표적으로 시스템 관리자는 SSH를 사용하여 원격 서버에 접속하여 서버 관리 작업을 수행합니다.
  • SCP (Secure Copy Protocol) 또는 SFTP (SSH File Transfer Protocol)를 사용하여 파일을 안전하게 원격 서버로 복사하거나 가져올 수 있습니다.
  • 원격 서버에서 코드를 개발하고 실행할 수 있습니다.
  • SSH를 사용하여 로컬 포트와 원격 포트 간의 안전한 터널을 설정하여 원격 서비스에 접근할 수 있습니다. 포트 더 알아보기

REPL(Read-Eval-Print Loop)

쉘(Shell)과 REPL(Read-Eval-Print Loop)은 컴퓨터 프로그래밍 및 컴퓨터 시스템 관리에서 사용되는 두 가지 다른 개념입니다. Shell은 명령을 실행하고 시스템을 관리하는 데 사용되는 환경이며, REPL은 프로그래밍 언어의 인터랙티브 환경으로 코드를 입력하고 즉시 실행하여 결과를 확인할 수 있는 환경입니다.

  • REPL은 사용자가 코드를 입력하고 즉시 실행하고 결과를 확인할 수 있는 인터랙티브 환경을 제공합니다.
  • 사용자가 입력한 코드는 순차적으로 읽혀(eval), 실행되며 실행 결과가 바로 출력(print)됩니다. 그 후 다음 입력을 받아 반복(loop)됩니다. 간단하게 말해 읽기(Read), 평가(Eval), 출력(Print), 루프(Loop)의 네 가지 단계로 작동합니다.
    • 읽기(Read): 사용자가 입력한 코드를 읽어들입니다.
    • 평가(Eval): 코드를 실행하고 결과를 계산합니다.
    • 출력(Print): 계산된 결과를 화면에 출력합니다.
    • 루프(Loop): 이후 다음 입력을 받을 준비를 하고, 사용자가 새로운 코드를 입력할 수 있도록 대기합니다.
  • 주로 프로그래밍 언어나 스크립팅 언어의 테스트, 디버깅, 프로토타이핑 등에서 사용됩니다.
  • 예를 들어, Python의 인터프리터나 JavaScript의 브라우저 콘솔은 REPL의 예입니다.

이 개념이 조금 헷갈릴 수 있는데 좀더 익숙한 예를 들어보도록 하겠습니다. bashBourne-Again SHell 또한 REPL의 개념이 적용됩니다. Bash는 명령줄 인터페이스(Command Line Interface, CLI)를 제공하는 쉘의 한 종류로, 사용자가 명령어를 입력하면 해당 명령어를 평가하고 결과를 출력하는 REPL 환경을 제공합니다.

echo "Hello, World!"

bash를 실행하고 다음과 같은 명령어를 입력하면 bash는 다음과 같은 작업을 수행하며 이것이 REPL의 기본 개념입니다.

  1. 사용자가 입력한 명령어를 읽고(Read), 즉시 평가(Eval)합니다.
  2. 평가한 결과를 화면에 출력(Print)합니다. 즉, "Hello, World!"가 출력됩니다.
  3. 그 후 사용자가 다음 명령어를 입력할 수 있도록 대기하며(Loop), REPL의 루프로 돌아갑니다.

사용자가 입력한 명령어가 읽혀 평가되고 결과가 출력되며, 이 과정이 반복됩니다. Bash를 비롯한 대부분의 명령줄 쉘은 이와 같은 REPL 환경을 제공하여 사용자가 명령을 실행하고 시스템을 관리할 수 있게 합니다.

리눅스 ls 명령으로 파일 디렉토리 정보 확인하기

요약하면

위 내용을 요약하면 다음과 같습니다.

  • CLI(Command Line Interface): 명령 줄 인터페이스 자체를 나타냅니다.
  • 터미널(Terminal): CLI를 사용할 수 있게 해주는 소프트웨어 애플리케이션입니다.
  • 쉘(Shell): CLI 환경 또는 명령어 (더 넓은 의미에서 GUI 조작)을 해석하고 실행하는 프로그램 또는 환경입니다.

터미널과 Shell의 개념이 조금 겹치는 부분이 많아 혼란이 될 수 있지만, 터미널은 CLI (명령 줄 인터페이스)를 사용할 수 있게 해주는 소프트웨어 애플리케이션으로 즉, 터미널을 사용하여 CLI 명령어를 입력하고 실행할 수 있습니다. 하지만 터미널을 사용하지 않고도 CLI 환경에서 명령어를 실행하는 방법이 있습니다.

  • 일반적으로 터미널을 사용하면 사용자가 명령어를 입력하고 실행할 수 있는 CLI 환경을 시각적으로 제어하고 다룰 수 있습니다. Shell은 이러한 명령어를 해석하고 실행하는 프로그램이며, 터미널을 통해 사용자와 상호 작용합니다.
  • 그러나 Shell은 터미널을 통하지 않고도 사용할 수 있습니다. 예를 들어, 배치 스크립트(.bat)나 스크립트 파일(.sh)을 통해 명령어를 실행하거나, 원격으로 SSH를 사용하여 CLI 환경에 접속하는 경우에는 터미널 애플리케이션 없이도 CLI 명령어를 실행할 수 있습니다.

관련글

댓글로 남기기 어려운 내용은 Contact Form 에서 개별적으로 문의 할 수 있습니다. 해당 글과 연관 된 내용은 Copy를 이용해 현재 페이지의 주소를 복사 후 문의 폼에 입력시 보다 정확한 답을 얻을 수 있습니다.

Leave a Comment