https://www.44bits.io/ko/post/linux-and-mac-command-line-survival-guide-for-beginner

들어가며

리눅스나 맥 환경에서 프로그래밍이나 서버에 대해서 공부하기 시작하면 필연적으로 커맨드 라인 인터페이스를 활용하게 됩니다. 커맨드라인 인터페이스는 매우 강력한 환경이기도 하지만, 동시에 GUI에만 익숙한 경우 매우 생소한 작업 환경이기도 합니다. 하물며 커맨드라인 인터페이스는 당연한 듯이 시스템에 포함되어있고, 당연히 이 정도는 알고 있을 것이라고 가정하고 모든 이야기가 진행됩니다. 검색해보고 싶지만, 기호들이 섞여있어서 검색도 잘 안 됩니다. 😢 이런 건, 리눅스 서버 관리자만 알면 되는 거 아니냐고요? 아닙니다.

하지만 너무 걱정하시지는 말길 바랍니다. 처음하면 어려운 게 당연하니까요.

이 글에서는 커맨드라인을 처음 접하거나 익숙하지 않은 분들을 위해서, 커맨드라인에 대한 기초, 관습적으로 사용되는 표현이나 단축키, 그 외에 여러가지 팁들을 소개하고자합니다. 이 글에서는 리눅스 기초나 셸 스크립팅을 다루지 않습니다만, 필요하다면 약간의 설명을 해두었습니다. 부디 커맨드라인 위에서 살아남아 다시 만나기를 기원합니다. 🙏*

1. 커널, 셸, 그리고 터미널 프로그램이란?

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/05dbf081-04cb-4274-89fa-1c311ddb5e0e/65a2fddd862db0e033059b78ca0ac376b81707937f17a316af86366421a57545.m.png

커맨드라인 인터페이스에 대한 해설

먼저 커맨드라인에 뛰어들기에 앞서 핵심적인 개념들에 대해서 소개하고자합니다. 커맨드라인 인터페이스, 터미널, 셸 비슷비슷한 용어들이 혼용되어 사용되곤 합니다. 이 용어들에 대해 좀 더 정확히 구분을 해보는 것도 가능합니다. (사실 크게 구분하지 않아도 상관은 없습니다 😅)

먼저 커맨드라인 인터페이스는 오로지 문자열로만 이루어진 인터페이스를 의미합니다. 구체적인 실체가 없는 추상적인 단어로, 이 환경에서는 문자열을 출력하거나 문자열을 입력하는 것만이 가능합니다. 정말로 문자열만 사용 가능합니다. 요즘 컴퓨터에서 가장 기본이 되는 컬러풀한 고해상도 이미지 파일을 출력하는 건 불가능합니다.

터미널은 커맨드라인 인터페이스가 물리적으로 구현된 기계입니다. 리눅스나 맥에서 제공되는 터미널 애플리케이션은 정확히는 가상 터미널 기계입니다. 이 기계는 오직 문자열을 출력하고, 문자열만 입력받을 수 있습니다. 커맨드라인 인터페이스가 개념이라면, 터미널은 커맨드라인 인터페이스를 사용하는(혹은 구현하는) 물리적/가상적 기계라고 할 수 있습니다. 가상 터미널도 여러가지 프로그램이 있습니다. 맥OSmacOS의 경우 기본 프로그램은 터미널이지만, 개발자들은 다양한 기능을 제공하는 iTerm2를 더 선호하는 편입니다.

은 커맨드라인 인터페이스로 구현된 터미널에서 실행가능한 대화형 프로그램입니다. “컴퓨터를 사용한다”는 것은 좀 더 정확히 표현하면 어떤 입력을 처리하기 위해 프로그램에서 운영체제 커널에 명령을 보내고 커널에서는 물리적 컴퓨터 장비의 연산 능력을 사용해 계산한 결과를 다시 출력해주는 일련의 과정입니다. 셸은 커맨드라인 인터페이스로 운영체제 커널에 명령을 내릴 수 있는 인터렉티브 프로그램입니다.

셸은 REPL이라고도 이야기됩니다. REPL은 Read-eval-print loop의 줄임말로 셸이 동작하는 방식에 대해서 잘 드러내줍니다. 먼저 사용자가 한 줄의 명령어(텍스트)를 입력하고 엔터를 누르면, 이 내용을 셸이 읽어들입니다(read). 그리고 명령어를 해석해서 실행하고(eval), 실행된 결과를 출력(print)합니다. 셸은 이 과정을 반복(loop)합니다. 셸 위에서 사용자가 할 일은 “명령어”를 입력하는 것밖에 없습니다. 아직 어색할지도 모르지만, 생각보다 간단하죠?

가상 터미널을 실행하면 일반적으로 셸이 바로 실행됩니다. 이 환경은 커맨드라인 인터페이스입니다. 커맨드라인 인터페이스, 터미널, 셸은 구분이 되는 단어입니다만, 실제로는 이러한 이유로 구분없이 사용하는 경우가 더 많습니다. 이 글에서는 편의상 셸이라는 단어를 주로 사용하겠습니다.

커맨드라인 인터페이스, 셸, 터미널에 대한 더 자세한 내용은 다음 글을 참고해주세요.

노트

앱, 애플리케이션, 프로그램은 사실 상 같은 의미로 사용됩니다. 편의상 이 글에서는 GUI의 경우 애플리케이션, CLI의 경우 프로그램이라는 단어를 선호하고 있지만, 아주 엄밀하게 구분하는 것은 아닙니다. 이러한 프로그램이 시스템상에서 실행중인 경우 프로세스라고 부릅니다. GUI 애플리케이션은 실행과 종료가 사용자에 의해서 명시적인 액션으로 이루어지지만, CLI 프로그램들은 프로세스가 실행되고 할 일을 마치자마자 종료되는 경우가 많습니다. 하지만 사용자 입력이나 외부 요청을 처리하기 위해 장시간 프로세스로 실행되어있는 경우도 있습니다.