본문 바로가기
리눅스

(번역) Shell (computing)

by 다움위키 2024. 12. 20.

원문 보기: https://dawoum.duckdns.org/wiki/Shell_(computing)

 

Original article: w:Shell (computing)

컴퓨팅에서, 운영 시스템의 서비스를 인간 사용자나 다른 프로그램에 노출시키는 컴퓨터 프로그램입니다. 일반적으로, 운영 시스템 쉘은 컴퓨터의 역할과 특정 작업에 따라 명령-줄 인터페이스 (CLI) 또는 그래픽 사용자 인터페이스 (GUI)를 사용합니다. 쉘이 운영 시스템을 둘러싼 가장 바깥쪽 계층이기 때문에 그 이름이 붙었습니다.

Overview

운영 시스템은 사용자에게 파일 관리, 프로세스 관리 (응용 프로그램 실행과 종료), 일괄 처리, 및 운영 시스템 모니터링과 구성을 포함하는 다양한 서비스를 제공합니다.

대부분의 운영 시스템 쉘은 컴퓨터에 직접 부착된 주변 장치를 통해 사용자와 통신하더라도 놓여있는 커널에 대한 직접적인 인터페이스가 아닙니다. 쉘은 실제로 다른 응용 프로그램에서 사용하는 것과 똑같은 방식으로 커널 API를 사용하는 특수 응용 프로그램입니다. 쉘은 사용자에게 입력을 요구하고, 입력을 해석하고, 그런-다음 놓여있는 운영 시스템의 출력을 처리함으로써 사용자-시스템 상호 작용을 관리합니다 (read–eval–print loop, REPL과 매우 유사). 운영 시스템 쉘은 실제로 응용 프로그램이므로, 대부분의 운영 시스템에 대해 또 다른 유사한 응용 프로그램으로 쉽게 대체될 수 있습니다.

지역 시스템에서 실행되는 쉘 외에도, 원격 시스템을 지역 사용자에게 제공하는 다양한 방법이 있습니다; 그러한 접근 방식은 보통 원격 접근 또는 원격 관리라고 참조됩니다. 처음에는 직렬 회선이나 모뎀을 통해 메인프레임에 연결된 텍스트 터미널을 수단으로 각 활성 사용자에게 동시에 텍스트-기반 UI를 제공하는 다중-사용자 메인프레임에서 사용할 수 있었지만, 원격 접근은 유닉스-계열 시스템과 Microsoft Windows로 확장되었습니다. 유닉스-계열 시스템에서, 보안 쉘 프로토콜 (SSH)이 보통 텍스트-기반 쉘에 사용하고, 반면에 SSH 터널링X Window System-기반 그래픽 사용자 인터페이스 (GUI)에 사용될 수 있습니다. Microsoft Windows에서, 원격 데스크톱 프로토콜이 GUI 원격 접근을 제공하기 위해 사용될 수 있고, Windows Vista부터, PowerShell Remote가 WMI, RPC, 및 WS-Management를 통한 텍스트-기반 원격 접속에 대해 사용될 수 있습니다.

대부분의 운영 시스템 쉘은 명령줄과 그래픽의 두 가지 카테고리 중 하나에 속합니다. 명령-줄 쉘은 운영 시스템에 명령-줄 인터페이스 (CLI)를 제공하고, 반면에 그래픽 쉘은 그래픽 사용자 인터페이스 (GUI)를 제공합니다. 그다지 흔하지는 않지만, 다른 가능성으로는 음성 사용자 인터페이스와 텍스트-기반 메뉴 시스템과 같이 CLI가 아닌 텍스트-기반 사용자 인터페이스 (TUI)의 다양한 구현이 있습니다. CLI-기반 쉘과 GUI-기반 쉘의 상대적 장점에 대해서는 종종 논쟁이 있습니다. 많은 컴퓨터 사용자는 수행할 작업에 따라 두 가지를 모두 사용합니다.

History

초기 대화형 시스템은 상주 모니터의 일부로 간단한 명령-줄 인터프리터를 제공했습니다. 이 인터프리터는 DEC TOPS-10 시스템의 COMCON과 같이 다른 이름으로 불릴 수 있습니다. 인터프리터는 여러 미리-정의된 명령 중 하나를 실행하며, 그 중 하나는 사용자 프로그램을 실행하는 것입니다. 공통적인 명령은 사용자를 시스템에 로그인과 로그오프하고, 장치와 파일을 할당, 해제, 및 조작하고, 시스템이나 사용자 프로세스에 대한 다양한 정보를 질의합니다.

1964년, 루이 푸쟁(Louis Pouzin)멀틱스 운영 시스템을 위해 "명령을 어떻게든 프로그래밍 언어처럼 사용"한다는 아이디어를 생각해냈고, 이를 설명하기 위해 이라는 용어를 만들어냈습니다. 1965년 문서에서, 쉘은 "사용자가 콘솔에서 메시지를 입력할 때마다 감독자에 의해 자동으로 호출되는 공통 프로시저로, 콘솔 제어 아래에서 다른 프로세스가 활성 실행 중이 아닐 때 호출됩니다. 이 프로시저는 콘솔 메시지와 [감독자의] 서브루틴 사이의 인터페이스 역할을 합니다." 이 시스템은 글렌다 슈뢰더(Glenda Schroeder)제너럴 일렉트릭(General Electric)으로부터 익명의 한 남자에 의해 처음 구현되었습니다.

멀틱스는 역시 모든 후속 쉘에서 핵심 개념, 활성 함수(active function)를 도입했습니다. 이것은 다음으로 정의됩니다:

문자열... 이는 명령줄이 실행되기 전에 문자열 반환 값으로 대체됩니다. 활성 함수는 종종 명령 언어 매크로를 구현하기 위해... 사용됩니다.

1971년, 켄 톰슨(Ken Thompson)은 유닉스의 첫 번째 버전에서 톰슨 쉘을 개발했습니다. 그것은 멀틱스 쉘보다 간단하지만, 입력과 출력 리다이렉션을 위한 < 및 > 사용을 포함하여 현대 쉘에서 계승된 몇 가지 혁신적인 기능이 포함되어 있습니다.

그래픽 쉘은 1968년 12월 샌프란시스코에서 열린 Fall Joint Computer Conference에서 The Mother of All Demos라고 불리는 것에서 Douglas EngelbartNLS 시스템에 처음 등장했습니다. Stanford Research Institute에서 Engelbart의 동료들은 이 개념을 Palo Alto Research Center (PARC)로 가져왔고, 1973년에 출시된 Alto에 등장했습니다. 그곳에서 이 아이디어는 1980년 Niklaus WirthLilith로 퍼졌고, 1983년에는 Apple Lisa로 퍼져서 어디에서나 존재했습니다.

Command-line shells

명령줄 인터페이스 (CLI)는 키보드에 입력된 영숫자 문자를 사용하여 운영 시스템에 명령과 데이터를 대화형으로 제공하는 운영 시스템 쉘입니다. 예를 들어, 텔레타이프라이터는 키 입력을 나타내는 코드를 컴퓨터에서 실행되는 명령 인터프리터 프로그램으로 보낼 수 있습니다; 명령 인터프리터는 키 입력 순서열을 구문 분석하고 문자 순서열을 인식할 수 없으면 오류 메시지로 응답하거나 응용 프로그램 로드, 파일 나열, 사용자 로그인 등과 같은 다른 프로그램 동작을 수행할 수 있습니다. 유닉스와 같은 운영 시스템에는 다양한 명령, 구문 및 기능을 갖는 다양한 쉘 프로그램이 있으며, POSIX 쉘이 기준이 됩니다. 일부 운영 시스템에는 단일 스타일의 명령 인터페이스만 있었습니다; MS-DOS와 같은 상용 운영 시스템에는 표준 명령 인터페이스 (COMMAND.COM)가 제공되었지만 타사 인터페이스도 종종 사용 가능하여, 메뉴나 원격 프로그램 실행과 같은 추가 특색이나 기능을 제공했습니다.

응용 프로그램도 명령-줄 인터페이스를 구현할 수 있습니다. 예를 들어, 유닉스-계열 시스템에서, 텔넷 프로그램은 원격 컴퓨터 시스템으로의 링크를 제어하기 위한 여러 명령을 가지고 있습니다. 프로그램에 대한 명령은 원격 컴퓨터로 전송되는 데이터와 같은 키-입력으로 구성되므로, 두 가지를 구별하는 몇 가지 수단이 필요합니다. 이스케이프 시퀀스는 전달되지 않지만 항상 지역 시스템에서 해석되는 특수 지역 키-입력을 사용하여 정의될 수 있습니다. 프로그램은 모달이 되어 키보드에서 명령을 해석하거나 처리할 데이터로 키-입력을 전달하는 사이를 전환합니다.

많은 명령-줄 쉘의 특징은 재사용을 위해 명령의 순서열을 저장하는 능력입니다. 데이터 파일에는 사용자가 입력한 것처럼 CLI가 따라야 할 명령 순서열이 ​​포함될 수 있습니다. CLI에서 특수 기능은 이들 저장된 지침을 수행할 때 적용될 수 있습니다. 그러한 일괄-처리 파일 (스크립트 파일)은 시스템을 다시 시작할 때 프로그램의 집합을 초기화하는 것과 같은 일상적인 작업을 자동화하기 위해 반복적으로 사용될 수 있습니다. 쉘의 일괄-처리 모드 사용에는 보통 구조, 조건문, 변수, 및 기타 프로그래밍 언어 요소가 포함됩니다; 일부는 그러한 목적에 필요한 기본 사항을 가지고 있고, 다른 일부는 그 자체로 매우 정교한 프로그래밍 언어입니다. 반대로, 일부 프로그래밍 언어는 운영 시스템 쉘이나 특수 프로그램에서 대화형으로 사용될 수 있습니다.

Nushell, Xonsh, Bash (Unix shell), 및 Z shell과 같은 여러 명령-줄 쉘은 명령-줄 완성 기능을 제공하여, 인터프리터가 사용자가 입력한 몇 개의 문자를 기반으로 명령을 확장할 수 있도록 합니다.

명령-줄 인터프리터는 역사 기능을 제공할 수 있으므로, 사용자는 이전에 시스템에 발행된 명령을 기억하고 반복할 수 있고, 일부 편집도 가능합니다. 운영 시스템에 대한 모든 명령은 사용자가 입력해야 했기 때문에, 짧은 명령 이름과 프로그램 옵션을 나타내는 간결한 시스템이 공통적이었습니다. 짧은 이름은 사용자가 기억하기 어려울 때가 있었고, 초기 시스템에는 자세한 온라인 사용자 지침 가이드를 제공할 저장 자원도 부족했습니다.

Graphical shells

그래픽 사용자 인터페이스 (GUI)는 을 열고, 닫고, 이동하고, 크기를 조정하고, 마찬가지로 창 사이에 초점을 전환하는 등의 작업을 허용함으로써 프로그램을 그래픽적으로 조작할 수 있는 수단을 제공합니다. 그래픽 쉘은 데스크탑 환경에 포함되거나, 느슨하게 결합된 유틸리티 집합으로 별도로 제공될 수도 있습니다.

대부분의 그래픽 사용자 인터페이스는 "전자 데스크톱"이라는 은유를 사용하며, 여기서 데이터 파일은 그것들이 책상 위에 놓인 종이 문서인 것처럼 표현되고, 응용 프로그램도 명령 이름으로 호출하는 대신 그래픽으로 표현됩니다.

Unix-like systems

그래픽 쉘은 전형적으로 윈도잉 시스템 위에 구축됩니다. X Window System 또는 Wayland의 경우에서, 쉘은 각각 X 윈도우 관리자 또는 Wayland 컴포지터와 설치된 응용 프로그램을 시작하고, 열려 있는 창과 가상 데스크탑을 관리하고, 종종 위젯 엔진을 지원하는 기능을 제공하는 하나 이상의 프로그램으로 구성됩니다.

macOS의 경우에서, Quartz Compositor가 윈도잉 시스템으로 동작하고, 쉘은 Finder, Dock, SystemUIServer, 및 Mission Control로 구성됩니다.

Microsoft Windows

Microsoft Windows 운영 시스템의 최신 버전은 Windows 쉘을 그것들의 쉘로 사용합니다. Windows 쉘은 데스크탑 환경, 시작 메뉴, 및 작업 표시줄과 마찬가지로 운영 시스템의 파일 관리 기능에 접근하기 위한 그래픽 사용자 인터페이스를 제공합니다. 이전 버전에는 역시 3.x 시리즈 Microsoft Windows에 대한 쉘이었던 Program Manager가 포함되어 있고, 실제로는 95 및 NT 유형의 Windows의 이후 버전과 함께 제공되었으며 적어도 Windows XP까지 제공되었습니다. Windows 버전 1과 2의 인터페이스는 현저히 달랐습니다.

데스크탑 응용 프로그램도 그것들이 타사 엔진을 사용하는 한 쉘로 고려됩니다. 마찬가지로, Windows Explorer의 인터페이스에 불만이 있는 많은 개인과 개발자는 쉘의 기능과 모양을 변경하거나 완전히 대체하는 소프트웨어를 개발했습니다. StarDock에 의한 WindowBlinds는 전자 유형의 응용 프로그램의 좋은 예입니다. LiteStep과 Emerge Desktop은 후자의 좋은 예입니다.

상호 운용성 프로그램과 목적에 맞게 설계된 소프트웨어를 사용하면 Windows 사용자는 아래에서 설명하는 다양한 유닉스-기반 GUI와 Macintosh의 상당수를 사용할 수 있습니다. 버전 3.0에 대해 OS/2 Presentation Manager와 동등한 제품은 Windows NT 버전에서 OS/2 환경 하위 시스템을 사용하여 일부 조건 아래에서 일부 OS/2 프로그램을 실행할 수 있습니다.

Other uses

"Shell"은 역시 웹 브라우저와 이메일 클라이언트와 같이 특정 구성 요소를 "주변에 구축된" 응용 프로그램 소프트웨어를 설명하기 위해 느슨하게 사용되며 자연에서 발견되는 쉘과 유사합니다. 실제로, (명령-줄) 쉘은 운영 시스템 커널을 캡슐화합니다. 이것들은 때때로 "래퍼"라고도 합니다.

전문가 시스템에서, 쉘은 임의의 특정 응용 프로그램에 대한 지식 기반이 없는 "빈" 전문가 시스템인 소프트웨어의 일부입니다.