그동안의 나는 GUI(Graphical User Interface)에 익숙한 삶을 살았다.
오늘은 그 너머의 숨어 있는 TerminalCLI(Command Line Interface)의 세계를 직접 다루고,
이를 통해 컴퓨터가 “어떻게 명령을 처리하는지” 이해한 내용을 정리해 보려 한다.

GUI는 편리하지만, 컴퓨터의 내부 흐름을 가장 정확하게 보여주는 것은 CLI다.
CLI를 제대로 이해해야, “컴퓨터가 무엇을 하고 있는지”, “프로그램이 어떤 방식으로 실행되는지”가
훨씬 투명하게 다가올 것이다.


📌 Terminal은 무엇이고, CLI란 무엇인가?

🚉 Terminal

[출처: 위키피디아_터미널]

사용자가 컴퓨터에 명령을 입력하는 인터페이스(창)을 의미한다.
과거에는 하드웨어 기기였지만,
현재는 Windows의 PowerShell, macOS의 터미널과 같이
CLI를 통해 OS와 상호작용할 수 있는 소프트웨어를 의미한다.
단순 '창'일 뿐이고, 실제 명령 처리는 Shell이 수행한다.

🐚 Shell

[출처: 위키피디아_셸]

명령을 입력하면 이를 해석하고 실행해주는 프로그램이다.
사용자가 입력한 명령어를 해석운영체제(정확히는 커널)가 이해할 수 있도록 하며,
운영체제의 종류에 따른 Shell의 종류는 아래와 같다.

< 운영체제별 Shell 종류 및 작동 방식 정리 >

🍎 macOS — 유닉스 기반 시스템
✔ 기본 Shell

  • zsh (Z Shell) — macOS Catalina(10.15)부터 기본
  • 기존 기본 셸: bash (Catalina 이전)

✔ 특징

  • macOS는 UNIX 인증 OS라 기본적으로 유닉스 셸을 사용
  • Linux와 명령어 대부분이 동일
  • 개발자에게 가장 친숙한 환경
  • PATH, 환경 변수, 권한 구조가 리눅스와 거의 동일

✔ 작동 방식

  • 사용자가 터미널에 명령 입력
    → zsh/bash가 이를 해석
    → macOS 커널(XNU)에게 시스템 호출(System Call) 전달
    → OS가 하드웨어와 상호작용하여 결과 반환
    → 셸이 최종 출력을 화면에 표시

즉, 명령 → 셸 해석 → 커널 전달 → 처리 → 셸 출력

✔ 실행 방법

  • Command+Space를 눌러 Spotlight 검색 창을 열고 "터미널"을 검색하여 실행
  • 또는 애플 메뉴 or Finder에서 응용 프로그램 → 유틸리티 → 터미널로 이동하여 실행

[캡쳐 1-1. macOS에서의 터미널 실행 화면]

🐧 Linux — 유닉스 계열 대표 OS
✔ 기본 Shell

  • bash (Bourne Again Shell) — 가장 널리 쓰이는 기본 셸
  • zsh — 사용자 커스터마이징에 강함
  • dash — Ubuntu의 시스템 스크립트용 기본(shell script 최적화)

✔ 특징

  • 셸의 세계 표준처럼 사용되는 환경
  • 텍스트 기반 작업·서버·배포 자동화에 최적
  • 패키지 설치·환경 구성·서비스 관리 등이 CLI 중심

✔ 작동 방식

  • macOS와 거의 동일 (둘 다 UNIX 계열)

명령 → 셸에서 파싱 → 시스템 호출 → 커널(Linux kernel) → 실행

✔ 실행 방법

  • Ctrl+Alt+T를 눌러 터미널을 바로 실행할 수 있음
  • 또는 응용 프로그램 메뉴에서 터미널을 검색하여 실행 가능

🪟 Windows — 전통적으로 비유닉스 OS
Windows는 오래전부터 UNIX의 셸과 구조가 달랐기 때문에
셸 종류가 크게 두 가지로 구분된다.

(1) CMD (Command Prompt)
✔ 특징

  • Windows NT 계열의 가장 오래된 셸
  • 유닉스 명령어와 거의 호환되지 않음

✔ 실행 방법

  • Win+Rcmd를 입력하고 Enter를 누르면 실행 됨

(2) PowerShell (현대적 Windows Shell)
✔ 특징

  • Windows의 공식 차세대 셸
  • CMD보다 훨씬 강력
  • 객체 기반(Object-oriented shell)이라는 점이 큰 특징
    명령 결과가 “문자열(string)”이 아니라 “객체(Object)”
    → 파이프라인 처리 능력이 매우 뛰어남

✔ 실행 방법

  • 시작 메뉴 열기 → "PowerShell" 검색하여 실행

✔ Windows Shell 작동 방식

  • 명령 입력
    → PowerShell이 명령을 객체 단위로 해석
    → Windows 커널(NT kernel)로 작업 요청
    → 수행 결과를 다시 객체 형태로 반환

macOS/Linux는 “문자열 기반 파이프라인”,
PowerShell은 “객체 기반 파이프라인”이라는 차이가 존재한다.

🪟🐧 WSL(Windows Subsystem for Linux) — Windows 환경에서의 리눅스 셸
WSL은 Windows 안에서 실제 Linux 커널과 Linux Shell(bash/zsh)을 사용할 수 있게 한다.

✔ 왜 등장했나?

  • 개발자들이 리눅스 명령어를 Windows에서 그대로 쓰고 싶어했기 때문
  • 서버는 대부분 리눅스 → 개발 환경도 맞춰야 했음

✔ 특징

  • Windows + Linux 를 “동시에” 사용할 수 있음
  • bash, zsh 등 리눅스 셸을 그대로 사용할 수 있음
  • PATH, 패키지 설치, 파일 권한 등도 리눅스처럼 작동

✔ 실행 방법

  • Windows 스토어에서 WSL(Linux 배포판)을 설치한 후, WSL 실행 가능
  • 설치 후 cmd 또는 PowerShell에서 wsl 명령을 입력하여 접속

📝 CLI(Command Line Interface)

[출처: 위키피디아_명령줄 인터페이스]

명령어 기반 인터페이스 전체를 지칭하는 개념.
GUI와 달리 “문자 기반” 명령으로 컴퓨터를 조작한다.

비유하자면,
“GUI는 버튼식 자동판매기", "CLI는 직접 조작하는 제조 기계”

GUI는 버튼만 누르면 결과가 나오지만,
CLI는 내가 직접 명령을 입력해 기계를 조작하는 방식이다.

CLI는 컴퓨터 내부 구조를 이해하는 데 필수이고
자동화, 서버, 백엔드, 데이터 분야에서는 기본 언어이며
작업 효율을 극대화하는 도구다.


터미널 기초 명령어 연습해보기

📁 파일 및 디렉토리 관리

(1) 디렉토리 내 파일 목록 보기 - 디렉토리 내 파일과 폴더 목록을 표시할 때 사용

  • ls 또는 ls -l(상세 정보 표시)를 입력하여 실행

[캡쳐 2-1. 파일 목록 보기 명령어 연습]

(2) 디렉토리 생성

  • mkdir (생성하고자 하는 디렉토리 이름)

(3) 디렉토리 이동

  • cd입력 후 한 칸을 띄우고 /경로를 정확히 입력해야 실행된다

[캡쳐 2-2. 디렉토리 생성 및 이동 명령어 연습]

(4) 파일 생성

  • echo (담을 내용) > (만들 파일명).txt

[캡쳐 2-3. 파일 생성 문제 해결]

(5) 파일 복사

  • cp (복사할 파일명) (복사후 파일명)

[캡쳐 2-4. 파일 복사 명령어 연습]

(6) 파일 및 디렉토리 삭제

  • rm (파일명)
  • 디렉토리를 삭제할 때rm -r을 사용하여 재귀적으로 삭제해야 함!

[캡쳐 2-5. 파일 및 디렉토리 삭제 명령어 연습]

👀 파일 내용 보기 및 텍스트 처리

(1) 파일 내용 출력 - 파일의 내용을 터미널에 출력

  • cat (파일명)

(2) 텍스트 출력 - 화면에 문자열을 출력하는 데 사용

  • echo (문자열)

[캡쳐 2-6. 파일 내용 출력 및 텍스트 출력 명령어 연습]

🔍 디렉토리 및 파일 정보

(1) 현재 작업 디렉토리 표시 - 현재 디렉토리의 경로를 출력하는 데 사용

  • pwd

[캡쳐 2-7. 경로가 정상적으로 출력된 모습]

(2) 터미널 화면 지우기 - 화면을 깨끗하게 초기화하기 위해 사용

  • clear

추가적으로 다른 명령어를 연습해보기 전에 기본적인 CS 개념을 간략하게 정리하고 넘어가려 한다.
(내가 이해한 내용을 바탕으로 OS를 국가 정부로 빗대어 설명해보겠다.)

CS 이론 정리: “국가 모델”로 이해하는 컴퓨터 구조

🌎 컴퓨터(Hardware) = ‘국가 전체’
물리적 부품(메모리, 저장장치, CPU, 메인보드 등)
모두 이 나라를 구성하는 인프라에 해당한다.

컴퓨터가 존재해야 OS가 입주하고, 프로그램이 실행될 수 있다.

🏛️ 운영체제(OS) = ‘정부’
정부가 나라를 운영하듯,
OS는 컴퓨터 자원을 관리하고 프로그램이 잘 실행되도록 중재한다.

✔ OS가 하는 일

  • 프로그램 실행 스케줄링
  • 메모리 배분
  • 파일 시스템 관리
  • 경로 관리(PATH)
  • 하드웨어와 소프트웨어 연결

MacOS, Windows, Linux가 각각 독립된 ‘정부 체제’라고 보면 된다.
다만, 환경의 특수성에 따른 호환 문제를 설명하기 위해

🍎 macOS (애플 행성)

  • 독자적인 행성
  • 자체 생태계
  • 자체 종족(Apple Silicon)
  • 해당 땅에서만 정부 출범 가능
  • 외부 행성(PC)에서는 정부 출범 자체가 불가능

🪟 Windows (범용 정부)

  • 대부분의 영토에서 출범 가능
  • 영토를 가리지 않는 범용 정부
  • 하지만 애플 행성에는 입국 금지

🐧 Linux (자유 정부)

  • 어떤 행성에서도 정부를 세울 수 있음
  • 심지어 애플 행성에서도 가능
  • 정부 형태가 지역마다 달라짐 (배포판)
  • 가장 개방적이고 확장성 높은 체계

이와 같이 행성에 빗대어 이해하였다.

🧠 커널(Kernel) = ‘정부의 핵심 관료 조직’
정부가 모든 일을 직접 하지 않고 핵심 부처가 실무를 맡듯,
커널은 OS의 핵심 기능을 직접 수행하는 ‘최핵심 실행 조직’이다.

✔ 커널이 하는 일

  • 프로세스 관리
  • 메모리 관리
  • 하드웨어 접근 제어
  • 파일 시스템 운영

💾 RAM(Random Access Memory) = ‘관료가 업무를 수행할 수 있는 건물’
프로그램이 실제로 작업할 수 있는 활동 공간.
전원이 꺼지면 내용이 사라지는 휘발성의 특성을 가진다.
건물이 클수록 더 많은 프로그램이 동시에 실행 가능.
프로세스가 실행되기 위해서는 반드시 RAM 위에 올라와야 한다.

📚 ROM / Firmware = ‘정부 출범 전 기본 규약(헌법 초안)’
ROM(Read-Only Memory)변경 불가 저장공간(읽기 전용 메모리)이며,
컴퓨터가 부팅될 때 가장 먼저 실행되는 펌웨어(BIOS/UEFI)가 위치한다.

이것은 “공식 정부가 출범하기 전에 반드시 존재해야 하는 최소 규칙”이라 볼 수 있다.

🏢 SSD/HDD = ‘국가 기록 보관소’
모든 프로그램, 문서, 파일이 저장되는 장소.
전원이 꺼져도 내용이 유지된다(비휘발성).

👷🏻‍♀️ CPU = ‘공무원(업무 처리자)’
프로그램의 실제 연산을 수행하는 실행 조직.
공무원이 많을수록(코어 수 ↑) 병렬 작업이 강하고,
공무원의 처리 속도가 높을수록(클럭 ↑) 프로그램 실행이 빨라진다.

📖 프로그램(Program) = ‘규정집 / TF팀 매뉴얼’
기록 보관소(SSD/HDD)에 저장된 ‘실행 계획서’.
아직 나라에서 실행되고 있지 않은 상태.

⚙️ 프로세스(Process) = ‘실제로 일하는 TF팀’
프로그램이 실행되어 RAM + CPU를 부여받은 상태.
하나의 프로그램이 여러 프로세스로 실행될 수도 있다(여러 TF팀).
RAM을 공간으로 사용하며 CPU를 통해 일을 처리한다.

🧭 PATH = ‘기록 보관소의 서가 번호’
OS가 프로그램을 실행할 때 어디에 있는지 찾기 위한 주소 목록.
PATH가 올바르게 설정되지 않으면
프로그램이 존재해도 OS가 “어디에 있는지 몰라서” 실행할 수 없다.

이렇게 CS 기초 개념을 정리한 것은 프로그램과 프로세스의 차이,
PATH가 왜 중요한지를 이해해야 하기 때문이다.
그럼 이제 추가적으로 학습한 명령어들을 정리해보도록 하겠다.


추가 명령어 연습해보기

🔍 프로세스 및 시스템 정보

(1) 실행 중인 프로세스 목록 보기 - 현재 실행 중인 프로세스를 확인하는 데 사용

  • PS - 현재 터미널과 연관된 프로세스 보기
  • ps -ax - 모든 실행중인 프로세스 보기
    • -a: 다른 사용자의 프로세스를 포함하여 모든 사용자 프로세스 표시
    • -x: 제어 터미널이 없는 프로세스도 포함하여 표시
  • ps aux - 모든 프로세스 상세 정보 보기(USER, PID, %CPU, %MEM 등 자세한 정보 출력)
  • PS -u (사용자 이름) - 특정 사용자 프로세스 보기
  • ps aux | grep (검색어) - 특정 프로세스 검색
    (검색어)부분에 Chrome을 넣으면 크롬 관련 프로세스 검색
  • ps -axj - 프로세스 계층 구조 트리 형태로 보기
    PPID(부모 프로세스 ID)를 포함하여 프로세스 간의 관계를 파악하는 데 유용

(2) 프로세스 종료 - 특정 프로세스를 종료할 때 사용된다

  • kill PID or kill -15 PID (종료하고자 하는 프로세스의 ID를 입력하면 된다)

[캡쳐 3-1. 프로세스 목록 보기 결과 및 kill 명령어 수행 결과]

[출처: 특정 프로세스 종료하기, kill -9 주의점]

🌐 네트워크 작업

네트워크 연결 테스트 - 두 쉘에서 네트워크 연결을 확인하기 위해 사용해 사용

  • ping google.com
    기본적으로 ping명령어는 사용자가 Ctrl+C를 누르기 전까지
    계속해서 패킷을 보내고 응답을 받는다.
  • ping -c (횟수) google.com
    (횟수)만큼만 진행

🚀 환경 변수

(1) 시스템 경로 확인 - 경로 변수를 출력할 때 사용

  • bash: echo $PATH
  • PowerShell: $Env:PATH

(2) 환경 변수 설정 - export

  • 환경변수 설정 이유:
    깊은 경로의 디렉토리로 이동할 때마다 모든 경로를 일일이 전부 다 입력해야한다면,
    얼마나 시간도 오래 걸리고 비효율적인가(심지어 오타 하나도 치명적이다.)
    이럴 때 cd $(원하는 이름)만 입력해서 한번에 이동할 수 있다면
    업무 효율을 극대화할 수 있을 것이다.

[캡쳐 3-2. 시스템 경로 확인 및 환경 변수 설정 연습]


오늘 배운 내용을 종합해서 수행한 과제 결과를 끝으로 오늘의 일기를 마무리한다.

[캡쳐 4-1. 폴더 생성 + 텍스트 파일 생성 및 복사 + 파일 내용 출력]


[참고한 사이트 목록]

profile
R&D 분야의 경험을 토대로 커리어 확장에 도전중인 개발꿈나무입니다.

0개의 댓글