📌 Chapter1 - Command-Line Interface
✅ Command-Line Interface 개요
컴퓨터를 조작하기 위해서는 다양한 입력(Input)이 필요합니다. 이 화면을 보기 위해 마우스를 사용하고, 메시지를 입력하기 위해 키보드를 사용합니다. 입력을 담당하는 키보드나 마우스를 입력 소스(Input source)라고 합니다. 키보드나 마우스 외에도 카메라나 마이크 등 컴퓨터에 새로운 명령을 전달하는 모든 소스가 입력 소스입니다.
반대로, 입력 소스에 의해 또는 작성된 프로그램에 의해 모니터에 화면을 나타내거나, 음악을 재생하면 소리를 스피커로 전달하여 사용자가 인식할 수 있도록 하는 일을 출력(Output)이라고 합니다. 시각적 출력을 담당하는 모니터나 청각적 출력을 담당하는 스피커를 출력 소스(Output source)라고 합니다. 모니터나 스피커 외에도 스마트 홈을 연결하여 전등이나 공기청정기를 조작하는 경우, 전등이나 공기청정기도 출력 소스가 될 수 있습니다.
컴퓨터를 조작하기 위한 입력과 출력을 간단하게 I/O(Input/Output)라고 표기하며, "아이오"라고 읽습니다.
리눅스의 터미널은 키보드의 입력과 모니터의 출력으로 모든 작업을 할 수 있습니다. 리눅스 터미널은 GUI가 개발되기 이전부터 컴퓨터를 조작하기 위해 사용되었기 때문에, GUI가 할 수 있는 모든 작업은 CLI로 할 수 있습니다. 다만 사람이 키보드로 입력하면, 모니터에 글자로 출력하기 때문에 GUI에 익숙해진 현대인에게 낯설게 느껴질 뿐입니다.
GUI가 PC(Personal Computer, 개인 컴퓨터) 시장을 지배하게 되었지만, CLI는 여전히 여러 가지 측면에서 유리합니다. 대표적으로 아마존 웹 서비스(AWS, Amazon Web Service)의 클라우드 컴퓨팅처럼, 대량의 서버 컴퓨터를 설치해야 하는 서비스를 잠시 살펴보겠습니다. AWS는 4천 평이 넘는 규모의 데이터 센터를 29개 이상 가지고 있고, 계속해서 확장하고 있습니다. 하나의 데이터 센터에는 최소 5만 개 이상의 서버 컴퓨터가 설치됩니다. 이렇게 수많은 컴퓨터에 GUI를 적용하기 위해 서버 컴퓨터마다 I/O 소스(키보드, 마우스, 모니터 등)를 부착하는 일은 불가능에 가깝습니다.
AWS 이전부터 서버 컴퓨터를 대여하는 일은 존재했습니다. AWS 이전 세대의 선배 개발자들은 GUI가 없는 서버 컴퓨터를 어떻게 다룰 수 있었을까요? CLI를 이용해 서버 컴퓨터로 접속을 요청하면, 서버 컴퓨터는 요청한 컴퓨터의 출력 소스(모니터)를 이용합니다. 선배 개발자들은 서버 컴퓨터에 직접 찾아갈 필요 없이, 자신의 모니터로 서버 컴퓨터와 소통했습니다. 이 방법은 매우 효율적이어서, 지금도 수많은 현직 개발자가 이 방법을 통해 서버 컴퓨터와 소통합니다. 그리고 대부분의 서버 컴퓨터는 무료로 이용할 수 있는 Linux 운영체제가 설치되어 있습니다. Linux 환경에서 CLI를 이용하는 방법은 개발자가 되기를 원하는 사람이라면, 반드시 학습해야 합니다.
📌 Chapter1-1 . CLI 명령어(1)
✅ 기본적인 명령어(1)
🌈 터미널 실행하는 방법
💻 macOS(Apple)
- 런치패드(Launchpad)를 이용해 터미널을 실행하는 방법
- 하단의 독(dock, 설정에 따라 화면의 모서리 중 다른 곳에 위치할 수 있음)에서 런치패드를 클릭합니다.
- 런치패드가 열리면, 상단의 검색창에 Terminal을 입력하고 Enter(엔터 키)를 누르거나, 화면에 나타난 프로그램을 클릭합니다.
- 런치패드를 좌, 우로 넘기면서 Terminal 프로그램을 찾아 실행할 수도 있습니다.
- 스포트라이트(Spotlight search)를 이용해 터미널을 실행하는 방법
- 모니터 화면 최상단의 상태 바에서 돋보기 모양을 클릭하여 스포트라이트를 실행합니다.
- 단축키: command(커맨드 키, ⌘) + Space(스페이스 키)
- Terminal을 입력하고 Enter(엔터 키)를 누르거나, 화면에 나타난 프로그램을 클릭합니다.
- 모니터 화면 최상단의 상태 바에서 돋보기 모양을 클릭하여 스포트라이트를 실행합니다.
✅ 프롬프트(Prompt)
축하합니다! 여러분은 이제, 개발자가 사용하는 검은 화면이 터미널이라는 것을 알았습니다. 심지어 실행까지 해냈습니다.
* 터미널은 CLI(Command-Line Interface)입니다. 입력하는 글자와 출력되는 글자로 컴퓨터와 소통할 수 있습니다. 컴퓨터가 출력하는 글자를 읽을 수 있어야 합니다. 무슨 뜻인지 모르더라도, 일단 읽어야 다음 스텝이 가능합니다. 반드시 기억하고, 읽으세요.키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간을 프롬프트(Prompt)라고 합니다.
⭐️ pwd: 현재 위치 확인하기
GUI(Graphical User Interface)의 대표주자 윈도우즈에서 폴더에 파일을 집어넣고 관리할 때, 탐색기를 열어 바탕화면 폴더나 다운로드 폴더를 열어본 경험이 있을 겁니다. 탐색기를 통해 특정 폴더로 이동했을 때, 탐색기 상단에 위치한 현재 폴더의 이름을 클릭하면 현재 폴더가 위치한 경로가 나타납니다. GUI에서는 "현재 폴더가 위치한 경로"를 확인하기 위해 탐색기의 상단을 클릭해서 확인합니다.
CLI인 터미널에서는 간단하게 pwd를 프롬프트에 입력하고, Enter(엔터 키)를 누르면 현재 경로가 나타납니다.
터미널의 프롬프트에 pwd를 입력하고 Enter(엔터 키)를 누르면 현재 위치를 확인할 수 있습니다.
pwd는 print working directory의 약자입니다. 여기서 말하는 디렉토리(directory)는 폴더라고 합니다. CLI에서 폴더를 열거나 닫으면서 이동하면, 현재 위치가 헷갈릴 수 있습니다. 이때 명령어 pwd를 입력하고 Enter(엔터 키)를 누르면, 컴퓨터는 현재 작업 중인 폴더의 위치를 출력합니다.
* 터미널의 색깔이나 모양은 개성에 맞게 변경할 수 있습니다. 환경에 따라 설정 방법이 다르기 때문에 별도로 안내하지 않습니다. 어떤 모양이더라도, 터미널의 역할과 기능은 동일합니다.
⭐️ mkdir: 새로운 폴더 생성하기
CLI에서 폴더를 생성하기 위해 사용하는 명령어인 mkdir은 make directories의 약자로, 폴더를 만들라는 명령을 컴퓨터에 전달합니다. 명령어 mkdir은 생성할 폴더의 이름을 함께 입력해야 합니다. CLI에서는 명령어와 폴더의 이름을 Space(스페이스 키)로 구분합니다. 아래의 명령어를 프롬프트에 입력해 보세요.
mkdir helloWorld
프롬프트에 정상적으로 명령어를 입력했다면, 별다른 출력 없이 폴더가 생성됩니다. 생성된 폴더를 확인하기 위해서는, 현재 폴더에 포함된 파일이나 폴더의 이름을 출력하는 명령어가 필요합니다. 바로 이어서 설명하는 ls를 프롬프트에 입력하고, Enter(엔터 키)를 눌러보세요.
⭐️ ls: 특정 폴더에 포함된 파일이나 폴더 확인하기
명령어 ls는 list의 약자로, 특정 폴더에 포함된 파일이나 하위 폴더의 리스트를 출력합니다. 명령어 ls를 이용해 명령어 mkdir을 통해 생성한 폴더 "helloWorld"를 확인하세요.
ls
명령어 ls 를 입력하면 , 명령어 mkdir을 이용해 생성한 폴더 "helloWorld"를 확인할 수 있다.
명령어 ls 에는 자주 사용하는 옵션 l 과 a 가 있습니다. CLI에서 특정 명령어의 옵션을 사용하는 경우에는 - 를 이용해 옵션을 입력했다고 컴퓨터에 전달합니다. 다음과 같이 옵션을 사용해 보세요.
- ls -l
- ls -a
- ls -al 또는 ls -la
* 위의 세 번째 예시에서, 옵션을 뜻하는 대쉬(dash, - ) 뒤에 오는 옵션의 순서는 기능에 영향을 미치지 않습니다.
명령어 ls의 옵션 a 는 "all"이라는 의미입니다. 숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력합니다. 화면에 출력되는 .이나 ..폴더는 이번 유닛에서 설명하는 내용입니다. 지금은 명령어만 설명하도록 하겠습니다.
옵션 a와 함께, 자주 사용하는 옵션 l 은 폴더나 파일의 포맷을 전부 표현하라는 의미입니다. 다음의 그림처럼, 하나의 파일 또는 하나의 폴더는 한 줄에 출력됩니다. 출력되는 폴더나 파일의 포맷 중에서 가장 먼저 등장하는 d 또는 -로 시작하는 부분을 잠시 살펴보겠습니다. 지금은 가장 첫 글자인 d와 - 만 살펴봅니다.
# '#' 기호는 설명을 위해 사용되었습니다.
drwxr-xr-x # 생략
-rw-r--r-- # 생략
[출력] 명령어 ls에 옵션 l을 함께 사용한 경우 확인할 수 있는 포맷
명령어 ls 와 함께 옵션 l 을 사용하면, 가장 왼쪽에 출력되는 두 글자 d 와 - 를 확인할 수 있습니다. 여기서 d 로 출력된 경우는 폴더를, - 로 출력된 경우는 파일을 나타냅니다. 폴더는 다음 명령어 cd 를 통해 진입할 수 있지만, 파일이라면 진입할 수 없습니다.
⭐️ open . : 명령어를 이용해 폴더를 GUI의 탐색기로 실행하기
여러분이 컴퓨터를 켜고, 모니터에 GUI가 나타나면 가장 먼저 만나는 화면은 바탕화면입니다. 바탕화면이 하나의 폴더인 걸 알고 있나요? 터미널에서 아래의 명령어를 입력하세요. 여기서 사용하는 명령어는 운영체제에 기본적으로 탑재된 명령어입니다. 터미널의 현재 위치를 GUI의 탐색기(파인더)로 열 수 있습니다.
💻 macOS
open .
[커맨드] macOS에서 현재 위치를 GUI로 실행하는 명령어 open .
⭐️ cd: 폴더에 진입하기
명령어 mkdir을 통해 생성한 폴더 "helloWorld"에 진입하기 위해 GUI에서는 마우스를 사용합니다. 폴더 위에 마우스를 올려놓고 더블클릭하거나, 클릭을 한 번만 하고 Enter(엔터 키)를 눌러 폴더에 진입할 수 있습니다. GUI의 탐색기에서 폴더 "helloWorld"로 진입하세요.
* 다음 내용은 터미널창에서 계속 진행합니다.
명령어 cd는 change directory의 약자로, 프롬프트로 상호작용하는 폴더를 다른 폴더로 변경한다는 의미입니다. 명령어 pwd를 사용해 현재 위치를 확인하고, 명령어 ls를 이용해 helloWorld 폴더를 확인하세요. 그다음, 명령어 cd를 이용해 helloWorld 폴더로 진입합니다. 명령어 pwd를 이용해 현재 위치를 확인하면, 다음과 같습니다.
맨 아래줄을 보면 현재 helloWorld 폴더에 위치하고 있다는 것을 알 수 있습니다.
⭐️ touch: 파일 생성하기
파일(File)은 서류철이라는 뜻입니다. 컴퓨터나 스마트폰 등 전자기기에서 문서의 형태로 작성된 모든 것을 파일이라고 합니다. 그중에서 가장 쉽게 접할 수 있는 파일은 텍스트(text) 파일입니다. 이번에는 폴더 "helloWorld" 안에서, 텍스트 파일 "hi.txt"를 생성합니다.
파일을 만들기 위해 touch라는 명령어를 사용합니다. 아래의 명령어를 통해 빈 텍스트 파일 "hi.txt"를 생성하세요.
touch hi.txt
[커맨드] touch 명령어로 파일 hi를 생성합니다.
⭐️ GUI로 파일에 텍스트 입력하기
이 콘텐츠를 따라 터미널을 실행하고 순서대로 따라 했다면, 명령어 touch로 만든 파일 "hi.txt"를 GUI의 탐색기로 확인할 수 있습니다. 만약 GUI의 탐색기를 종료했다면, GUI의 탐색기를 실행하는 명령어를 프롬프트에 입력하세요.
이번에는 마우스를 이용해 탐색기 내의 파일 "hi.txt"를 실행하세요. 텍스트 편집기로 파일 "hi.txt"가 열려야 합니다. 텍스트 편집기에 키보드를 이용해 아무 내용이나 추가하세요. 저는 이메일을 입력하겠습니다.
이메일 입력을 마쳤다면, 저장하고 텍스트 편집기를 종료하세요.
⭐️ cat: 파일의 내용을 터미널에 출력하기
CLI으로 만든 폴더와 파일을 GUI로 동일하게 확인할 수 있었습니다. 이번에는 반대로, GUI에서 변경한 내용을 CLI에서 확인합니다. 텍스트 편집기로 작성한 이메일을 CLI에서 확인합니다. CLI에서는 간단한 명령어로 파일의 내용을 확인할 수 있습니다. 명령어 cat으로 GUI를 이용해 작성한 내용을 확인합니다. 아래의 내용을 프롬프트에 입력하고, Enter(엔터 키)를 누르세요.
명령어 cat으로 텍스트 파일 "hi.txt"를 출력하면, 방금 작성한 이메일이 터미널에 나타납니다. 명령어 cat은 파일의 내용을 터미널에 출력하는 명령어입니다. CLI(Command-Line Interface)는 텍스트를 기반으로 소통하기 때문에, GUI를 이용한 편집기가 실행되지 않습니다. GUI에서는 파일 "hi.txt"를 찾아 아이콘을 더블클릭하거나, 한 번 클릭하고 Enter(엔터 키)를 눌러 텍스트 편집기를 열어 파일의 내용을 확인할 수 있습니다. 그러나 CLI와 GUI가 편집하는 파일은 같은 파일입니다. GUI와 CLI는 하나의 컴퓨터를 동일하게 조작하지만, 보이는 모습에만 차이가 있습니다.
그러나 명령어 cat을 이용하여 터미널에 출력하면, 파일의 모든 내용을 출력합니다. 만약 원격 서버에 접속한 상태에서, 너무 큰 파일을 출력하면 어떻게 될까요? 원격 서버에 접속하는 일은 네트워크를 통해 이뤄지기 때문에, 원격으로 접속한 상태에서 큰 파일을 출력하는 일은 굉장히 비효율적입니다. 지금은 몰라도 되는 내용이지만, 나중에는 알아야 하는 내용이기도 합니다.
CLI를 통해 파일의 내용을 확인하는 명령어는 익혔습니다. 그렇다면 CLI에서 파일을 수정하려면 어떻게 해야 할까요? CLI에서 텍스트를 편집할 수 있도록, CLI 전용 텍스트 편집기가 있습니다. 이 유닛의 다른 챕터, 터미널 에디터 nano를 통해 학습합니다. 지금은 CLI의 기본 명령어부터 차근차근 학습하세요.