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 없이 위치를 파악하고 이동한다mkdir과touch로 디렉토리와 파일을 만든다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.txt와 file.txt는 같은 파일 취급됩니다. 리눅스는 다릅니다 — 완전히 다른 두 파일로 취급합니다. Home과 home도 다릅니다.
이 차이가 초보의 첫 장애물입니다: "분명 있는 파일인데 없다"는 오류의 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-lab → cd practice-lab → mkdir recon logs notes (한 줄에 여러 개 가능!) → cd notes → touch 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.txt와 report.txt를 다른 파일로 봅니다. 해결 습관은 두 가지: ① ls로 실제 이름을 눈으로 확인하고 ② 이름을 직접 치지 말고 Tab 자동완성으로 입력하기. 자동완성이 되면 그 이름은 존재한다는 뜻입니다.
문제 4 해답. bash(터미널)에서 친 명령들의 기록입니다. 침해 조사에서는 "공격자가 이 시스템에서 무슨 명령을 쳤는가"가 그대로 드러나는 증거이고, 그래서 공격자는 흔적을 없애려고 이 파일을 지우거나 조작합니다. 편의(↑ 키)와 기록(수사 단서)은 동전의 양면입니다.
완료 기준 체크리스트
- [ ] 리눅스의 뿌리가
/하나라는 것을 설명할 수 있다 - [ ]
pwd로 현재 위치를 확인할 수 있다 - [ ]
ls -la로 숨김 파일까지 볼 수 있다 - [ ]
cd의 네 가지 이동(아래/위/집/뿌리)을 할 수 있다 - [ ]
mkdir과touch로 구조를 만들 수 있다 - [ ]
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만으로는 안 보임 |
| 대소문자 구분 | File과 file은 다른 파일! |
오늘의 명령어
| 명령 | 하는 일 |
|---|---|
pwd |
현재 위치 확인 |
ls / ls -la |
목록 보기 / 숨김 포함 자세히 |
cd |
이동 (.. 위로, ~ 집으로, / 뿌리로) |
mkdir, touch |
디렉토리 만들기, 빈 파일 만들기 |
rm, rmdir |
삭제 (⚠️ 휴지통 없음! 확인 필수) |
Tab, ↑ |
자동완성, 명령 히스토리 불러오기 |
명령어보다 중요한 감각
리눅스 터미널은 보안 실무의 공용어입니다. 공격 대상 서버도, 분석 도구도, CTF 문제 환경도 전부 이 검은 창으로 다룹니다. 오늘의 다섯 명령 — 위치 확인, 목록, 이동, 만들기, 지우기 — 은 그 공용어의 인사말이고, ls -la로 숨김 파일을 보는 습관과 rm 전에 확인하는 습관은 그대로 보안 습관입니다.
하나 더 기억해 두세요. 2-3절의 "모든 것은 파일"을 가장 극적으로 보여 주는 곳이 /proc입니다. cd /proc 후 ls를 해 보면 숫자 이름의 디렉토리가 가득한데, 그 숫자가 PID(Step 13에서 배운 그것)입니다. 리눅스는 실행 중인 프로세스 하나하나를 디렉토리로 보여 주고, 그 안의 파일을 읽으면 프로세스의 상태가 보입니다. Step 13에서 특별한 명령으로 봤던 정보를, 리눅스에서는 "파일을 읽기만 하면" 볼 수 있습니다 — 철학이 만든 투명성입니다.
전부 체크되면 Step 18 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.