명령줄 인터페이스
Command-line interface명령줄 인터프리터 또는 명령줄 프로세서는 명령줄 인터페이스(CLI)를 사용하여 텍스트 행 형식으로 사용자로부터 명령을 수신합니다.이를 통해 환경에 대한 매개 변수를 설정하고 실행 파일을 호출하며 수행할 작업에 대한 정보를 제공할 수 있습니다.경우에 따라서는, 유저 또는 이전의 실행 파일에 의해서 확립된 조건에 근거해 기동됩니다.이러한 접근은 1960년대 중반부터 컴퓨터 단말기에 의해 처음 제공되었다.이를 통해 펀치 카드 또는 기타 입력 방식으로는 사용할 수 없는 대화형 환경이 제공되었습니다.
오늘날 많은 사용자가 그래픽 사용자 인터페이스와 메뉴 중심의 상호 작용에 의존하고 있습니다.그러나 일부 프로그래밍 및 유지관리 태스크에는 그래픽 사용자 인터페이스가 없고 명령줄을 사용할 수 있습니다.
명령줄 인터페이스 대신 텍스트 기반 사용자 인터페이스 메뉴(예: IBM AIX SMIT), 키보드 바로 가기 및 포인터 중심의 다양한 데스크톱 비유(일반적으로 마우스로 제어)가 있습니다.예를 들면, Microsoft Windows, DOS Shell, 및 마우스 시스템의 전원 패널이 있습니다.커맨드 라인 인터페이스는, 커서 어드레싱을 사용해 표시 화면에 기호를 배치하는 화면 지향의 텍스트 베이스의 유저 인터페이스도 가능한 단말 장치에 실장되는 경우가 많습니다.
명령줄 인터페이스를 갖춘 프로그램은 일반적으로 스크립트를 통해 자동화하기가 더 쉽습니다.
많은 소프트웨어 시스템이 제어 및 작동을 위한 명령줄 인터페이스를 구현합니다.여기에는 프로그래밍 환경과 유틸리티 프로그램이 포함됩니다.
그래피컬 사용자 인터페이스와의 비교
그래피컬 사용자 인터페이스에 비해 명령줄 인터페이스는 구현에 필요한 시스템리소스가 적습니다.명령어 옵션은 각 명령줄에서 몇 글자로 제공되므로 경험이 많은 사용자는 옵션에 쉽게 액세스할 수 있습니다.자주 사용하는 시퀀스를 저장하기 위한 행 편집 및 이력 메커니즘을 통해 반복 작업의 자동화가 간소화됩니다.이는 파라미터 및 가변 옵션을 사용할 수 있는 스크립트 언어까지 확장될 수 있습니다.명령줄 이력을 유지하여 명령어를 검토 또는 반복할 수 있습니다.
명령줄 시스템에서는 사용자가 참조할 수 있도록 종이 또는 온라인 매뉴얼이 필요할 수 있습니다.단, "도움말" 옵션을 사용하면 명령어 옵션을 간결하게 확인할 수 있습니다.명령줄 환경에서는 GUI에서 볼 수 있는 다양한 글꼴이나 확장된 편집 창 등의 그래픽 기능이 제공되지 않을 수 있습니다.그래픽 사용자 인터페이스의 아이콘 및 드롭다운 메뉴에 비해 매뉴얼을 참조하지 않고 사용 가능한 모든 명령 및 옵션에 익숙해지기는 어려울 수 있습니다.
종류들
운영 체제 명령줄 인터페이스
운영체제(OS) 명령줄 인터페이스는 보통 운영체제와 함께 제공되는 개별 프로그램입니다.이러한 텍스트 인터페이스를 구현하는 프로그램을 명령줄 인터프리터, 명령어 프로세서 또는 셸이라고 합니다.
명령줄 인터프리터의 예로는 OpenVMS 및 RSX-11에서의 DEC의 DIGITAL Command Language(DCL; 디지털명령어 언어), 다양한 Unix 쉘(sh, ksh, csh, tcsh, zsh, Bash 등), CP/M의 CCP, DOS의 명령어가 있습니다.COM, OS/2 및 Windows CMD.EXE 프로그램. 후자의 그룹은 주로 DEC의 RSX-11 및 RSTS CLI를 기반으로 합니다.대부분의 operating system에서는, 디폴트의 셸 프로그램을 대체 프로그램으로 교환할 수 있습니다.예를 들어 DOS용 4DOS, OS/2용 4OS2, Windows용 4NT / Take Command 등이 있습니다.
'쉘'이라는 용어는 명령줄 인터프리터를 설명하는 데 자주 사용되지만 엄밀하게 말하면 '쉘'은 완전한 그래픽 지향 프로그램을 포함하여 사용자 인터페이스를 구성하는 모든 프로그램일 수 있습니다.예를 들어 기본 Windows GUI는 EXPLORER라는 이름의 셸 프로그램입니다.EXE, SHEL=SHEL에 정의되어 있습니다.WIN의 EXE 행INI 컨피규레이션파일이러한 프로그램은 셸이지만 CLI는 아닙니다.
응용 프로그램 명령줄 인터페이스
(운영체제가 아닌) 애플리케이션 프로그램에도 명령줄 인터페이스가 있을 수 있습니다.
응용 프로그램에서는 다음 3가지 주요 유형의 명령줄 인터페이스 메커니즘이 모두 지원되지 않을 수 있습니다.
- 파라미터:대부분의 명령줄 인터페이스는 프로그램이 실행될 때 추가 정보를 전달하는 수단을 지원합니다.
- 인터랙티브 명령줄 세션: 프로그램이 실행 후 운영자에게 명령어를 입력할 수 있는 독립된 수단을 제공할 수 있습니다.
- 프로세스 간 통신:대부분의 운영 체제는 프로세스 간 통신 수단(예: 표준 스트림 또는 명명된 파이프)을 지원합니다.클라이언트 프로세스로부터의 커맨드 라인은, 다음의 몇개의 방법으로 CLI 프로그램으로 리다이렉트 할 수 있습니다.
일부 응용 프로그램은 CLI를 지원하며 사용자에게 자체 프롬프트를 표시하고 명령줄을 수락합니다.다른 프로그램에서는 CLI와 GUI를 모두 지원합니다.경우에 따라서는 GUI는 개별 CLI 실행 파일의 래퍼에 불과합니다.다른 경우 프로그램에서 GUI 대신 CLI를 옵션으로 제공하는 경우가 있습니다.CLI와 GUI는 다른 기능을 지원하는 경우가 많습니다.예를 들어 수치 분석 컴퓨터 프로그램인 MATLAB의 모든 기능은 CLI를 통해 사용할 수 있지만 MATLAB GUI는 일부 기능만 제공합니다.
1975년의 Collarge Cave Adventure에서는 사용자는 CLI를 사용하여 동굴 시스템을 탐색하기 위해 한두 단어를 입력합니다.
역사
명령줄 인터페이스는 텔레프린터(TTY) 머신을 통해 사람들에 의해 실행되는 통신 형태에서 발전했습니다.여기에는 Telex를 사용한 주문이나 확인서가 포함되어 있는 경우가 있습니다.초기 컴퓨터 시스템은 종종 텔레프린터를 조작자와의 상호작용 수단으로 사용했다.
기계식 텔레프린터는 텔레프린터를 모방한 키보드와 화면인 "유리 티"로 대체되었습니다."스마트" 단말기는 전체 화면에서 커서를 이동하거나 컴퓨터에 전송하기 위해 단말기의 데이터를 로컬로 편집하는 등의 추가 기능을 허용했습니다.마이크로컴퓨터 혁명이 기존의 미니컴퓨터+단말기-타임셰어링 아키텍처를 대체함에 따라 하드웨어 단자는 PC의 시리얼 포트를 통해 전송되는 단말 신호를 해석하는 PC 소프트웨어인 터미널 에뮬레이터로 대체되었습니다.일반적으로 조직의 새 PC를 기존의 미니 또는 메인프레임 컴퓨터와 연결하거나 PC와 PC를 연결하는 데 사용됩니다.이들 PC 중 일부는 게시판 시스템 소프트웨어를 실행하고 있었다.
초기 운영체제 CLI는 상주 모니터 프로그램의 일부로 구현되어 있어 쉽게 교체할 수 없었습니다.교환 가능한 컴포넌트로서의 셸의 첫 번째 실장은 Multics 시분할 운영 [1]체제의 일부였습니다.1964년 MIT 계산 센터 직원인 Louis Pouzin은 인수 치환을 [2]허용하면서 명령 스크립트를 실행하기 위한 RUNCOM 도구를 개발했습니다.Pouzin은 프로그래밍 언어와 같은 명령어를 사용하는 기술을 설명하기 위해 "쉘"이라는 용어를 만들었고, 멀티ics 운영 [3]체제에서 아이디어를 구현하는 방법에 대한 논문을 작성했습니다.푸진은 1965년 고국인 프랑스로 돌아왔고, 최초의 멀티크 셸은 글렌다 슈뢰더에 [2]의해 개발되었다.
최초의 Unix 쉘인 V6 쉘은 1971년 Bell Labs에서 Ken Thompson에 의해 개발되었으며, Schroeder의 Multics [4][5]쉘을 본떠 만들어졌습니다.본 셸은 1977년에 V6 쉘을 대체하기 위해 도입되었습니다.인터랙티브한 명령어 인터프리터로 사용되지만 스크립트 언어로도 사용되었으며 구조화된 프로그램을 생성하는 것으로 간주되는 대부분의 기능을 포함하고 있습니다.Bourne 쉘은 KornShell(ksh), Almquist 쉘(ash), 인기 있는 Bourne-again 쉘(Bash)[5]의 개발로 이어졌습니다.
초기 마이크로컴퓨터 자체는 CP/M, DOS 또는 AppleSoft BASIC과 같은 명령줄 인터페이스를 기반으로 했습니다.1980년대와 1990년대에 Apple Macintosh와 Microsoft Windows가 PC에 도입되면서 명령줄 인터페이스가 그래피컬 사용자 인터페이스로 대체되었습니다.명령줄은 대체 사용자 인터페이스로 사용할 수 있으며 시스템 관리자 및 기타 고급 사용자가 시스템 관리, 컴퓨터 프로그래밍 및 배치 처리를 위해 자주 사용합니다.
2006년 11월 Microsoft는 기존 Unix 쉘의 기능과 자체 객체 지향 기능을 결합한 Windows PowerShell 버전 1.0(이전의 코드명 Monad)을 출시했습니다.NET 프레임워크MinGW 및 Cygwin은 Unix와 같은 CLI를 제공하는 Windows용 오픈소스 패키지입니다.Microsoft는 서비스 for UNIX 애드온을 통해 MKS Inc.의 Ksh 구현 MKS Korn 쉘 for Windows를 제공하고 있습니다.
2001년부터 Macintosh 운영체제 macOS는 Darwin이라는 유닉스 계열 운영체제를 기반으로 하고 있다.이러한 컴퓨터에서는 응용 프로그램 폴더의 Utilities 하위 폴더에 있는 터미널 에뮬레이터 프로그램을 실행하거나 ssh를 사용하여 원격으로 시스템에 로그인하여 Unix와 유사한 명령줄 인터페이스에 액세스할 수 있습니다.Z 쉘은 macOS의 기본 셸이며 Bash, tcsh 및 KornShell도 제공됩니다.macOS Catalina 이전에는 Bash가 기본이었습니다.
사용.
CLI는 명령어 또는 쿼리의 풍부한 어휘와 광범위한 옵션(또는 임의)을 조합하여 순수한 GUI를 사용하는 것보다 텍스트로 빠르게 입력할 수 있을 때 사용합니다.이것은 일반적으로 운영체제명령어 셸의 경우입니다.CLI는 그래픽 사용자 인터페이스를 지원하기 위해 리소스가 부족한 시스템에서도 사용됩니다.일부 컴퓨터 언어 시스템(Python, Forth, LISP, Rexx 및 많은 BASIC 방언 등)은 코드를 빠르게 평가할 수 있는 대화형 명령줄 모드를 제공합니다.
CLI는 프로그래머 및 시스템 관리자, 엔지니어링 및 과학 환경, 기술적으로 고급 PC 사용자가 자주 사용합니다.CLI는 또한 시각 장애인들에게 인기가 있는데, 명령과 응답은 새로 고침 가능한 점자 디스플레이를 사용하여 표시할 수 있기 때문이다.
셸 CLI의 구조
이 섹션은 확인을 위해 추가 인용문이 필요합니다.(2015년 7월 (이 및 ) |
명령줄 인터페이스의[6][7] 일반적인 패턴은 다음과 같습니다.
프롬프트 명령 param1 param2 param3 … paramN
- 프롬프트 - 사용자에게 컨텍스트를 제공하기 위해 프로그램에 의해 생성됩니다.
- 명령: 사용자가 제공합니다.명령어는 보통 다음 세 가지 클래스 중 하나입니다.
- 내부 명령어는 명령줄 인터프리터에 의해 인식 및 처리됩니다.
- 포함된 명령어는 개별 실행 파일을 실행합니다.
- 외부 명령어는 다른 당사자가 포함할 수 있는 실행 파일을 실행합니다.
- param1 ...paramN : 사용자가 지정한 파라미터.파라미터의 형식과 의미는 명령어에 따라 달라집니다.[ Included ]명령어 또는 [External]명령어의 경우 파라미터의 값은 OS가 기동할 때 프로그램에 전달됩니다.파라미터는 [Arguments]또는 [Options] 중 하나입니다.
이 형식에서는 명령줄 요소 간의 구분 기호는 공백 문자이며 줄 끝 구분 기호는 줄 바꿈 기호입니다.이것은 널리 사용되는(그러나 보편적인 것은 아니다) 관례입니다.
CLI는 일반적으로 구문과 시멘틱스로 구성된다고 볼 수 있습니다.구문은 모든 명령어가 따라야 하는 문법입니다.운영 체제의 경우 DOS와 Unix는 각각 모든 명령어가 따라야 하는 자체 규칙 집합을 정의합니다.임베디드 시스템의 경우 Nortel, Juniper Networks, Cisco Systems 등의 각 벤더가 독자적인 규칙 세트를 정의합니다.또한 이러한 규칙은 사용자가 명령 시스템을 탐색하는 방법을 지정합니다.시멘틱스는 가능한 연산의 종류, 이러한 연산을 수행할 수 있는 데이터의 종류 및 문법이 이러한 연산과 데이터를 어떻게 나타내는지를 정의합니다.이것은 구문에서 심볼적인 의미입니다.
두 개의 다른 CLI가 구문 또는 의미론 중 하나에 일치할 수 있지만 두 CLI가 모두 일치해야 사용자가 아무것도 배우지 않고 두 CLI를 모두 사용할 수 있을 뿐만 아니라 스크립트 재사용을 활성화할 수 있습니다.
단순한 CLI에서 프롬프트가 표시되고 Enter 키로 종료된 사용자가 입력한 "명령줄"을 받아들인 후 지정된 명령을 실행하여 결과 또는 오류 메시지를 텍스트로 표시합니다.고도의 CLI 에서는 지정된 명령어를 실행하기 전에 명령줄 검증, 해석 및 파라미터 확장 및 출력 캡처 또는 리다이렉트(옵션)가 이루어집니다.
GUI의 버튼이나 메뉴 항목과 달리 명령줄은 일반적으로 사용자가 원하는 작업을 정확하게 기술하는 자체 문서화입니다.또한 명령줄에는 일반적으로 결과를 사용자 정의하기 위해 변경할 수 있는 많은 기본값이 포함되어 있습니다.명령어 전체를 나타내는 문자열 또는 에일리어스를 할당함으로써 유용한 명령줄을 저장할 수 있습니다.또한 여러 명령어를 그룹화하여 프로그램 컴파일, 설치, 실행 등 복잡한 시퀀스를 수행할 수 있습니다.이러한 명령어프로시저 또는 스크립트라고 하는1개의 엔티티를 작성합니다.이 엔티 자체를 명령어로 취급할 수 있습니다.이러한 장점은 사용자가 복잡한 명령 또는 일련의 명령어를 한 번만 파악해야 한다는 것을 의미합니다.이러한 명령어는 저장할 수 있기 때문에 다시 사용할 수 있습니다.
CLI 쉘에 대한 명령어는 보통 다음 중 하나의 형식입니다.
- doSomething how toFiles
- doSomething how sourceFile destinationFile
- doSomething how < inputFile > outputFile
- doSomething how doSomething how doSomething how > outputFile
여기서 do실제로 동사(예를 들어 명령어를 "상세하게" 또는 "조용히" 실행되어야 함)와 명령어가 동작해야 하는 객체(일반적으로 하나 이상의 파일)를 파일링합니다.그>
세 번째 예에서는 리다이렉션오퍼레이터를 사용하여 명령줄 인터프리터에 명령어의 출력을 표준 출력(화면)이 아닌 이름 있는 파일로 송신하도록 지시합니다.그러면 파일이 덮어쓰게 됩니다.사용.>>
는 출력을 리다이렉트하여 파일에 추가합니다.또 다른 리다이렉션 연산자는 세로 막대(
어떤 명령어의 출력이 다음 명령어의 입력이 되는 파이프라인을 만듭니다.
CLI 및 리소스 보호
PATH 환경변수에 표시되는 경로를 수정하여 사용 가능한 명령어 세트를 변경할 수 있습니다.Unix 에서는, 커맨드를 실행 파일로서 마크 할 필요도 있습니다.경로 변수의 디렉토리는 지정된 순서대로 검색됩니다.경로 순서를 변경함으로써 \OS2\MDOS\E와 같이 실행할 수 있습니다.\OS2\E 대신 EXE.EXE(기본값이 반대일 경우)실행 파일의 이름을 변경하는 것도 효과적입니다.예를 들어, 마음에 드는 에디터의 이름을 EDIT로 변경하는 경우가 많습니다.
명령줄에서는 고급 내부 명령어에 대한 액세스 등 사용 가능한 명령을 제한할 수 있습니다.Windows CMDEXE가 이렇게 합니다.종종 Shareware 프로그램은 프롬프트에서 [clarification needed]'관리자가 배치 파일 실행을 비활성화했습니다' 명령을 인쇄하는 등 명령 범위를 제한합니다.
네트워크 라우터의 CLI 등 일부 CLI에는 모드 계층이 있으며 각 모드에서 지원되는 명령어세트는 다릅니다.명령어 세트는 보안, 시스템, 인터페이스 등과 관련지어 그룹화 됩니다.이러한 시스템에서는 사용자가 일련의 서브모드를 통과할 수 있습니다.예를 들어 CLI에 interface와 system이라는2가지 모드가 있는 경우 사용자는 명령어인터페이스를 사용하여 인터페이스 모드를 시작할 수 있습니다.이 시점에서 사용자가 인터페이스 모드를 종료하고 시스템모드를 시작할 때까지 시스템모드에서 명령어에 액세스 할 수 없는 경우가 있습니다.
명령 프롬프트
명령어 프롬프트(또는 단순히 프롬프트)는 명령줄 인터페이스에서 명령어를 받아들일 준비를 나타내기 위해 사용되는 일련의 (1개 또는 여러 개의) 문자입니다.말 그대로 사용자가 조치를 취하도록 유도합니다.프롬프트는 보통 다음 중 하나의 문자로 끝납니다.$
,%
,#
,[8][9] :
,>
또는-
[10] 또, 현재의 작업 디렉토리의 패스나 호스트명등의 다른 정보도 포함되어 있는 경우가 많습니다.
많은 Unix 및 파생 시스템에서 프롬프트는 일반적으로 다음과 같이 끝납니다.$
또는%
사용자가 일반 사용자이지만#
사용자가 슈퍼유저(유닉스 용어로는 루트)인 경우.
최종 사용자는 대부분의 경우 프롬프트를 변경할 수 있습니다.환경에 따라서는 색상, 특수 문자 및 기타 요소(현재 시간, 사용자, 셸 번호 또는 작업 디렉토리 등)를 포함할 수 있습니다.예를 들어 프롬프트를 보다 유익하거나 시각적으로 보기 좋게 하거나 다양한 머신의 세션을 구별하거나 현재 수준을 나타내기 위해서입니다.명령어를 네스트합니다.시스템에 따라서는 프롬프트 정의의 특수 토큰을 사용하여 프롬프트 표시 중에 명령줄 인터프리터에 의해 외부 프로그램이 호출될 수 있습니다.
DOS' 명령어COM 및 Windows NT의 cmd.exe에서 사용자는 다음 명령을 실행하여 프롬프트를 수정할 수 있습니다.PROMPT
명령 또는 대응하는 값을 직접 변경함으로써%PROMPT%
환경 변수입니다.대부분의 최신 시스템의 디폴트인C:\>
예를 들어, 문체는 다음과 같이 얻을 수 있다.PROMPT $P$G
오래된 DOS 시스템의 디폴트.C>
에 의해서 얻어진다.PROMPT
단, 일부 시스템에서는 새로운 것이 생성됩니다.C:\>
스타일(플로피 드라이브 A: 또는 B:;에서 사용되지 않는 한)PROMPT $N$G
를 사용하여 자동 기본값을 재정의하고 이전 스타일로 명시적으로 전환할 수 있습니다.
많은 Unix 시스템은$PS1
variable(Prompt String [11]1) 단, (사용하는 셸에 따라) 다른 변수도 프롬프트에 영향을 줄 수 있습니다.Bash 쉘에서 다음 형식의 프롬프트:
[time] user@host: work_host $
명령어를 발행하여 설정할 수 있습니다.
수출. PS1='[\t] \u@\'H: \W