셸
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
셸은 사용자와 운영 체제 간의 인터페이스 역할을 하는 소프트웨어로, 명령 줄 인터페이스(CLI)와 그래픽 사용자 인터페이스(GUI) 형태로 존재한다. CLI 셸은 텍스트 기반 명령어를 통해 운영 체제를 제어하며, GUI 셸은 마우스, 아이콘 등을 사용하여 직관적인 조작을 가능하게 한다. 유닉스 셸, 도스, 윈도우 셸 등 다양한 종류가 있으며, 파일 관리, 프로세스 제어, 셸 스크립트, 환경 변수 설정 등 다양한 기능을 제공한다. 1964년 루이 푸쟁이 "셸"이라는 용어를 처음 사용했으며, 이후 켄 톰프슨의 톰슨 셸을 시작으로 발전해왔다.
셸이라는 개념은 1964년 멀틱스(Multics) 운영체제 개발 과정에서 루이 푸쟁(Louis Pouzin)에 의해 처음 제시되었다. 푸쟁은 CTSS를 위해 개발된 RUNCOM 프로그램[17]과 멀틱스 셸[16]의 영향을 받아 "명령을 일종의 프로그래밍 언어처럼 사용하는" 아이디어를 고안하고 이를 설명하기 위해 "셸(shell)"이라는 용어를 사용했다.[8] 푸쟁은 셸의 목적에 대해 "다른 프로그램 내부에서 호출되는 것처럼 모든 절차를 활성화할 수 있는 교환 매체를 만드는 것"이라고 설명하며, 이를 "SHELL"이라고 지칭했다.[7] 1965년 문서에서는 셸을 "사용자가 콘솔에서 메시지를 입력할 때 슈퍼바이저에 의해 자동으로 호출되는 공통 절차로, 콘솔 제어 하에 다른 프로세스를 실행하지 않는 시간에 발생합니다. 이 절차는 콘솔 메시지와 [슈퍼바이저의] 서브루틴 사이의 인터페이스 역할을 합니다."라고 정의했다.[9] 이 초기 셸은 Glenda Schroeder와 제너럴 일렉트릭(General Electric)의 익명의 남성에 의해 구현되었다.[10] 멀틱스는 또한 이후 모든 셸의 핵심 개념이 된 '활성 함수'를 도입했는데, 이는 "명령줄이 실행되기 전에 문자열 반환 값으로 대체되는 문자열... 활성 함수는 종종... 명령 언어 매크로를 구현하는 데 사용됩니다."[11]로 정의된다.
운영 체제 셸은 사용자가 컴퓨터와 상호작용할 수 있도록 돕는 인터페이스이다. 사용자의 입력을 받아 해석하고, 운영 체제의 기능을 실행한 뒤 그 결과를 사용자에게 보여주는 역할을 한다.[3] 셸은 운영 체제의 커널에 직접 명령을 내리는 것이 아니라, 커널이 제공하는 API를 활용하는 특수한 응용 프로그램이며, 다른 셸 프로그램으로 교체하여 사용할 수도 있다.
2. 역사
최초의 유닉스 셸은 1971년 켄 톰슨(Ken Thompson)이 멀틱스 셸을 모델로[25] 개발한 톰슨 셸(Thompson shell, sh)이다.[24][18] 이 셸은 입력 및 출력 리디렉션에 < 와 > 기호를 사용하는 등 현대 셸의 기반이 되는 혁신적인 기능을 포함했다. 톰슨 셸 이후 본 셸(Bourne shell, sh)이 등장했으며, 이는 최초의 유닉스 셸에서 파생되었다. 그 뒤를 이어 버클리의 빌 조이(Bill Joy)가 C 언어와 유사한 문법을 가진 C 셸(csh)을 개발했다. 이후 C 셸에 명령어 완성(command-completion) 기능을 추가한 퍼블릭 도메인 버전인 TC 셸(tcsh)이 등장했다.
초기 대화형 시스템들은 상주 모니터의 일부로 간단한 명령줄 인터프리터를 제공했는데, DEC TOPS-10 시스템에서는 COMCON과 같은 이름으로 불리기도 했다.[5] 이 인터프리터들은 사용자의 로그인/로그아웃, 장치 및 파일 관리, 시스템 정보 조회 등 미리 정의된 명령을 실행하는 역할을 했다.[6] 대부분의 운영체제 셸은 사용자와 직접 상호작용하는 방식과 미리 작성된 명령어 목록(스크립트)을 실행하는 일괄 처리 방식 모두를 지원한다. 셸 스크립트는 프로그래밍 언어처럼 변수, 조건문, 반복문 등의 구조를 포함할 수 있다.
한편, 그래픽 셸은 1968년 12월 더글러스 엥겔바트(Douglas Engelbart)가 NLS 시스템을 시연하면서 처음 등장했다. 이 시연은 훗날 '모든 데모의 어머니'로 불리게 되었다. 엥겔바트의 동료들은 이 개념을 제록스 팰로앨토 연구소(PARC)로 가져갔고, 1973년 제록스 알토(Xerox Alto)에 구현되었다. 이후 이 아이디어는 1980년 니클라우스 비르트(Niklaus Wirth)의 릴리트(Lilith) 컴퓨터를 거쳐 1983년 애플의 애플 리사(Apple Lisa)에 적용되면서 널리 퍼지게 되었다.
3. 셸의 종류
운영 체제 셸은 제공하는 인터페이스 방식에 따라 크게 두 가지 범주로 나눌 수 있다.
이 외에도 음성 사용자 인터페이스나 텍스트 기반 사용자 인터페이스(TUI) 등 다른 형태의 인터페이스도 존재한다. CLI와 GUI는 각각의 장단점이 있어, 사용자는 수행하려는 작업의 성격에 따라 적합한 방식을 선택하여 사용한다.
또한, 로컬 컴퓨터에서 실행되는 셸 외에도 SSH나 원격 데스크톱 프로토콜 등을 이용해 원격 시스템에 접속하여 사용하는 셸도 있다.[4]
3. 1. 명령 줄 인터페이스 (CLI) 셸
명령 줄 인터페이스(CLI, Command-line interface)는 사용자가 키보드로 영숫자 문자로 이루어진 명령어를 입력하여 운영 체제와 상호작용하는 방식의 셸이다.[3] 사용자가 입력한 명령어를 해석하고 운영 체제에 전달한 뒤, 그 결과를 받아 사용자에게 보여주는 방식으로 작동한다(읽기-평가-출력 루프, REPL와 유사).[3] CLI 셸은 운영 체제의 핵심인 커널에 직접 명령을 내리는 것이 아니라, 커널이 제공하는 API를 활용하는 특수한 응용 프로그램이다. 따라서 대부분의 운영 체제에서는 다른 CLI 셸 프로그램으로 교체하여 사용할 수 있다.
운영 체제 셸은 파일 관리, 프로세스 관리(응용 프로그램 실행 및 종료), 일괄 처리, 운영 체제 모니터링 및 구성 등 다양한 서비스를 사용자에게 제공한다. CLI 셸은 사용자가 입력한 몇 글자를 기반으로 명령어를 완성해주는 명령 줄 완성 기능[12]과 이전에 입력했던 명령어를 다시 불러와 수정하거나 실행할 수 있는 히스토리 기능을 제공하여 편의성을 높인다. 또한, 자주 사용하는 명령어 묶음을 배치 파일(스크립트 파일)로 저장해두면 반복적인 작업을 자동화할 수 있다. 이러한 스크립트는 단순 반복을 넘어 조건문, 변수 등을 활용한 정교한 프로그래밍까지 가능하다.
로컬 컴퓨터뿐만 아니라 원격 시스템에 접속하여 작업할 때도 CLI 셸이 유용하게 사용된다. 유닉스 계열 시스템에서는 주로 보안 셸 프로토콜 (SSH)을 사용하여 원격으로 텍스트 기반 셸에 접속한다. 마이크로소프트 윈도우에서는 Windows Vista 이후 PowerShell Remote 기능을 통해 WMI, RPC 및 WS-Management 등을 이용한 텍스트 기반 원격 관리가 가능하다.[4]
CLI 셸과 그래픽 사용자 인터페이스(GUI) 셸 중 어느 것이 더 우수한지에 대해서는 종종 논쟁이 벌어진다. CLI는 특정 작업(예: 파일 이동)을 더 빠르게 처리할 수 있고, 여러 명령어를 파이프라인으로 연결하여 복잡한 작업을 효율적으로 수행할 수 있다는 장점이 있다. 특히 서버 관리나 시스템 복구 등 GUI 사용이 어렵거나 비효율적인 환경에서는 CLI가 필수적이다. 반면 GUI는 시각적으로 이해하기 쉽고 마우스 등을 이용해 직관적으로 조작할 수 있어 사용자 편의성이 높다는 장점이 있다. 어떤 인터페이스가 더 좋다고 단정하기보다는, 수행하려는 작업의 성격에 따라 적합한 방식을 선택하는 것이 일반적이다.
CLI 셸의 종류는 매우 다양하며, 운영 체제나 사용 목적에 따라 여러 가지 셸이 사용된다.
'''유닉스 셸'''
유닉스 및 유닉스 계열 운영 체제에서 사용되는 셸들이다. POSIX 셸 표준을 기준으로 다양한 종류가 개발되었다.
'''도스 및 윈도우 셸'''
MS-DOS와 마이크로소프트 윈도우 환경에서 사용되는 셸이다.
'''기타 운영 체제 셸'''
'''프로그래밍 언어 인터프리터 셸'''
일부 프로그래밍 언어의 대화형 인터프리터도 셸의 역할을 수행하며, 운영 체제 기능에 대한 인터페이스를 가지기도 한다.
아래는 CLI 환경의 예시이다. 프롬프트 기호 앞부분은 사용자 계정과 현재 위치 등을 나타낸다.예시 권한 사용자@디바이스명:~/현재위치$ 사용자(user) 계정(account) 루트@디바이스명:/현재위치# 루트(root) 계정 (슈퍼유저)
3. 2. 그래픽 사용자 인터페이스 (GUI) 셸
그래픽 사용자 인터페이스(GUI)는 사용자가 마우스, 아이콘, 창 등을 이용하여 컴퓨터와 상호작용할 수 있도록 돕는 프로그램이다. 명령줄 인터페이스(CLI)가 텍스트 명령어를 직접 입력하는 방식인 것과 달리, GUI 셸은 그래픽 요소를 통해 보다 직관적인 조작을 가능하게 한다. 대부분의 GUI는 데스크톱 메타포를 사용하여 파일이나 응용 프로그램을 마치 실제 책상 위의 물건처럼 표현한다. 예를 들어, 파일은 문서 아이콘으로, 프로그램은 특정 아이콘으로 나타나 사용자가 쉽게 인식하고 실행할 수 있다.
GUI 셸은 일반적으로 윈도잉 시스템 위에서 작동한다. X 윈도 시스템이나 Wayland 같은 시스템에서는 X 윈도 매니저나 Wayland 컴포지터가 셸의 핵심 요소를 이루며, 설치된 프로그램을 실행하고, 열려 있는 창이나 가상 데스크톱을 관리하는 등의 기능을 제공한다. 종종 위젯 엔진을 지원하여 바탕화면에 시계나 날씨 정보 등을 표시하기도 한다.
=== 운영체제별 그래픽 셸 ===
==== macOS ====
macOS 환경에서는 Quartz Compositor가 윈도잉 시스템 역할을 담당한다. 대표적인 셸 구성 요소로는 파일 관리를 위한 Finder,[13] 응용 프로그램 실행 및 전환을 위한 Dock,[13] 메뉴 막대 항목과 시스템 상태를 관리하는 SystemUIServer,[13] 그리고 열린 창과 데스크톱을 관리하는 Mission Control[14] 등이 있다. 이 요소들이 조합되어 macOS 특유의 사용자 경험을 제공한다. 클래식 Mac OS 시절부터 Finder는 일관되게 그래픽 셸의 역할을 수행해왔다.
==== 마이크로소프트 윈도우 ====
현대 마이크로소프트 윈도우 운영 체제의 기본 셸은 윈도우 셸이다. 이는 데스크톱 환경, 시작 메뉴, 작업 표시줄 등을 포함하며, 파일 관리를 위한 윈도우 탐색기 인터페이스를 제공한다. 초기 윈도우 3.x 버전에서는 프로그램 관리자가 기본 셸이었으며, 이후 버전에서도 한동안 호환성을 위해 포함되었다.
윈도우 환경에서는 기본 셸 외에도 다양한 서드파티 셸을 사용하거나 기존 셸의 외형 및 기능을 변경할 수 있다. 스타독(StarDock)의 윈도우블라인드(WindowBlinds)는 기존 셸의 외관을 꾸미는 대표적인 프로그램이며, 라이트스텝(LiteStep), Emerge Desktop, BB4Win, 지오셸 등은 윈도우 탐색기를 완전히 대체하는 셸 환경을 제공하여 사용자에게 더 많은 선택권을 준다.
==== 유닉스 계열 (X 윈도 시스템 기반) ====
유닉스 및 리눅스와 같은 운영체제에서 널리 사용되는 X 윈도 시스템 기반 환경은 매우 다양한 그래픽 셸을 제공한다. 사용자는 자신의 필요와 선호에 따라 여러 구성 요소를 조합하여 사용할 수 있다. 주요 구성 요소는 다음과 같다.
이 외에도 Enlightenment, Cinnamon 등 다양한 독자적인 그래픽 셸 환경이 존재한다.
==== 기타 ====
4. CLI 셸의 기능
명령 줄 인터페이스(CLI) 셸은 사용자와 운영체제 사이의 상호작용을 위한 다양한 기능을 제공한다. 주요 기능은 다음과 같다.
- 명령어 실행: 사용자가 키보드로 입력한 영숫자 문자로 이루어진 명령어를 해석하고, 해당 응용 프로그램을 실행하거나 운영체제의 특정 작업을 수행한다. 예를 들어, 프로그램 이름을 입력하여 애플리케이션을 시작할 수 있다.
- 파일 및 디렉터리 관리: 파일 시스템 내에서 파일을 생성, 삭제, 복사, 이동하고 디렉터리를 관리하는 기본적인 기능을 수행한다.
- 프로세스 관리: 실행 중인 프로그램을 프로세스라고 하며, 셸은 이러한 프로세스를 시작하고, 강제로 종료하거나, 사용자와 직접 상호작용하지 않고 백그라운드에서 실행되도록 제어할 수 있다. 이를 작업 제어라고도 한다.
- 입출력 리디렉션: 프로그램이 실행될 때 기본적으로 연결되는 표준 입력, 표준 출력, 표준 오류의 흐름을 바꾸는 기능이다. 예를 들어, 프로그램의 출력 결과를 화면 대신 파일에 저장할 수 있다.
- 파이프라인: 한 명령어의 출력 결과를 다른 명령어의 입력으로 바로 연결하는 기능이다. 이를 통해 여러 명령어를 조합하여 복잡한 작업을 효율적으로 처리할 수 있다.
- 셸 스크립트: 자주 사용하거나 반복적인 명령어들의 순서를 텍스트 파일에 저장해 두었다가 필요할 때 자동으로 실행하는 기능이다. 배치 파일이라고도 불리며, 시스템 초기화 같은 일상적인 작업을 자동화하는 데 유용하다. 셸 스크립트에는 변수, 조건문, 반복문 등 프로그래밍 언어의 요소들이 포함될 수 있어 정교한 작업도 가능하다.
- 환경 변수: 프로그램 실행 환경에 영향을 주는 설정값들을 저장하고 관리한다. 예를 들어, 프로그램이 특정 파일을 찾을 경로 등을 환경 변수로 지정할 수 있다. 셸 변수도 설정하고 참조할 수 있다.
- 와일드카드 전개: 파일 이름 등에서 `*`나 `?` 같은 특수 문자를 사용하여 여러 파일을 한 번에 지정하는 기능이다. 셸이 이 패턴을 해석하여 해당하는 파일 목록으로 바꿔준다.
- 명령 히스토리: 사용자가 이전에 입력했던 명령어들을 기록해두었다가 다시 불러와 사용하거나 수정하여 실행할 수 있는 기능이다.
- 에일리어스: 길거나 복잡한 명령어를 짧고 기억하기 쉬운 이름으로 바꿔서 사용하는 기능이다.
- 명령 줄 완성: 명령어의 일부만 입력해도 나머지 부분을 자동으로 완성해주거나 가능한 후보 목록을 보여주는 기능이다. 파일명 등에도 적용되어 입력 편의성을 높인다.[12]
- 제어 구조: 셸 스크립트 내에서 특정 조건에 따라 명령 실행 여부를 결정하거나, 특정 명령을 반복적으로 실행하도록 제어하는 기능이다.
또한 셸은 자신이 직접 처리하는 내부 명령과, 별도의 프로그램을 실행시키는 외부 명령을 구분하여 처리한다. 외부 명령 실행 기능은 운영체제의 외피로서 셸의 필수적인 역할이다.
5. 셸 명령어 (CLI 셸)
- '''cd''' : 현재 작업 디렉터리를 변경(이동)한다. 예를 들어, `cd ..` 명령은 상위 디렉터리로 이동하는 데 사용된다.
- '''ls''' : 현재 디렉터리에 있는 파일 및 하위 디렉터리의 목록을 보여준다.
- '''mkdir''' : 새로운 디렉터리를 생성한다.
6. 기타 용도
"셸"이라는 용어는 자연의 껍질에 비유하여, 웹 브라우저나 이메일 클라이언트처럼 특정 구성 요소 주변에 구축된 응용 소프트웨어를 설명하는 데 사용되기도 한다. 실제로 (명령줄) 셸이 운영 체제 커널을 감싸는 것과 유사하게, 이러한 프로그램들은 특정 기능을 '감싸는' 역할을 하기 때문에 때때로 "래퍼"(wrapper)라고도 불린다.[2]
또한 전문가 시스템 분야에서는 특정 응용 분야에 대한 지식 베이스가 없는, 즉 '비어 있는' 상태의 전문가 시스템을 셸이라고 부른다.[15]
참조
[1]
간행물
The Internet's fifth man
https://www.economis[...]
Economist Group
2013-12-13
[2]
웹사이트
shell
http://www.catb.org/[...]
[3]
웹사이트
Operating system shells
http://pic.dhe.ibm.c[...]
IBM
2012-09-16
[4]
웹사이트
Running Remote Commands
https://docs.microso[...]
Microsoft
2019-06-30
[5]
서적
TOPS-10 MONITOR INTERNALS
http://bitsavers.org[...]
2022-03-29
[6]
서적
DECSystem 10 Operating System Commands Manual
http://bitsavers.org[...]
2022-03-29
[7]
웹사이트
The SHELL: A Global Tool for Calling and Chaining Procedures in the System
https://people.csail[...]
[8]
웹사이트
The Origin of the Shell
https://multicians.o[...]
2022-03-29
[9]
웹사이트
The SHELL: A Global Tool for Calling and Chaining Procedures in the System
https://people.csail[...]
2022-03-29
[10]
웹사이트
The Origin of the Shell
https://multicians.o[...]
2024-02-12
[11]
서적
Multics Common Commands
http://bitsavers.org[...]
2022-03-29
[12]
웹사이트
Xonsh Official Website
https://xon.sh/
[13]
웹사이트
The Life Cycle of a Daemon
https://developer.ap[...]
Apple Inc.
[14]
웹사이트
Restart Mission Control in OS X Lion
http://osxdaily.com/[...]
OSXDaily
2011-11-23
[15]
서적
The BCS glossary of ICT and computing terms
https://books.google[...]
Pearson Education
[16]
웹사이트
Unix and Multics
http://www.multician[...]
Multicians.org
2012-08-14
[17]
웹사이트
The Origin of the Shell
http://www.multician[...]
Multicians.org
2012-08-14
[18]
웹사이트
V6 Thompson Shell Port - History
http://v6shell.org/h[...]
V6shell.org
2012-08-14
[19]
URL
http://harmful.cat-v[...]
[20]
URL
https://pubs.opengro[...]
[21]
URL
https://developer.mo[...]
[22]
URL
https://developer.mo[...]
[23]
문서
파일명
[24]
웹인용
V6 Thompson Shell Port - History
http://v6shell.org/h[...]
2010-07-30
[25]
URL
Unix and Multics
http://www.multician[...]
관련 사건 타임라인
( 최근 20개의 뉴스만 표기 됩니다. )
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com