맨위로가기

명령줄 인터페이스

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

명령줄 인터페이스(CLI)는 텍스트 기반으로 컴퓨터와 상호 작용하는 방식이다. 초기에는 전신 인자기와 같은 장치를 통해 발전했으며, 1960년대부터 1990년대까지 널리 사용되었다. Multics 운영 체제에서 쉘의 개념이 도입되었고, 유닉스 쉘을 거쳐 Bash와 같은 현대적인 쉘로 발전했다. CLI는 그래픽 사용자 인터페이스(GUI)에 비해 시스템 리소스 소모가 적고, 스크립팅을 통한 자동화가 용이하다는 장점이 있다. 프로그래머, 시스템 관리자, 그리고 시각 장애인에게 유용하며, 운영 체제 쉘뿐만 아니라 다양한 응용 프로그램에서도 사용된다.

더 읽어볼만한 페이지

  • 컴퓨팅 명령어 - 명령 프롬프트
    명령 프롬프트는 사용자로부터 명령을 입력받아 운영체제나 셸에 전달하는 인터페이스로, 사용자 정의가 가능한 셸 프롬프트 형식으로 다양한 운영체제 환경에서 여러 작업을 수행하는 데 활용된다.
  • 컴퓨팅 명령어 - 명령어 (컴퓨팅)
    명령어는 운영 체제, 프로그래밍 언어, 주변 기기 제어, GUI 환경, 게임 등에서 사용되며, 셸이 해석하거나 프로그래밍 언어의 문법 요소, 게임 내 캐릭터 지시 등 다양한 형태로 존재한다.
  • 사용자 인터페이스 기술 - 작업 보기
    작업 보기(Task View)는 윈도우 운영체제에서 창 전환을 용이하게 하는 창 관리 기능으로, 윈도우의 창 전환기, Flip 3D를 거쳐 발전해왔으며, Flip 3D의 단점을 보완하는 응용 프로그램도 존재한다.
  • 사용자 인터페이스 기술 - 모바일 앱
    모바일 앱은 휴대 기기에서 실행되는 애플리케이션으로, 개발 방식에 따라 네이티브 앱, 웹 기반 앱, 하이브리드 앱으로 나뉘며, 사용자 인터페이스 디자인이 중요하고 앱 스토어를 통해 배포되며, 기업은 모바일 애플리케이션 관리를 통해 보안을 강화한다.
  • 사용자 인터페이스 - 로그인
    로그인은 특정 페이지, 웹사이트 또는 응용 프로그램에 접근하기 위해 사용자 이름과 암호를 입력하여 시스템에 접근하는 절차이며, 1960년대 시분할 시스템과 1970년대 BBS에서 사용되기 시작했다.
  • 사용자 인터페이스 - 키넥트
    키넥트는 마이크로소프트에서 개발한 동작 인식 장치로, 적외선 프로젝터와 센서를 사용하여 사용자의 움직임과 음성을 인식하며, Xbox용으로 출시되어 큰 인기를 얻었지만 개인정보 보호 문제 등으로 판매가 부진하여 생산이 중단되었고, 다양한 분야에서 활용되며 기술적 가치를 인정받아 클라우드 기반 Azure Kinect로 이어졌으나 단종되었다.
명령줄 인터페이스
기본 정보
명령줄 인터페이스 예시
명령줄 인터페이스의 예시
유형사용자 인터페이스
사용 방식텍스트 기반 명령 입력 및 시스템 응답 표시
다른 이름텍스트 사용자 인터페이스 (TUI)
콘솔 사용자 인터페이스
캐릭터 사용자 인터페이스 (CUI)
역사
기원텔레타이프 단말기
발전배치 처리 시스템과 상호 작용
특징
장점낮은 시스템 자원 소비
스크립트 작성을 통한 자동화 용이
원격 시스템 관리 용이
단점학습 곡선 존재
직관적인 사용 어려움
제한적인 시각적 표현
주요 구성 요소
명령 해석기 및 실행기
명령시스템에 지시하는 텍스트 기반 명령어
스크립트일련의 명령어를 담은 텍스트 파일
대표적인 명령줄 인터페이스
운영체제DOS
유닉스 계열 (Linux, macOS 등)
윈도우 (PowerShell, cmd.exe)
셸 종류Bash
Zsh
PowerShell
Cmd.exe
활용 분야
시스템 관리서버 설정, 사용자 관리, 네트워크 관리 등
소프트웨어 개발컴파일, 디버깅, 테스트 자동화 등
데이터 처리텍스트 처리, 데이터 분석, 변환 등
자동화 스크립트정기적인 작업 자동화, 배치 처리 등
기타
관련 용어그래픽 사용자 인터페이스 (GUI)
셸 스크립트
터미널 에뮬레이터

2. 역사

명령줄 인터페이스는 초기의 전신 인자기(TTY)를 이용한 인간과 컴퓨터 간의 상호작용에서 기원했다. 초기 컴퓨터들은 전신 인자기를 통해 사용자와 상호작용했는데, 이는 한 번에 텍스트 한 줄을 보내는 방식이었다. 천공 카드에 비해 즉각적인 상호작용과 피드백이 가능하여 진보한 방식이었다.

기계식 원거리 통신 단말기는 키보드와 화면을 갖춘 "유리 tty"로 대체되었다. 이후 등장한 "스마트" 터미널은 커서 이동, 데이터 로컬 편집 등의 추가 기능을 제공했다. 마이크로컴퓨터 혁명으로 인해 하드웨어 터미널은 PC의 직렬 포트를 통해 터미널 신호를 해석하는 터미널 에뮬레이터로 대체되었다. 이는 PC를 기존 미니 또는 메인프레임 컴퓨터와 연결하거나, PC 간 연결에 사용되었다. 일부 PC는 게시판 시스템 소프트웨어를 실행하기도 했다.

초기 운영 체제 CLI는 상주 모니터 프로그램의 일부로 구현되어 쉽게 교체할 수 없었다. 쉘을 교체 가능한 구성 요소로 처음 구현한 것은 Multics 시분할 운영 체제였다.

2. 1. 초기 역사

전신 인자기(TTY)는 원격으로 정보를 교환하는 기계로, 한 번에 텍스트 한 줄을 보내는 방식으로 작동했다. 명령줄 인터페이스는 이러한 인간 간의 대화 형태에서 발전했다. 천공 카드보다 발전된 방식이었는데, 즉각적인 상호 작용과 피드백이 가능했기 때문이다. 초기 컴퓨터 시스템은 운영자와 상호 작용하기 위해 전신 인자기를 주로 사용했다.

2. 2. 발전 과정

명령줄 인터페이스는 전신 인자기(TTY)를 통해 사람들이 수행하는 통신 형태에서 발전했다. 초기 컴퓨터 시스템은 운영자와의 상호 작용 수단으로 원거리 통신 단말기를 사용했다.[1]

초기 마이크로컴퓨터는 CP/M, MS-DOS, 애플소프트 베이직과 같은 명령줄 인터페이스를 기반으로 했다. 1980년대와 1990년대에 애플 매킨토시와 마이크로소프트 윈도우가 도입되면서 명령줄 인터페이스는 그래픽 사용자 인터페이스(GUI)로 대체되었다.[1] 그러나 명령줄은 시스템 관리자 및 기타 고급 사용자가 시스템 관리, 컴퓨터 프로그래밍, 일괄 처리에 사용하는 대체 사용자 인터페이스로 남아 있었다.

1964년, MIT 계산 센터의 루이 푸젠은 명령 스크립트를 실행하기 위한 RUNCOM 도구를 개발하고, Multics 운영 체제에서 '쉘'이라는 용어를 처음 사용했다. 최초의 Multics 쉘은 글렌다 슈로더가 개발했다.

본 쉘 버전 7 유닉스 상호 작용


벨 연구소의 켄 톰슨은 1971년에 최초의 유닉스 쉘인 V6 쉘을 개발했다. 1977년에는 V6 쉘을 대체하는 본 쉘이 도입되었으며, KornShell(ksh), Almquist shell(ash), Bourne-again shell(Bash) 등의 개발로 이어졌다.

2006년 11월, 마이크로소프트는 Windows PowerShell 버전 1.0을 출시했다.[1] MinGW 및 Cygwin은 윈도우용 오픈 소스 소프트웨어 패키지로 유닉스 스타일의 CLI를 제공한다.[1]

2001년 이후, 매킨토시 운영 체제 macOS는 Darwin이라는 유닉스 계열 운영 체제를 기반으로 한다.[2] 사용자는 터미널이라는 터미널 에뮬레이터를 통해 유닉스 스타일의 명령줄 인터페이스에 접근할 수 있다.[2] Z 쉘은 macOS의 기본 쉘이며, Bash, tcsh, KornShell도 제공된다.[2]

3. 특징

명령줄 인터페이스는 명령 프롬프트를 표시하여 사용자의 명령어 입력을 기다리고, 입력이 완료되면(보통 엔터키를 누름) 해당 명령어를 실행하여 결과를 문자열 형태로 출력하는 가장 간단한 형태의 인터페이스이다.

그래픽 사용자 인터페이스의 단추나 메뉴와 달리, 명령줄은 사용자가 원하는 작업을 정확하게 표현할 수 있다. 또한, 필요에 따라 변경 가능한 기본값을 포함하며, 개별 명령 또는 여러 명령을 순차적으로 묶어 특정 문자 열이나 별명에 지정하여 나중에 사용할 수도 있다.

이러한 인터페이스를 제공하는 프로그램을 명령줄 해석기 또는 이라고 부른다. 유닉스 셸(sh, ksh, csh, tcsh, bash 등), CP/M, 도스의 command.com("명령 프롬프트") 등이 대표적인 예이다. 마이크로소프트는 2006년 후반에 전통적인 유닉스 셸과 자사의 객체 지향적 .NET 프레임워크의 기능을 결합한 윈도우 파워셸을 출시했다.

오토캐드와 같은 일부 프로그램은 명령줄 인터페이스와 그래픽 사용자 인터페이스를 동시에 지원하며, 매틀랩은 일부 계산 작업에 대해 그래픽 사용자 인터페이스를 제공하지 않지만, 명령줄 인터페이스를 통해 모든 계산 작업을 수행할 수 있다.

명령줄 인터페이스에서 사용되는 명령어는 보통 다음과 같은 구조를 가진다.



[할 일] [작업 방법] [대상 파일들]



또는



[할 일] [작업 방법] < [입력 파일] > [출력 파일]



"할 일"은 작업의 큰 목적, "작업 방법"은 세부 방법, "대상 파일들"은 작업 대상 파일을 지정한다. 두 번째 형태에서 '>' 및 '<'(꺾은 괄호), '(세로 막대)는 리디렉션 문자로, 입출력 방향을 지정하거나 연결하는 역할을 한다.

초기 컴퓨터는 명령줄 인터페이스(CUI)를 통한 대화 환경이 주류였으나, 이후 컴퓨터 성능 향상으로 그래픽 사용자 인터페이스(GUI) 환경을 표준으로 탑재한 개인용 컴퓨터(Macintosh, Windows 95 등)가 보급되면서, 전문가를 제외하고 CUI 이용 빈도는 줄어들었다.

많은 네트워크 장비는 텔넷이나 SSH을 지원하며 CUI를 표준으로 탑재한다. 개인용 컴퓨터나 서버용 운영 체제는 기본 인터페이스가 GUI더라도 명령줄 터미널 등 CUI 환경을 표준으로 제공하지만, 스마트폰 등 모바일 기기용 OS에는 표준으로 제공되지 않는 경우가 많다.

사용자 인터페이스가 CUI인 애플리케이션을 콘솔 애플리케이션이라고 하며, 텍스트 콘솔을 이용하여 윈도우 등을 표현하는 인터페이스는 텍스트 사용자 인터페이스라고 한다.

3. 1. 장점

명령줄 인터페이스(CLI)는 그래픽 사용자 인터페이스(GUI)보다 시스템 리소스 소모가 적어, 제한된 환경에서도 효율적으로 작동한다. 숙련된 사용자는 다양한 옵션에 빠르게 접근할 수 있으며, 반복적인 작업을 자동화하기 쉽다. 예를 들어, 여러 파일에 대해 동일한 처리를 반복해야 할 때, CLI에서는 명령어들을 나열하여 일괄 처리할 수 있다.[26] [27] [28]

명령줄 기록을 통해 이전에 실행한 명령을 검토하고 다시 실행할 수 있으며, 스크립트 언어를 사용하여 기능을 확장할 수 있다. 이는 배치 처리를 용이하게 하며, 일련의 명령어와 제어문을 파일에 저장하여 필요할 때 실행하고 수정할 수 있게 해준다.

CLI는 파이썬[3], 포스, LISP와 같은 프로그래밍 언어 시스템에서 대화형 명령줄 모드를 제공하여 코드의 빠른 실행을 지원한다. 또한, 프로그래머와 시스템 관리자가 주로 사용하며, 시각 장애가 있는 사용자도 점자 디스플레이를 통해 CLI를 활용할 수 있다.

CLI의 다른 장점은 다음과 같다.

  • 프로그램 개발 시 사용자 입력 처리 부분(명령줄 인터프리터)을 쉽게 만들 수 있다.
  • 표준 입출력만 사용하는 콘솔 프로그램은 다른 운영 체제로 이식하기 쉽다.
  • 프로그램 출력을 다른 프로그램에 직접 입력하거나 파일에 저장할 수 있다.
  • 원격 로그인 시 클라이언트 측 소프트웨어가 필요하지 않거나(SSH 클라이언트 등) 네트워크 부하가 적다.
  • 자동 완성 기능과 기록을 통해 명령어 입력을 간소화할 수 있다.[29]
  • 키보드만으로 조작하여 작업 속도를 높일 수 있다.
  • 이전 작업 확인 및 자료 수집이 용이하다.
  • 입력 소스와 출력 대상을 쉽게 전환할 수 있다(리다이렉션).
  • GUI보다 필요한 리소스가 적다.


한국의 발달된 IT 인프라 환경에서 CLI를 이용한 효율적인 시스템 관리가 가능하다는 점도 주목할 만하다.

3. 2. 단점


  • 대부분의 명령과 응답이 영어를 기반으로 하므로, 영어를 모국어로 사용하지 않는 사람에게는 사용하기 어렵다.[1]
  • GUI와 달리 직관적인 조작이 불가능하며, 기본적인 명령어를 어느 정도 암기해야 한다. 따라서 응용 프로그램의 최종 사용자에게는 습득 비용이 많이 든다. 각 프로그램의 매개변수도 필요에 따라 조사해야 한다.[1]
  • 인간의 시각적인 능력을 크게 활용하기 어렵다.[1]
  • 선택 사항이나 도움말 등을 화면에 표시하는 데 한계가 있다.[1]
  • 이미지나 도형의 조작 및 편집에 적합하지 않거나 불가능하다.[1]
  • 같은 목적의 프로그램이라도 조작 방법이 전혀 다른 경우가 있다. 예를 들어 텍스트 편집기는 풀 스크린 편집기와 라인 편집기로 크게 나눌 수 있는데, 후자에서는 편집 중 결과가 반영되지 않으므로 중단하고 모드를 전환해야 한다.[1]

3. 3. 종류

명령줄 인터페이스의 종류는 크게 운영체제 명령줄 인터페이스와 애플리케이션 명령줄 인터페이스로 나눌 수 있다.
운영체제 명령줄 인터페이스운영체제 명령줄 인터페이스는 운영체제와 함께 제공되는 별도의 프로그램으로, 사용자가 텍스트 기반으로 컴퓨터에 명령을 내릴 수 있게 해준다. 이러한 인터페이스를 구현하는 프로그램을 명령줄 해석기, 명령 프로세서 또는 셸이라고 부른다.

대부분의 운영 체제에서는 기본 셸 프로그램을 다른 것으로 대체할 수 있다. (예: DOS용 4DOS, OS/2용 4OS2, Windows용 4NT / 테이크 커맨드)
애플리케이션 명령줄 인터페이스애플리케이션(운영 체제와 반대)도 명령줄 인터페이스를 가질 수 있다.

응용 프로그램은 다음 세 가지 주요 유형의 명령줄 인터페이스 메커니즘 중 전부, 일부 또는 전혀 지원하지 않을 수 있다.

  • ''매개변수'': 프로그램 시작 시 프로그램에 추가 정보를 전달.
  • ''대화형 명령줄 세션'': 시작 후, 프로그램은 연산자에게 명령을 입력할 수 있는 독립적인 수단을 제공.
  • ''프로세스 간 통신'': 표준 스트림 또는 이름있는 파이프등을 통해 클라이언트 프로세스의 명령줄은 CLI 프로그램으로 리디렉션 될 수 있다.


일부 응용 프로그램은 CLI를 지원하여 사용자에게 자체 프롬프트를 표시하고 명령줄을 허용한다. 다른 프로그램은 CLI와 GUI를 모두 지원한다.

예를 들어, 수치 해석 컴퓨터 프로그램인 MATLAB의 모든 기능은 CLI를 통해 사용할 수 있는 반면, MATLAB GUI는 기능의 하위 집합만 노출한다. 오토캐드와 같은 일부 프로그램들도 명령줄 인터페이스와 그래픽 사용자 인터페이스를 동시에 지원하기도 한다.

GNU Octave의 명령줄 인터페이스를 갖춘 GUI

4. 사용법

명령줄 인터페이스는 명령 프롬프트를 표시해 사용자의 명령어 입력을 기다린다. 사용자가 명령어를 입력하고 엔터키를 누르면 해당 명령어를 실행하고, 결과를 문자열 형태로 출력하는 방식으로 작동한다.

그래픽 사용자 인터페이스의 단추나 메뉴와 달리, 명령줄은 그 자체로 사용자가 원하는 작업을 정확히 표현할 수 있다. 또한, 명령줄은 다른 결과를 원할 경우 바꿔서 사용할 수 있는 기본값을 포함하고 있다. 명령줄은 개별 명령이나 여러 명령을 순차적으로 묶어서 나중에 사용할 수 있도록 특정 문자열이나 별명에 지정할 수 있다.

이러한 인터페이스를 제공하는 프로그램을 명령줄 해석기 또는 이라고 부른다. 유닉스 셸(sh, ksh, csh, tcsh, bash 등), CP/M, 도스의 command.com("명령 프롬프트") 등이 그 예이다. CP/M과 command.com은 DEC사의 RSX와 RSTS를 기반으로 만들어졌다. 2006년 후반, 마이크로소프트는 전통적인 유닉스 셸과 자사의 객체 지향적 .NET 프레임워크의 기능을 조합한 윈도우 파워셸(개발명 "모나드 Monad")을 출시했다. 다만, 윈도우에서 현재 쓰이는 명령줄 인터페이스 프로그램인 도스와 윈도우 스크립트 호스트는 일반적으로 그 기능이 충분치 않거나 불안정하다고 여겨지고 있다. MinGW 등은 윈도우에서 유닉스 명령줄 인터페이스를 사용할 수 있게 해주는 소프트웨어이다.

오토캐드와 같은 일부 프로그램들은 명령줄 인터페이스와 그래픽 사용자 인터페이스를 동시에 지원하기도 한다. 공학/과학 수치 계산 패키지인 매틀랩은 일부 계산 작업에 대해 그래픽 사용자 인터페이스를 제공하지 않지만, 명령줄 인터페이스를 사용하면 모든 계산 작업을 수행할 수 있다.

4. 1. 명령어 구조

명령줄 인터페이스에서 사용되는 명령어는 보통 다음과 같은 구조를 갖는다.

: [할 일] [작업 방법] [대상 파일들]

또는

: [할 일] [작업 방법] < [입력 파일] > [출력 파일]

"할 일"은 작업의 큰 목적을, "작업 방법"은 세부 방법을, "대상 파일들"은 작업 대상을 지정한다. 두 번째 형태에서 '>' 및 '<'(꺾은 괄호), '(세로 막대)는 리디렉션 문자로, 입출력을 다른 장치(파일, 모뎀, 프린터 등)를 통해 수행하거나 연결하는 역할을 한다.

명령줄 인터페이스의 일반적인 패턴은 다음과 같다.

프롬프트 명령 매개변수1 매개변수2 매개변수3 … 매개변수N

  • 프롬프트 — 프로그램에서 생성되어 사용자에게 컨텍스트를 제공한다.
  • 명령 — 사용자가 제공하며, 다음 두 가지 중 하나이다.
  • # ''내부'' 명령은 명령줄 인터프리터에서 인식하고 처리한다. (내장 명령이라고도 한다.)[4]
  • # ''외부'' 명령은 별도의 실행 파일에 있는 실행 파일을 실행한다. 명령줄 인터프리터는 외부 명령과 일치하는 이름을 가진 실행 파일을 검색한다.[5][6]
  • 매개변수1 …매개변수N — 사용자가 제공하는 매개변수이다. 형식과 의미는 명령에 따라 다르다. 외부 명령의 경우 매개변수 값은 OS에서 실행될 때 프로그램으로 전달된다. 매개변수는 인수 또는 옵션일 수 있다.


이 형식에서 명령줄 요소 간의 구분 기호는 공백 문자이며, 줄 끝 구분 기호는 줄 바꿈 구분 기호이다.

CLI는 구문의미로 구성된다. ''구문''은 모든 명령이 따라야 하는 문법이다. 운영 체제의 경우 DOS유닉스는 각각 자체 규칙을 정의한다. 임베디드 시스템의 경우 각 공급업체가 자체 독점 규칙을 정의한다. ''의미''는 어떤 종류의 연산과 데이터에 이러한 연산을 수행할 수 있는지, 구문이 이러한 연산과 데이터를 어떻게 나타내는지 정의한다.

간단한 CLI는 프롬프트를 표시하고, 사용자가 입력하고 Enter 키로 종료하는 ''명령줄''을 수락한 다음, 지정된 명령을 실행하고 결과 또는 오류 메시지를 텍스트로 표시한다. 고급 CLI는 명령 실행 전에 명령줄을 검증, 해석 및 매개변수 확장하고, 선택적으로 출력을 캡처하거나 리디렉션한다.

GUI의 버튼이나 메뉴 항목과 달리 명령줄은 사용자가 원하는 작업을 정확히 명시한다. 또한, 명령줄에는 결과를 사용자 정의하기 위해 변경할 수 있는 기본값이 포함되어 있다. 유용한 명령줄은 문자열 또는 별칭을 할당하여 저장하거나, 여러 명령을 그룹화하여 더 복잡한 시퀀스를 수행하여 명령으로 처리할 수 있는 단일 엔티티인 명령 프로시저 또는 스크립트를 만들 수 있다.

CLI 셸에 제공되는 명령 형식은 다음과 같다.

  • doSomething how toFiles
  • doSomething how sourceFile destinationFile
  • doSomething how < inputFile > outputFile
  • doSomething how | doSomething how | doSomething how > outputFile


여기서 ''doSomething''은 동사, ''how''는 부사(예: ''상세하게'' 또는 ''조용하게''), ''toFiles''는 명령이 작용해야 하는 객체(일반적으로 하나 이상의 파일)이다. >는 리디렉션 연산자로, 명령의 출력을 자체 표준 출력(화면)이 아닌 지정된 파일로 보내도록 지시한다. >>를 사용하면 출력을 리디렉션하고 파일에 추가한다. 수직 막대(|)는 파이프라인을 만든다.[7]

BBC Micro의 프롬프트


명령 프롬프트(또는 "프롬프트")는 명령줄 인터페이스에서 명령을 받을 준비가 되었음을 나타내는 일련의 문자이다. 사용자에게 행동을 촉구한다. 프롬프트는 $, %, #, :, > 또는 - 중 하나로 끝나며, 작업 디렉터리 경로 및 호스트 이름과 같은 정보를 포함하는 경우가 많다.

유닉스파생 시스템에서 프롬프트는 사용자가 일반 사용자일 경우 $ 또는 %로 끝나지만, 슈퍼유저 (유닉스 용어에서 "root")일 경우 #으로 끝난다.

최종 사용자는 프롬프트를 수정할 수 있다. 환경에 따라 색상, 특수 문자 등을 포함하여 프롬프트를 유익하게 만들거나 시각적으로 보기 좋게 하거나, 여러 시스템의 세션을 구별하거나, 명령의 현재 중첩 수준을 나타낼 수 있다. 일부 시스템에서 프롬프트 정의의 특수 토큰을 사용하여 외부 프로그램을 호출하도록 할 수 있다.

DOS의 COMMAND.COM 및 Windows NT의 cmd.exe에서 PROMPT 명령을 실행하거나 %PROMPT% 환경 변수의 값을 변경하여 프롬프트를 수정할 수 있다. 예를 들어, 대부분의 최신 시스템의 기본값인 C:\> 스타일은 PROMPT $P$G로 얻을 수 있다. 이전 DOS 시스템의 기본값인 C>PROMPT로 얻을 수 있지만 일부 시스템에서는 플로피 드라이브 A: 또는 B:에서 사용하지 않는 한 최신 C:\> 스타일을 생성한다. PROMPT $N$G를 사용하여 자동 기본값을 재정의하고 이전 스타일로 명시적으로 전환할 수 있다.

많은 유닉스 시스템은 $PS1 변수(Prompt String 1)를 특징으로 하지만, 다른 변수도 (사용된 에 따라) 프롬프트에 영향을 줄 수 있다. Bash 셸에서 다음과 같은 형식의 프롬프트:

[시간] 사용자@호스트: 작업_디렉토리 $

export PS1='[\t] \u@\H: \W $' 명령을 실행하여 설정할 수 있다.

zsh에서 $RPROMPT 변수는 디스플레이 오른쪽에 선택적 ''프롬프트''를 제어한다. 텍스트 입력 위치가 변경되지 않는다는 점에서 실제 프롬프트가 아니다. 프롬프트와 동일한 줄에 정보를 표시하되 오른쪽 정렬하는 데 사용된다.

RISC OS에서 명령 프롬프트는 * 기호이므로 (OS) CLI 명령은 ''별표 명령''이라고 한다. 명령 앞에 *를 붙여 다른 명령줄 (예: BBC BASIC 명령줄)에서 동일한 명령에 액세스할 수도 있다.

4. 2. 명령줄 옵션

명령줄 옵션(플래그 또는 스위치라고도 함)은 명령의 작동 방식을 변경하며, 그 효과는 명령 프로그램에 의해 결정된다. 옵션은 공백으로 구분되어 명령줄에서 명령 이름 다음에 온다. DOS의 `Dir/?` 및 `DIR /?`와 같이 첫 번째 옵션 앞에 공백이 항상 필요한 것은 아니다. 반면 유닉스의 `dir --help`와 같이 옵션 앞에 하나 이상의 공백이 필요한 경우도 있으며 옵션이 필요하다.

옵션의 형식은 운영 체제에 따라 매우 다양하다. 대부분의 경우 구문은 운영 체제 요구 사항이 아닌 관례에 따른다.

다음은 디렉토리의 파일을 나열하는 것과 관련된 명령줄 옵션의 몇 가지 예시이다.

운영 체제명령유효한 대안참고
OpenVMSdirectory/ownerDir /Ownerdirectory 명령에 파일의 소유권도 표시하도록 지시한다.
Directory 명령 이름은 대소문자를 구분하지 않으며 고유하게 유지하는 데 필요한 최소한의 문자로 줄여 쓸 수 있다.
WindowsDIR/Q/O:S d*dir /q d* /o:s크기순으로 정렬된 D로 시작하는 파일의 소유권을 표시한다 (가장 작은 파일부터).
인수 d* 주변의 공백이 필요하다.
유닉스 계열 시스템ls -lS D*ls -S -l D*D로 시작하는 파일과 디렉토리를 긴 형식으로 표시한다 (d는 제외), 크기순으로 정렬 (가장 큰 파일부터).
든 인수와 옵션 주위에 공백이 필요하지만, 일부는 함께 실행될 수 있다. 예를 들어, -lS-l -S'와 동일하다.
Data General RDOS CLI1980년 4월 26일 이전에 생성된 파일에 대한 모든 속성을 나열한다.
짜 인수의 끝에 있는 /B는 해당 인수의 의미를 수정하는 로컬 스위치이고, /S 및 /E는 글로벌 스위치'이다. 즉, 전체 명령에 적용된다.



CLI의 단점 중 하나는 사용자가 사용 가능한 작업에 대한 단서가 부족하다는 것이다. 반면, GUI는 일반적으로 메뉴, 아이콘 등을 통해 사용자에게 사용 가능한 작업을 알린다. 이러한 제한을 극복하기 위해 많은 CLI 프로그램은 사용법 메시지를 표시하며, 일반적으로 인수가 없거나 `?`, `-?`, `-h`, `-H`, `/?`, `/h`, `/H`, `/Help`, `-help` 또는 `--help` 중 하나로 호출될 때 표시된다.

하지만 명령줄 인수가 선택적인 프로그램 및 스크립트의 경우 추가 알림 없이 실행되므로, 사용법 도움말을 표시할 것이라는 기대감으로 매개변수 없이 프로그램 이름을 입력하는 것은 위험할 수 있다.

적어도 도움말 매개변수의 경우는 바람직하지만, 프로그램이 위에 예시된 모든 옵션 시작 문자를 지원하지 않을 수 있다. DOS에서는 기본 명령줄 옵션 문자를 `/`에서 `-`로 변경할 수 있으며, 프로그램은 현재 설정을 결정하기 위해 SwitChar API를 쿼리할 수 있다. 따라서 프로그램이 모든 옵션을 지원하도록 하드 와이어링되어 있지 않은 경우, 사용자는 도움말을 안정적으로 요청하기 위해서 현재 설정을 알아야 할 수도 있다.

프로그램에 따라 허용되는 매개변수에 대한 추가 또는 더 구체적인 도움말을 제공하기도 한다.

4. 3. 인수

'''명령줄 인수''' 또는 '''매개변수'''는 프로그램이 시작될 때 프로그램에 제공되는 정보 항목이다.[8] 프로그램은 정보의 소스 또는 대상을 식별하거나 프로그램의 작동을 변경하는 여러 명령줄 인수를 가질 수 있다.

명령 프로세서가 활성화되면 일반적으로 프로그램 이름을 입력하고 그 뒤에 명령줄 인수를 입력하여 프로그램을 호출한다(있는 경우). 예를 들어, 유닉스 및 유닉스 계열 운영 체제 환경에서 명령줄 인수의 예는 다음과 같다.



rm file.s



`file.s`는 rm 프로그램에 `file.s`라는 파일을 제거하도록 지시하는 명령줄 인수이다.

C, C++ 및 Java와 같은 일부 프로그래밍 언어는 프로그램이 main 함수의 문자열 매개변수로 처리하여 명령줄 인수를 해석할 수 있도록 한다.[9][10] Python과 같은 다른 언어는 `sys` 모듈을 통해 운영 체제별 API(기능)를 노출하며, 특히 ''명령줄 인수''에 대한 `sys.argv`를 노출한다.

유닉스 계열 운영 체제에서 파일 이름 대신 사용되는 단일 하이픈은 프로그램이 표준 입력에서 들어오는 데이터를 처리하거나 표준 출력으로 데이터를 보내야 함을 지정하는 특수 값이다.

5. 셸 CLI의 해부

명령줄 인터페이스(CLI)는 사용자가 텍스트 기반 명령어를 입력하여 컴퓨터와 상호 작용하는 방식이다. 가장 기본적인 형태는 명령 프롬프트를 표시하고, 사용자가 명령어를 입력하면(보통 엔터 키를 눌러 완료) 실행하고, 결과를 텍스트로 출력하는 것이다.

명령줄은 그래픽 사용자 인터페이스(GUI)의 버튼이나 메뉴와 달리, 사용자가 원하는 작업을 정확하게 표현할 수 있다. 또한, 필요에 따라 변경 가능한 기본값들을 포함하고 있다. 개별 명령어뿐만 아니라 여러 명령어를 순차적으로 묶어 특정 문자열이나 별명에 지정하여 나중에 재사용할 수도 있다.

이러한 인터페이스를 제공하는 프로그램을 명령줄 해석기 또는 이라고 한다. 예를 들어, 유닉스 셸(sh, ksh, csh, tcsh, bash 등), CP/M, 도스의 command.com 등이 있다.

오토캐드와 같은 일부 프로그램은 명령줄 인터페이스와 GUI를 동시에 지원하기도 한다. 매틀랩과 같은 공학/과학 수치 계산 패키지는 일부 작업에 대해 GUI를 제공하지 않지만, 명령줄 인터페이스를 통해 모든 계산 작업을 수행할 수 있다.

명령줄 인터페이스에서 사용되는 명령어는 보통 다음과 같은 구조를 가진다.

[할 일] [작업 방법] [대상 파일들]


[할 일] [작업 방법] < [입력 파일] > [출력 파일]

  • 할 일: 작업의 큰 목적을 나타낸다.
  • 작업 방법: 작업을 수행하는 세부 방법을 지정한다.
  • 대상 파일들: 작업을 수행할 대상 파일들을 지정한다.


두 번째 형태에서 '>'(꺾은 괄호) 및 '<'(꺾은 괄호), '(세로 막대)는 리디렉션 문자로, 입출력을 화면이 아닌 다른 장치(파일, 모뎀, 프린터 등)를 통해 수행하거나 연결하는 역할을 한다.

명령줄 인터페이스 의 일반적인 패턴은 다음과 같다.

프롬프트 명령 매개변수1 매개변수2 매개변수3 … 매개변수N

  • 프롬프트: 사용자에게 컨텍스트를 제공하기 위해 프로그램이 생성한다.
  • 명령: 사용자가 제공하며, 다음 두 가지 종류가 있다.
  • ''내부'' 명령: 명령줄 인터프리터에서 인식하고 처리하는 내장 명령이다.[4]
  • ''외부'' 명령: 별도의 실행 파일에 있는 실행 파일을 실행한다. 명령줄 인터프리터는 외부 명령과 일치하는 이름을 가진 실행 파일을 검색한다.[5][6]
  • 매개변수1 …매개변수N: 사용자가 제공하는 매개변수이다. 형식과 의미는 명령에 따라 다르며, 외부 명령의 경우 OS에서 실행될 때 프로그램으로 전달된다. 인수 또는 옵션이 될 수 있다.


명령줄 요소 간의 구분 기호는 공백 문자이며, 줄 끝 구분 기호는 줄 바꿈 구분 기호이다.

CLI는 일반적으로 구문의미로 구성된다. ''구문''은 모든 명령이 따라야 하는 문법이다. 운영 체제마다 (DOS, 유닉스 등) 또는 임베디드 시스템 공급업체마다 고유한 규칙 집합을 정의한다. ''의미''는 어떤 종류의 연산이 가능하고, 어떤 데이터에 수행할 수 있는지, 그리고 구문이 이를 어떻게 나타내는지 정의한다.

간단한 CLI는 프롬프트를 표시하고, 사용자가 입력하고 Enter 키로 종료하는 ''명령줄''을 수락한 다음, 명령을 실행하고 결과나 오류 메시지를 텍스트로 표시한다. 고급 CLI는 명령 실행 전에 명령줄을 검증, 해석, 매개변수 확장하고, 선택적으로 출력을 캡처하거나 리디렉션한다.

CLI 셸에 제공되는 명령 형식 예시:

  • doSomething how toFiles
  • doSomething how sourceFile destinationFile
  • doSomething how < inputFile > outputFile
  • doSomething how | doSomething how | doSomething how > outputFile


여기서 'doSomething'은 동사, 'how'는 부사(예: '상세하게' 또는 '조용하게'), 'toFiles'는 명령이 작용해야 하는 객체(주로 파일)이다. `>`는 리디렉션 연산자로, 명령 출력을 화면이 아닌 지정된 파일로 보낸다. `>>`는 출력을 리디렉션하고 파일에 추가한다. 수직 막대(|)는 한 명령의 출력이 다음 명령의 입력이 되는 파이프라인을 만든다.[7]

6. GUI와의 비교

아이콘과 창이 있는 그래픽 사용자 인터페이스 (GEM 1.1 데스크톱)


그래픽 사용자 인터페이스(GUI)와 비교했을 때, 명령줄 인터페이스(CLI)는 구현에 필요한 시스템 리소스가 적다. 명령줄에서는 몇 글자만으로 명령 옵션을 지정할 수 있어, 숙련된 사용자는 옵션에 더 쉽게 접근할 수 있다. 자주 사용하는 명령어 시퀀스는 라인 편집 및 기록 메커니즘을 통해 저장하여 반복적인 작업을 자동화할 수 있다. 이는 매개변수와 가변 옵션을 사용할 수 있는 스크립트 언어로 확장 가능하다. 명령줄 기록을 보존하여 명령을 검토하거나 반복할 수도 있다.

명령줄 시스템은 사용자가 참조할 수 있도록 종이나 온라인 설명서를 필요로 할 수 있다. 그러나 보통 'help' 옵션을 통해 명령 옵션에 대한 간략한 정보를 제공한다. 명령줄 환경은 GUI에서 제공하는 다양한 컴퓨터 글꼴이나 확장된 편집 창과 같은 그래픽 기능을 제공하지 않을 수 있다. 새로운 사용자는 사용 가능한 모든 명령과 옵션에 익숙해지기 어려울 수 있는데, 이는 GUI의 아이콘 및 드롭다운 메뉴와 비교했을 때 더욱 두드러진다.

명령줄 인터페이스(CUI)는 초기 컴퓨터에서 주로 사용되었다. 이후 컴퓨터 성능이 향상되면서 GUI 환경을 표준으로 탑재한 개인용 컴퓨터(Macintosh나 Windows 95 등)가 보급되면서, 전문가를 제외하고는 CUI 사용 빈도가 줄었다.

하지만, 많은 네트워크 장비는 텔넷이나 SSH을 지원하며 CUI를 표준으로 탑재하고 있다. 또한 개인용 컴퓨터나 서버용 OS는 기본 인터페이스가 GUI더라도 명령줄 터미널 등 CUI 환경을 표준으로 제공한다. 그러나 스마트폰 등 모바일 기기용 OS에는 표준으로 제공되지 않는 경우가 많다.

CUI를 사용자 인터페이스로 사용하는 애플리케이션을 콘솔 애플리케이션이라고 한다. 텍스트 콘솔을 이용하여 윈도우 등을 표현하는 인터페이스는 텍스트 사용자 인터페이스라고도 한다.
장점

  • GUI로 표시할 수 없는 방대한 파일들을 여러 처리에 적용할 때, 명령어와 파일 이름 패턴을 나열하여 일괄 처리할 수 있다.
  • 처리 자동화(배치 처리)가 용이하다. 일련의 명령어와 제어문은 문자 정보이므로 파일에 저장해두고 나중에 실행 및 수정할 수 있다.
  • 프로그램을 만들 때, 사용자 입력을 처리하는 부분(명령줄 인터프리터)을 비교적 쉽게 만들 수 있다.
  • 다른 운영 체제로 프로그램을 이식할 때, 표준 입출력만 사용하는 콘솔 프로그램이 이식하기 쉽다.
  • 프로그램의 출력을 다른 프로그램에 입력하거나(파이프) 파일에 저장할 수 있다.
  • 원격 로그인 시, 클라이언트 측에 전용 소프트웨어가 필요하지 않은 경우가 많다. (SSH 클라이언트 정도면 충분)
  • 다른 컴퓨터에 원격 로그인 시, 이미지 정보 전송이 불필요하거나 최소화되므로 네트워크 부하가 적다.
  • 자동 완성 기능(오토 컴플리트)과 기록을 사용할 수 있어, 명령어를 모두 직접 입력할 필요가 없다.[29]
  • 키보드만으로 조작 가능하므로 숙련된 사용자는 작업을 빠르게 수행할 수 있다.
  • 바로 전 조작 확인이나 자료 수집(조작 기록 저장, 타인에게 제공) 등이 용이하다.
  • 입력 소스, 출력 대상을 쉽게 전환할 수 있다(리다이렉션).
  • 선행 입력이 가능하다.
  • GUI보다 필요한 리소스가 적다.

단점

  • 대부분의 명령과 응답이 영어를 기반으로 하여, 영어를 모국어로 사용하지 않는 사람에게는 사용하기 어렵다.
  • 직관적인 조작이 불가능하며, 기본적인 명령어를 외워야 하므로 학습 비용이 많이 든다.
  • 인간의 시각적인 능력을 활용하기 어렵다.
  • 선택지나 도움말 등을 화면에 표시하는 데 한계가 있다.
  • 이미지나 도형 조작 및 편집에 적합하지 않거나 불가능하다.
  • 같은 목적의 프로그램이라도 조작 방법이 전혀 다를 수 있다. (예: 텍스트 편집기는 풀 스크린 편집기와 라인 편집기로 나뉨)

7. 스크립팅

대부분의 명령줄 인터프리터는 스크립팅을 지원한다. 이는 특정 명령줄 인터프리터에 고유한 언어일 수 있지만, 인터프리터 언어의 인터프리터이기도 하다. 이러한 인터프리터는 해당 인터프리터가 해석하는 프로그래밍 언어로 작성된 스크립트(셸 스크립트 또는 배치 파일)를 해석한다. 일부 명령줄 인터프리터는 자체 언어 외에도 REXX와 같은 다른 언어의 인터프리터 엔진을 통합하여 해당 언어로 작성된 스크립트를 명령줄 인터프리터 내에서 직접 실행할 수 있다.

반대로 스크립팅 프로그래밍 언어, 특히 eval 함수가 있는 언어(예: REXX, Perl, 파이썬, 루비 또는 Jython)는 명령줄 인터프리터 및 필터를 구현하는 데 사용될 수 있다.

스크립팅을 통해 다음과 같은 이점을 얻을 수 있다.


  • 자동화: 복잡한 작업을 자동화하여 처리 순서대로 명령어나 파일 이름 패턴을 나열하여 일괄 처리할 수 있다. 일련의 명령어와 제어문은 문자 정보이므로 파일에 간단히 저장해두고, 나중에 언제든지 실행하고 수정할 수 있다.
  • 프로그램 개발 용이성: 프로그램을 만들 때, 사용자 입력을 처리하는 부분 (명령줄 인터프리터)을 비교적 쉽게 만들 수 있다. 다른 운영 체제로 프로그램을 이식할 때도, 표준 입출력만 사용하는 콘솔 프로그램이 훨씬 이식하기 쉽다.[26] [27] [28]
  • 유연성: 프로그램의 출력을 다른 프로그램에 직접 입력하거나 (파이프), 파일에 저장할 수 있다.
  • 원격 제어: 원격 로그인 시, 클라이언트 측에서 전용 소프트웨어가 필요하지 않다 (SSH 클라이언트 정도로 충분하다). 네트워크 부하가 적어 저속 회선에서도 원격 조작이 가능하다.
  • 효율성: 일반적으로 자동 완성 기능 (오토 컴플리트)과 기록을 사용할 수 있으므로, 명령어를 모두 직접 입력할 필요는 없다.[29] 키보드만으로 조작할 수 있으므로, 숙련된 사용자는 작업을 신속하게 수행할 수 있다.

8. 기타 명령줄 인터페이스

운영 체제 셸 외에도, 데이터베이스, 텍스트 편집기, 비디오 게임 등 다양한 프로그램에서 명령줄 인터페이스를 제공한다.

표준 스트림 인터페이스는 한 명령의 출력을 다른 명령의 입력으로 전달할 수 있게 해준다. 텍스트 파일도 이러한 목적으로 사용될 수 있다. 유닉스에서는 장치도 파일이므로, stdin, stdout 및 stderr에 사용되는 셸의 일반적인 파일 유형은 tty 장치 파일이다.

일부 프로그램은 셸 프로그램이 문서를 시작하거나 프로그램을 시작하기 위해 도우미 프로그램을 시작할 수 있는 명령줄 인터페이스를 제공한다. 윈도우 및 OS/2의 그래픽 인터페이스는 다른 프로그램으로 전달되는 명령줄에 크게 의존한다.

OS/2 E 편집기와 같은 일부 텍스트 편집기는 셸에 사용되는 명령줄을 처리할 수 있으며, 출력은 문서 창에 직접 배치된다.

웹 브라우저의 URL 입력 필드는 명령줄로 사용될 수 있다. 웹 앱을 실행하고, 브라우저 구성에 접근하며, 검색을 수행하는 데 사용된다. 구글은 "인터넷의 명령줄"이라고 불리며, 알려진 형식의 검색 매개변수를 감지하면 도메인별 검색을 수행한다.

자바스크립트 라이브러리를 사용하여 브라우저에서 독립 실행형 웹 앱으로 또는 더 큰 응용 프로그램의 일부로 명령줄 응용 프로그램을 작성할 수 있다.[14] DuckDuckGo의 CLI 인터페이스가 이러한 예시이다.[15] 웹 기반 SSH 응용 프로그램을 통해 브라우저에서 서버 명령줄 인터페이스에 접근할 수도 있다.

많은 PC 비디오 게임은 콘솔이라고 하는 명령줄 인터페이스를 제공한다. 이는 게임 개발자가 개발 중에 사용하거나, 모드 개발자가 디버깅 목적으로 사용하며, 게임의 일부를 치트하거나 건너뛰기 위해 사용되기도 한다.

참조

[1] 웹사이트 Graphical User Interface History https://kartsci.org/[...] 2024-03-24
[2] 서적 Mac OS X Internals: A Systems Approach https://books.google[...] Addison-Wesley Professional 2006-06-19
[3] 웹사이트 1. Command line and environment https://docs.python.[...] 2024-08-05
[4] 웹사이트 Shell Built-in Commands List https://linuxhandboo[...] 2024-08-05
[5] 웹사이트 How to set your $PATH variable in Linux {{!}} Opensource.com https://opensource.c[...] 2024-08-05
[6] 웹사이트 path https://learn.micros[...] 2023-02-03
[7] 웹사이트 Learning the bash Shell, Second Edition [Book] https://www.oreilly.[...] 2024-08-05
[8] 웹사이트 Windows Terminal command line arguments https://learn.micros[...] 2024-05-29
[9] 웹사이트 Command Line Arguments in C https://www.w3school[...] 2024-08-05
[10] 웹사이트 Command Line Arguments in Java https://www.geeksfor[...] 2016-08-16
[11] 웹사이트 Argument Syntax (The GNU C Library) https://www.gnu.org/[...] 2021-07-09
[12] 간행물 openharmony/third_party_toybox https://github.com/o[...] OpenHarmony 2021-10-14
[13] 웹사이트 调测 - Shell介绍 - 《华为鸿蒙操作系统(OpenHarmony) v1.0 开发者文档》 - 书栈网 · BookStack https://www.bookstac[...] 2024-07-07
[14] 웹사이트 jQuery Terminal Emulator https://terminal.jcu[...] 2021-04-20
[15] 웹사이트 DuckDuckGo TTY https://duckduckgo.c[...] 2021-04-20
[16] 서적 goo辞書、デジタル大辞泉 http://dictionary.go[...] 小学館 2014-11-29
[17] 뉴스 CUI Definition from PC Magazine Encyclopedia http://www.pcmag.com[...]
[18] 뉴스 WineHQ - Text mode programs (CUI: Console User Interface) http://www.winehq.or[...]
[19] 뉴스 ヘルプ - IBM, EGL アプリケーションの開発 - コンソール・ユーザー・インターフェース http://publib.boulde[...]
[20] 문서 物理的なハードウェアキーボードのほか、GUIとして実装されている[[ソフトウェアキーボード]]([[スクリーンキーボード]])や、画像から文字認識を行なう「手書き入力パッド」によって入力される文字、といった形態もある。
[21] 문서 正確には文字ストリーム。
[22] 뉴스 IBM MobileFirst Platform Command Line Interface https://www.techtarg[...]
[23] 뉴스 TechTarget What is a command-line interface (CLI) https://www.techtarg[...]
[24] 뉴스 英ナビ!辞書、[[日本英語検定協会|公益財団法人 日本英語検定協会]] 運営・管理 https://www.ei-navi.[...]
[25] 문서 AWS Command Line Interface バージョン 2 用ユーザーガイド
[26] 뉴스 コンソール アプリケーション テンプレート http://msdn.microsof[...]
[27] 뉴스 Visual C++ の Win32 コンソール アプリケーション http://msdn.microsof[...]
[28] 뉴스 コンソール アプリケーションの作成 (Visual C#) http://msdn.microsof[...]
[29] 뉴스 @IT:Windows TIPS -- Hint:コマンド・プロンプトの履歴機能を活用する https://atmarkit.itm[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com