Step 18. 리눅스 기본 명령어 1 — 검은 창에서 길 찾기

Step 18. 리눅스 기본 명령어 1 — 검은 창에서 길 찾기

Level 0 — 컴퓨터 조작과 구조의 이해 | 난이도 ★★★☆☆ | 예상 소요 시간 3시간

전제: Step 17 완료. 오늘부터는 가상머신 속 우분투에서 작업합니다. VM을 켜고 터미널을 여세요.

  • 준비물: 우분투 가상머신(Step 17에서 설치), 터미널. 오늘의 암기 목표는 다섯 개뿐입니다 — pwd, ls, cd, mkdir, touch.
  • 주의: 오늘 실습은 VM 안이라 100% 안전합니다. 삭제 명령(rm)이 등장하는데, 대상은 우리가 직접 만든 연습 파일뿐입니다. ⚠️ rm에는 휴지통이 없으니, 챕터의 지시 대상 외에는 쓰지 마세요.
  • 실측 안내: 이 챕터의 출력은 Ubuntu 24.04에서 실제 실행한 결과입니다. 실측은 관리자(root) 계정의 홈(/root)에서 진행되어 경로에 /root가 보이지만, 여러분의 VirtualBox 우분투에서는 /home/사용자이름으로 보입니다. 그 차이 외에는 같습니다.

영화 속 해커들이 검은 창만 두드리는 이유를 아시나요? 과시가 아닙니다. 진짜 서버에는 그림 화면(바탕 화면)이 없는 경우가 대부분이기 때문입니다. 보안 실무자가 만나는 리눅스 — 공격 대상 서버, 분석 도구 상자, 클라우드 인스턴스 — 는 거의 전부 터미널(terminal, 명령줄)로 다룹니다. 오늘 그 첫 페이지, "길 찾기와 파일 만들기"를 배웁니다.


1. 학습 목표

이 챕터를 끝내면 다음을 할 수 있습니다:

  • 리눅스 파일시스템이 / 하나의 나무라는 것을 설명한다
  • pwd, ls -la, cd로 GUI 없이 위치를 파악하고 이동한다
  • mkdirtouch로 디렉토리와 파일을 만든다
  • rm에 휴지통이 없음을 알고, 삭제 전 확인 규칙을 지킨다
  • Tab 자동완성과 ↑ 키 명령 히스토리를 습관적으로 쓴다

2. 배경 지식 — 오늘의 도구와 개념

오늘의 도구 한눈에 보기

구분 내용
언어·환경 우분투 리눅스 터미널, 기본 셸 bash
오늘의 명령어 pwd(현재 위치), ls / ls -la(목록), cd(이동), mkdir / touch(만들기), rm / rmdir(삭제)
필요한 개념 루트(/), 홈 디렉토리(~), 절대 경로와 상대 경로, 숨김 파일, 대소문자 구분

2-1. 나무는 한 그루뿐 — /

윈도우는 드라이브가 여러 개입니다: C:\, D:\… 각각이 별도의 나무였죠. 리눅스는 다릅니다. 나무가 딱 한 그루이고, 그 뿌리가 /(슬래시 하나, 루트(root)라 읽습니다)입니다.

/                  ← 뿌리 (루트, root)
├── home           ← 사용자들의 집
│   └── lee        ← 내 집 (홈 디렉토리)
├── etc            ← 설정 파일들
├── var            ← 로그 등 변하는 데이터
├── tmp            ← 임시 파일
└── usr            ← 프로그램들

윈도우의 C:\Users\Lee가 리눅스에서는 /home/lee입니다. USB를 꽂아도, 다른 디스크를 달아도, 전부 이 한 나무 어딘가에 폴드처럼 붙습니다. "세상 모든 저장소가 한 나무"라는 점이 윈도우와의 큰 차이입니다.

2-2. 디렉토리 = 폴드

리눅스에서는 폴드를 디렉토리(directory)라 부릅니다. 같은 것입니다. 이 책에서는 앞으로 리눅스 이야기를 할 때 디렉토리라고 부르니, "폴드의 리눅스 이름"으로 이해하세요.

2-3. "모든 것은 파일" — 리눅스의 철학

리눅스의 유명한 설계 철학: "Everything is a file" — 모든 것은 파일이다.

  • 문서? 파일
  • 디렉토리? 목록이 적힌 특별한 파일
  • 하드디스크 장치? /dev 아래 파일로 표현
  • 실행 중인 프로세스 정보? /proc 아래 파일로 표현

왜 이렇게 만들었을까요? 다루는 방법을 통일하기 위해입니다. 읽기, 쓰기, 복사, 권한 부여 — 파일에 하던 모든 기술이 장치와 시스템 정보에도 그대로 통합니다. 지금은 한 줄만 기억하세요: 리눅스에서 뭔가를 찾을 때는 "그것도 파일이겠구나"로 시작하라.

2-4. 셸(shell) — 검은 창의 정체

터미널에 명령을 치면, 누가 받아서 실행할까요? 그 중간자가 셸(shell)입니다. 운영체제의 핵심(커널)을 껍데기처럼 감싸고, 우리의 명령을 번역해 전달하는 대화 상대입니다. 우분투의 기본 셸은 bash이고, 터미널 창은 그 셸과 대화하게 해 주는 창구입니다.

관계 정리: 터미널(창구) → 셸(통역사) → 커널(본체). 파워쉘이 윈도우의 셸이었듯, bash는 리눅스의 셸입니다. Step 7~9에서 배운 변수, 조건, 반복은 bash에도 그대로 있어서, 이 과정 후반에 셸 스크립트라는 이름으로 다시 만납니다.

2-5. 대소문자 구분 — 윈도우와의 결정적 차이

윈도우에서 File.txtfile.txt는 같은 파일 취급됩니다. 리눅스는 다릅니다 — 완전히 다른 두 파일로 취급합니다. Homehome도 다릅니다.

이 차이가 초보의 첫 장애물입니다: "분명 있는 파일인데 없다"는 오류의 9할이 대소문자입니다. 이 구분이 보안에도 등장합니다 — 윈도우에서는 통하던 파일명 속임수가 리눅스에서는 안 통하는 식으로, 두 세계의 차이가 공격·방어 기법의 차이로 이어집니다.


3. 따라 하기

터미널 여는 법: 우분투 바탕 화면 왼쪽 아래 "앱 보기"에서 Terminal 검색, 또는 Ctrl + Alt + T.

3-1. 나는 어디에? — pwd

터미널을 열고:

pwd
/root

(2026-09-09, Ubuntu 24.04 실측. 실측은 root 계정이라 /root가 나왔고, 여러분의 VM에서는 /home/사용자이름이 나옵니다.)

출력 읽는 법: print working directory — "지금 서 있는 곳"을 알려 줍니다. 터미널을 열면 기본적으로 내 집(홈 디렉토리)에 서 있습니다. 일반 사용자의 집은 /home/사용자이름, 관리자 root의 집은 예외적으로 /root입니다.

왜 하는가: 검은 창에는 지도가 없습니다. 길을 잃었다 싶을 때의 처방전이 pwd입니다. 앞으로 "지금 어디서 이 명령을 하는가"가 결과를 좌우하는 일이 많습니다 — 습관적으로 찍게 될 명령 1위입니다.

3-2. 주변 둘러보기 — ls와 ls -la

ls -la
total 28
drwx------  5 root root 4096 Sep  8 21:35 .
drwxr-xr-x 22 root root 4096 Sep  9 11:28 ..
-rw-r--r--  1 root root 3106 Apr 22  2024 .bashrc
drwx------  4 root root 4096 Sep  8 21:35 .cache
drwx------  2 root root 4096 Sep  8 21:35 .config
-rw-r--r--  1 root root    0 Sep  9 11:26 .motd_shown
-rw-r--r--  1 root root  161 Apr 22  2024 .profile
drwx------  2 root root 4096 Feb 10  2026 .ssh

(2026-09-09 실측. 여러분의 VM에서는 Desktop, Documents 같은 익숙한 폴드들도 함께 보입니다.)

출력 읽는 법:

  • -l은 긴 형식(권한, 주인, 크기, 날짜), -a숨김 파일까지 보기 (점 .으로 시작하는 파일이 숨김입니다)
  • 맨 앞 글자: d면 디렉토리, -면 파일
  • .은 "지금 여기", ..은 "한 단계 위" — 이 두 녀석은 곧바로 다음 절에서 씁니다
  • .bashrc, .profile 같은 숨김 파일들 — "사용자에게 평소엔 안 보이는 설정·기록"들입니다

왜 하는가: 숨김 파일의 존재는 보안과 바로 연결됩니다. 악성코드나 공격자가 흔적을 숨길 때 점으로 시작하는 파일을 애용합니다 — "ls만으로는 안 보이는" 곳이니까요. 오늘부터 ls -la를 기본값으로 쓰세요.

3-3. 이동 — cd 네 가지 걸음

cd /
ls
bin    dev  home  init  lib64       media  opt   root  sbin  srv  sys  usr
boot   etc  lib   lib32 lost+found  mnt    proc  run   snap  tmp  var

(2026-09-09 실측. 환경에 따라 일부 항목은 다를 수 있습니다.)

2-1절의 지도 그대로, home, etc, var가 보이죠. 이제 집으로 돌아옵니다:

cd ~
pwd
/root

네 가지 걸음 정리:

명령 의미
cd Documents 아래로 (상대 경로 — 지금 자리 기준)
cd .. 위로 한 칸 (.. = 부모 디렉토리)
cd ~ 내 집으로 (~ = 홈 디렉토리 약자)
cd / 뿌리로

절대 경로 vs 상대 경로: /home/lee/Documents처럼 뿌리부터 적는 게 절대 경로(absolute path), Documents처럼 지금 자리 기준으로 적는 게 상대 경로(relative path)입니다. 윈도우에서 배운 개념과 같고, 표기만 \에서 /로 바뀌었습니다.

3-4. 만들기 — mkdir과 touch

연습 공간을 만듭시다:

mkdir practice
cd practice
touch file1.txt file2.txt
ls -la
total 8
drwxr-xr-x 2 root root 4096 Sep  9 11:29 .
drwx------ 6 root root 4096 Sep  9 11:29 ..
-rw-r--r-- 1 root root    0 Sep  9 11:29 file1.txt
-rw-r--r-- 1 root root    0 Sep  9 11:29 file2.txt

(2026-09-09 실측.)

출력 읽는 법: mkdir은 디렉토리 생성, touch빈 파일 생성입니다. 크기가 0인 게 보이죠 — 아직 내용이 없는 깡통 파일입니다.

왜 touch인가: "일단 자리를 만든다"는 용도가 실전에서 의외로 많습니다 — 로그 파일 자리 만들기, 명령의 대상 만들기, 그리고 지금처럼 연습용으로.

3-5. 지우기 — rm과 주의사항

⚠️ 주의 — rm에는 휴지통이 없습니다. 지우는 순간 끝이고 복구 메뉴는 없습니다. 특히 rm -r(디렉토리째로 삭제)은 대상을 잘못 적으면 하위 전체가 날아갑니다. 오늘의 규칙: rm을 치기 전에는 항상 pwd와 ls로 "내가 어디서 무엇을 지우는지" 확인한다. VM이라서 망정이지, 이 습관이 없으면 언젠가 소중한 것을 날립니다.

rm file1.txt
ls
file2.txt

(2026-09-09 실측.)

지워졌습니다. 빈 디렉토리는 rmdir로 지우는데, 여기엔 재미있는 안전장치가 있습니다. 파일이 남아 있는 practice에 대고 해 보면:

cd ~
rmdir practice
rmdir: failed to remove 'practice': Directory not empty

(2026-09-09 실측. 한글 환경에서는 "디렉토리가 비어 있지 않습니다" 류의 한글 메시지가 뜰 수 있습니다.)

출력 읽는 법: "디렉토리가 비어 있지 않다"는 오류. rmdir빈 디렉토리만 지웁니다 — 실수로 내용물까지 날리는 사고를 막는 안전 설계입니다. 연습이 끝나면 안의 파일을 지운 뒤 rmdir하거나, 확인 후 rm -r practice로 정리하세요.

3-6. 손가락의 무기 — Tab 자동완성과 ↑ 키

오늘의 숨은 주인공 둘입니다.

  • Tab 자동완성: cd pra까지 치고 Tab을 눌러 보세요. practice가 완성됩니다. 겹치는 게 있으면 Tab 두 번으로 후보가 나옵니다. ① 오타를 원천 차단하고(자동완성이 되면 그 이름은 존재한다는 뜻) ② 속도가 몇 배 빨라집니다. 프로들이 빠른 이유는 타자가 아니라 Tab입니다.
  • ↑ 키: 위 화살표를 누르면 방금 친 명령이 돌아옵니다. 계속 누르면 그 전, 그 전전 명령까지. history 명령으로 전체 목록도 볼 수 있습니다. 그리고 이 역사는 전부 파일(.bash_history)에 기록됩니다 — 편의와 기록은 동전의 양면입니다(Step 20에서 이 파일을 검색합니다).

4. 미션과 연습문제

미션 — GUI 없이 구조 짓기

터미널만으로 다음 구조를 만드세요:

practice-lab/
├── recon/        (정찰 자료)
├── logs/         (로그 모음)
└── notes/        (메모)
    └── day1.txt

순서 힌트: mkdir practice-labcd practice-labmkdir recon logs notes (한 줄에 여러 개 가능!) → cd notestouch day1.txt.

검증: cd ~/practice-lab 다음 ls로 세 디렉토리가 보이고, ls notes로 day1.txt가 보이면 완성입니다. 다 했으면 cd ~rm -r practice-lab으로 철거까지 — 단, 지우기 전 ls로 확인!

왜 이게 보안과 관련되는가: 침해 조사나 공격 실습을 시작할 때 첫 행동이 "작업 디렉토리 만들기"입니다. 증거 폴드, 도구 폴드, 메모 폴드. 체계적인 사람만이 혼란 속에서 길을 잃지 않습니다.

연습문제

문제 1. 리눅스에서 /~는 각각 무엇을 가리키며, 일반 사용자 lee의 홈 디렉토리의 절대 경로는 무엇일까요?

문제 2. ls -la 출력의 맨 앞 글자가 d인 것과 -인 것의 차이는 무엇이며, -a 옵션을 붙였을 때 추가로 보이는 파일들의 공통점은 무엇일까요?

문제 3. 리눅스에서 Report.txt를 만들었는데 cat report.txt를 치니 "없다"고 나옵니다. 원인과 해결 습관을 말해 보세요.

문제 4. .bash_history 파일은 무엇을 담고 있으며, 이 파일이 왜 침해 조사의 단골 증거이자 공격자가 지우고 싶어하는 대상일까요?


5. 모범 답안과 완료 기준

미션 모범 답안

cd ~
mkdir practice-lab
cd practice-lab
mkdir recon logs notes
cd notes
touch day1.txt
cd ~/practice-lab
ls          # logs  notes  recon
ls notes    # day1.txt

철거(지우기 전 확인 습관 그대로):

cd ~
ls practice-lab      # 대상이 맞는지 확인
rm -r practice-lab

검증하는 법: ① ls 결과에 recon, logs, notes 세 디렉토리가 모두 보이는가. ② ls notes에 day1.txt가 있는가. ③ 철거 전에 ls로 대상을 확인하고 rm -r을 쳤는가 — 이 순서 자체가 채점 항목입니다.

연습문제 해답

문제 1 해답. /는 파일시스템의 유일한 뿌리(루트), ~는 "내 홈 디렉토리"의 약자입니다. 사용자 lee의 홈은 /home/lee입니다. (참고로 관리자 root의 홈은 예외적으로 /root입니다 — 이 챕터의 실측 출력에 /root가 보인 이유입니다.)

문제 2 해답. d는 디렉토리, -는 일반 파일입니다. -a를 붙이면 점(.)으로 시작하는 숨김 파일이 추가로 보입니다 (.bashrc, .profile 등 — 평소엔 안 보이는 설정·기록 파일들).

문제 3 해답. 대소문자 불일치입니다 — 리눅스는 Report.txtreport.txt를 다른 파일로 봅니다. 해결 습관은 두 가지: ① ls로 실제 이름을 눈으로 확인하고 ② 이름을 직접 치지 말고 Tab 자동완성으로 입력하기. 자동완성이 되면 그 이름은 존재한다는 뜻입니다.

문제 4 해답. bash(터미널)에서 친 명령들의 기록입니다. 침해 조사에서는 "공격자가 이 시스템에서 무슨 명령을 쳤는가"가 그대로 드러나는 증거이고, 그래서 공격자는 흔적을 없애려고 이 파일을 지우거나 조작합니다. 편의(↑ 키)와 기록(수사 단서)은 동전의 양면입니다.

완료 기준 체크리스트

  • [ ] 리눅스의 뿌리가 / 하나라는 것을 설명할 수 있다
  • [ ] pwd로 현재 위치를 확인할 수 있다
  • [ ] ls -la로 숨김 파일까지 볼 수 있다
  • [ ] cd의 네 가지 이동(아래/위/집/뿌리)을 할 수 있다
  • [ ] mkdirtouch로 구조를 만들 수 있다
  • [ ] rm에 휴지통이 없다는 것을 알고, 지우기 전 확인 규칙을 지킨다
  • [ ] Tab 자동완성과 ↑ 키를 실습에서 사용해 봤다
  • [ ] 미션: practice-lab 구조를 만들고 철거했다

6. 흔한 실수와 해결

벽 1. "그런 파일이나 디렉토리가 없다"는 오류

증상: No such file or directory.
원인 9할: 대소문자 불일치. documents는 있지만 Documents를 쳐야 하는 식입니다.
해결: ls로 실제 이름을 확인하고, Tab 자동완성을 쓰세요. 이 오류를 만나면 손가락보다 눈이 먼저 — 이름을 그대로 베끼는 습관입니다.

벽 2. cd를 쳤는데 그대로다

증상: cd를 쳤더니 아무 반응이 없습니다.
원인: 그것은 성공입니다. 리눅스는 성공한 명령에 아무 말도 안 합니다 — "침묵은 성공, 한 줄이 나오면 실패"라고 읽으세요. 반대로 오류 메시지는 조용히 한 줄만 나오니 놓치기 쉽습니다.
해결: 헷갈리면 pwd로 확인하세요.

벽 3. 슬래시 방향을 헷갈린다

증상: home\lee처럼 역슬래시를 칩니다.
원인: 윈도우 습관.
해결: 리눅스는 무조건 /(앞으로 기울인 것). URL 주소와 같은 방향이라고 기억하세요 — ubuntu.com/download처럼.

벽 4. 파일을 지웠는데 되돌리고 싶다

증상: rm으로 지운 파일이 필요해졌습니다.
원인: rm에는 휴지통이 없습니다(3-5절).
해결: 되돌릴 수 없습니다 — 그래서 삭제 전 확인 규칙이 있는 겁니다. 단, 오늘 연습한 VM은 스냅샷으로 되돌리면 됩니다! 이것이 Step 17 스냅샷의 진가이고, 실수가 공포가 아니라 학습이 되는 랩의 묘미입니다.

벽 5. 명령을 쳤는데 이상한 기호가 나오며 입력이 계속된다

증상: > 표시가 나오며 명령이 안 끝납니다.
원인: 따옴표를 열고 안 닫았습니다. 셸이 "문장이 아직 안 끝났구나" 하고 기다리는 중입니다.
해결: Ctrl + C로 취소하고 다시 치세요. 파워쉘의 중괄호 벽(Step 8)과 같은 종류의 일입니다 — 열었으면 닫는다.


7. 정리

오늘의 개념

개념 한 줄 설명
/ (루트) 리눅스의 유일한 뿌리 — 모든 것이 여기서 시작
홈 디렉토리 /home/사용자이름 — 내 집, 약자는 ~
"모든 것은 파일" 장치·프로세스까지 파일로 다루는 리눅스 철학
숨김 파일 점(.)으로 시작 — ls만으로는 안 보임
대소문자 구분 Filefile은 다른 파일!

오늘의 명령어

명령 하는 일
pwd 현재 위치 확인
ls / ls -la 목록 보기 / 숨김 포함 자세히
cd 이동 (.. 위로, ~ 집으로, / 뿌리로)
mkdir, touch 디렉토리 만들기, 빈 파일 만들기
rm, rmdir 삭제 (⚠️ 휴지통 없음! 확인 필수)
Tab, 자동완성, 명령 히스토리 불러오기

명령어보다 중요한 감각

리눅스 터미널은 보안 실무의 공용어입니다. 공격 대상 서버도, 분석 도구도, CTF 문제 환경도 전부 이 검은 창으로 다룹니다. 오늘의 다섯 명령 — 위치 확인, 목록, 이동, 만들기, 지우기 — 은 그 공용어의 인사말이고, ls -la로 숨김 파일을 보는 습관과 rm 전에 확인하는 습관은 그대로 보안 습관입니다.

하나 더 기억해 두세요. 2-3절의 "모든 것은 파일"을 가장 극적으로 보여 주는 곳이 /proc입니다. cd /procls를 해 보면 숫자 이름의 디렉토리가 가득한데, 그 숫자가 PID(Step 13에서 배운 그것)입니다. 리눅스는 실행 중인 프로세스 하나하나를 디렉토리로 보여 주고, 그 안의 파일을 읽으면 프로세스의 상태가 보입니다. Step 13에서 특별한 명령으로 봤던 정보를, 리눅스에서는 "파일을 읽기만 하면" 볼 수 있습니다 — 철학이 만든 투명성입니다.


전부 체크되면 Step 18 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.