CLI (Command Line Interface)
사용자가 명령어를 입력하거나 결과를 출력받을 때 텍스트를 이용하는 컴퓨팅 인터페이스이다. 애플리케이션 인터페이스 방식 중 하나이다.
셸 또는 nano
와 같은 텍스트 에디터에서 이러한 방식을 사용한다.
엄밀히 텍스트 에디터는 문자 사용자 인터페이스(Character User Interface, CUI)를 사용한다.
입출력이 가능한 물리 장비, 나아가 운영체제 커널과 연결되는 하드웨어 장비를 말한다. 다만 이는 과거 정의에 가깝고 현재 시점에서는 하드웨어를 지칭하는 단어로는 거의 사용되지 않는다.
리눅스나 맥 OS에는 터미널이라는 애플리케이션이 기본적으로 제공된다. 이 터미널은 하드웨어를 소프트웨어로 구현한 애플리케이션이다. 그래서 터미널이라고 하지만, 정확한 표현은 가상 터미널 또는 터미널 에뮬레이터이다.
입출력이 가능한 가상 터미널과 OS 커널을 연결해, 컴퓨팅(연산 작업)을 수행할 수 있다. 대부분의 리눅스, 맥 OS, 윈도의 터미널 애플리케이션은 문자열 입출력만이 가능하다.
맥OS 터미널에서 tty
명령어를 실행하면 아래와 같이 커널과 연결된 현재 가상 터미널 장치 이름이 출력된다.
사용자의 명령어를 해석하고 해석한 내용을 운영체제 커널에 전달하는 소프트웨어이다. 윈도우의 cmd, Powershell, 유닉스/리눅스의 bash 등이 이에 해당하며, CLI로 구현, 작동된다.
터미널을 통해서 커맨드라인 인터페이스로 구현된 프로그램들을 직접 실행할 수 있다. 하지만, 대부분 기본적으로 셸(bash)이 실행되도록 설정되어 있다.
기본적으로 셸은 다른 커맨드라인 프로그램들을 실행하는 용도로 사용된다. 물론 셸의 내장 기능을 활용하거나 셸로 복잡한 스크립팅을 할 수도 있다.
REPL, read-eval-print loop
bash
셸은 리눅스 환경에서 표준이다. bash
는 원래 본 셸을 대체하기 위한 GNU 프로젝트로 브라이언 폭스에 의해 처음 개발되었고, 1989년에 첫 버전이 공개되었다.리눅스 서버 환경에서는 일반적으로 GUI가 아닌 CLI 환경을 사용한다. 서버 컴퓨터에는 가상 터미널이 기본적으로 할당되어 있어서 컴퓨터에 모니터와 키보드를 연결하고 로그인을 하면 셸이 실행된다.
이렇게 서버 컴퓨터에 직접 입출력 장치를 연결하기도 하지만, 보다 일반적인 방법은 SSH Server를 사용하는 것이다.
네트워크를 통해 다른 컴퓨터에 접근하거나 그 컴퓨터에서 명령 실행 등을 할 수 있도록 해주는 응용 프로그램 또는 프로토콜을 의미한다.
기존의 유닉스 시스템 셸에 원격 접속하기 위해 사용하던 텔넷(Telnet)은 암호화가 이루어지지 않아 계정 정보 탈취 위험이 높았다. 이에 암호화 기능을 추가하여 나온 프로토콜이다.
Refs.
리눅스 서버의 경우, 외부에서 접속이 가능하도록 SSH Server를 등록해두는 것이 일반적이다. ID/Password나 SSH 키를 발급해서 인터넷이나 내부망으로 연결된 다른 컴퓨터에서 서버 컴퓨터에 접속하는 것이 가능하다. 이때 외부 컴퓨터에서는 전용 SSH 클라이언트(putty
등)를 사용하거나 가상 터미널 애플리케이션에서 ssh
명령어로 서버 컴퓨터에 접속한다.
ssh
로 원격 장치에 접속할 때는 원격 장치에 pty(pseudo tty)
가 생성된다. 즉, 의사 터미널 장치인 pty
장치에 bash
와 같은 셸을 실행시키고 SSH를 통해서 원격 장치의 입력을 전달하거나, 실행된 결과(pty
에 출력되는 내용)를 SSH 클라이언트 쪽에 다시 전달하는 방식으로 동작한다.