Interactive Webbook · Vol.1 0%
Chapter 01

터미널이라는 마법의 창문

검은 화면에 글자만 깜빡이는 그 창. 왜 "터미널"이라고 부를까요? 어디서 온 이름이고, 우리는 거기에 뭘 입력하는 걸까요? 처음 만지는 사람의 눈높이에서 출발합니다.

1-1

🪟"터미널"이라는 단어, 어디서 왔을까

한국말로 옮기면 "터미널 = 끝, 종착점"입니다. 영어 단어 terminal의 원래 뜻이 그래요. 공항의 "터미널 빌딩", 버스 터미널 할 때 그 단어와 정확히 같은 단어입니다.

그런데 왜 검은 화면이 "끝"이라고 불릴까요? 1960~70년대 컴퓨터 역사 이야기입니다.

📜
옛날엔 컴퓨터가 방 하나만큼 컸어요. 진짜 컴퓨터(메인프레임)는 다른 방, 다른 층에 있고, 사람은 그 컴퓨터에 키보드와 화면 한 세트만 연결해서 썼습니다. 이 키보드+화면 묶음이 "컴퓨터의 끝단(terminal)"이라서 그냥 터미널이라고 불렸어요. 컴퓨터 본체에서 봤을 때 사람과 만나는 마지막 지점, 끝점이라는 의미였습니다.

지금은 그런 거대 컴퓨터를 쓸 일이 거의 없습니다. 노트북 한 대가 옛날 메인프레임보다 훨씬 강력하니까요. 그런데도 "터미널"이라는 이름은 그대로 남았습니다.

💡
지금 우리가 켜는 "터미널"은 사실 옛날 단말기를 흉내 내는 프로그램입니다. 정확한 이름은 terminal emulator(터미널 에뮬레이터). 그래서 우분투에서 켜는 GNOME Terminal, 맥에서 켜는 Terminal.app, Windows의 Windows Terminal 모두 정식 명칭에 "터미널"이 들어가 있어요. 다 같은 가족입니다.

정리하면 이렇습니다:

  • 옛날: 컴퓨터 본체에 케이블로 연결된 키보드+화면 장치 = 터미널
  • 지금: 그 옛날 화면을 흉내내며 명령어를 받는 프로그램 = (가상)터미널
  • 이유: 화려한 GUI가 생기기 전엔, 컴퓨터를 부리는 거의 유일한 방법이었음
"터미널"이라는 이름이 붙은 가장 정확한 이유는?
1-2

⌨️일단 터미널을 열어봅시다 (Ctrl+Alt+T)

이론은 충분합니다. 직접 켜봐야 합니다. 리눅스에선 보통 이렇게 엽니다:

가장 빠른 방법: 키보드 단축키
대부분의 리눅스 배포판(우분투, 민트, 데비안 계열)에서 Ctrl + Alt + T를 누르면 터미널이 바로 열립니다. 이걸 외우세요. 앞으로 수천 번 누를 단축키입니다.

단축키가 안 먹는 경우엔:

  • 메뉴에서 찾기 — 화면 좌측 또는 좌하단 메뉴 버튼 → "터미널" 검색
  • 바탕화면 우클릭 — XFCE 같은 환경에선 우클릭 메뉴에 "터미널 열기" 항목 존재
  • 파일 관리자에서 — 폴더 안에서 우클릭 → "현재 위치에서 터미널 열기"
⚠️
배포판마다 단축키가 다를 수 있어요. Fedora, Manjaro 등은 기본 단축키가 비어있는 경우도 있습니다. 설정 → 키보드 → 단축키에서 "터미널 실행"에 Ctrl+Alt+T를 직접 지정할 수 있어요.

열면 검은(또는 어두운) 창이 하나 뜨고, 안에 글자가 한 줄 깜빡이고 있을 겁니다. 다음 레슨에서 그 한 줄을 해부해봅시다.

1-3

🔍처음 보이는 그 한 줄 — "프롬프트"

터미널을 처음 열면 이런 줄이 보일 거예요:

terminal
cdct@mylinux:~$ 

이 한 줄을 프롬프트(prompt)라고 부릅니다. 영어 prompt는 "재촉하다, 부추기다, ~하라고 알리다"는 뜻이에요. 즉 "이제 명령어를 치라고 알려주는 신호"입니다. 깜빡이는 커서까지 같이 있죠.

각 부분을 잘라서 보면:

부분의미예시
cdct지금 로그인한 사용자 이름ubuntu, root, john ...
@"~의" 라는 구분자. 영어로 'at'이메일의 @와 같은 의미
mylinux이 컴퓨터의 이름(호스트네임)desktop, server01 ...
:사용자/호스트와 경로를 가르는 콜론
~현재 위치한 디렉토리. 틸드(~)는 "내 홈"을 의미/home/cdct, /etc, /tmp ...
$일반 사용자 프롬프트. "명령 받을 준비됨"의 신호관리자(root)면 #

읽으면 이렇게 됩니다: "cdct라는 사용자가, mylinux라는 컴퓨터에서, 내 홈 디렉토리에서, 명령을 받을 준비가 됨".

💡
$와 # 차이는 꽤 중요해요. $는 일반 사용자, #은 시스템 전체를 만질 수 있는 관리자(root). 인터넷에서 "이 명령어 쳐보세요"라는 글을 볼 때, 줄 맨 앞에 $ 또는 #이 보인다면 그건 예시 표시일 뿐 실제로 같이 입력하는 글자가 아닙니다. 그 뒤만 복사해서 붙여 넣으세요.

앞으로 이 책에서도 명령어 예시는 $로 시작하는 줄로 보여드릴 거예요. 그건 "이 줄을 치세요"라는 표시입니다. $는 빼고 그 뒤 부분만 입력하시면 됩니다.

프롬프트에서 $# 의 차이는?
1-4

🐚셸(shell) — 명령을 알아듣는 통역사

여기서 헷갈리는 단어가 셋 등장합니다. 차근차근 풀어드릴게요.

터미널 (terminal)
검은 창 그 자체. 화면과 키보드 입출력 통로. 창문이라고 보세요.
셸 (shell)
사용자가 친 명령을 해석해서 운영체제에 전달하는 프로그램. 통역사.
커널 (kernel)
운영체제의 핵심. 하드웨어를 직접 부리는 부분. 주방장.

비유로 풀자면 — 손님(사용자)이 식당 카운터(터미널)에 와서 주문지를 내밀면, 점원(셸)이 그걸 주방(커널)에 전달해서 음식이 만들어집니다.

🐚
왜 하필 "껍데기(shell)"라는 이름? 운영체제의 핵심을 "kernel"(곡식의 알맹이)이라고 부릅니다. 그 알맹이를 사용자가 직접 만지면 위험하니까, 그걸 감싸는 껍데기 한 겹이 필요했어요. 그 껍데기를 통해서만 알맹이에 접근합니다. 그래서 shell. 호두를 떠올리면 됩니다 — 안에 알맹이(kernel), 밖에 껍데기(shell).

리눅스에서 가장 흔한 셸은 bash입니다. 풀어쓰면 Bourne Again SHell. 이름이 좀 웃기죠? 1979년에 Stephen Bourne이라는 사람이 만든 원조 셸 "Bourne shell"이 있었고, 그걸 다시 만들었다고 해서 "born again"(부활) 말장난으로 Bourne Again이 됐습니다.

셸 종류특징흔히 어디서
bash가장 표준, 가장 흔함Ubuntu, CentOS 등 대부분
zshbash 호환 + 자동완성/꾸미기 강함macOS 기본 (2019부터)
fish친절한 자동완성, 문법 살짝 다름입문자가 좋아함
sh가장 원시적, 표준 셸 스크립트용스크립트 호환성 위해
bash — 내 셸 확인
$ echo $SHELL          # 내가 지금 쓰는 셸
/bin/bash

$ echo $0                # 현재 실행 중인 셸 이름
bash

이 두 명령은 아직 모르셔도 됩니다. "셸이 누구인지 물어보는 주문" 정도로 알고 넘어가세요. 다음 챕터에서 본격적으로 명령어를 배웁니다.

"shell"이 그 이름을 가지게 된 이유로 가장 적절한 것은?
Chapter 02

내 위치를 알자 — pwd & ls

터미널 안에서 길을 잃지 않으려면, 먼저 "지금 어디에 있는지", "여기에 뭐가 있는지" 알아야 합니다. 그게 첫 두 명령어 pwdls입니다.

2-1

📍pwd — 나 지금 어디 있어?

드디어 첫 명령어입니다. 세 글자: pwd. 풀어 쓰면:

P
rint
W
orking
D
irectory

한국어로 옮기면 "지금 작업 중인 디렉토리를 화면에 출력해라". 그게 전부입니다.

bash — pwd 한번 쳐보기
$ pwd
/home/cdct

이 결과 /home/cdct는 무엇을 의미할까요? 슬래시(/)를 기준으로 한 칸씩 들어간다고 보면 됩니다.

  • / — 모든 것의 시작, 최상위 (이걸 "루트"라고 부릅니다)
  • /home — 사용자들이 사는 동네
  • /home/cdct — 그 동네 안 "cdct"라는 사람의 집
💡
"내 홈 디렉토리"라는 표현이 자주 나옵니다. 그건 위 예시의 /home/cdct 같은 위치를 말해요. 컴퓨터를 처음 켜고 터미널을 열면 거의 항상 이 위치에서 시작합니다. 사용자가 자기 파일을 두는 자기 영역이라서요. 줄여서 ~(틸드 기호)라고도 표현합니다. 챕터 3에서 자세히 다룹니다.

왜 굳이 첫 명령이 "내 위치 확인"일까요? — 터미널엔 윈도우 탐색기처럼 위치를 보여주는 주소창이 없기 때문입니다. 프롬프트에 짧게 표시되긴 하지만(~ 같은 식으로), 정확한 전체 경로를 보려면 pwd를 직접 쳐야 합니다.

pwd가 무엇의 약자인가요?
2-2

📁"디렉토리"와 "폴더" — 같은 거야, 다른 거야?

여기서 한 번 짚고 가야 할 단어가 있습니다. 디렉토리(directory)폴더(folder).

결론부터 말하면?
같습니다. 같은 것을 다르게 부르는 두 이름입니다.

그런데 어쩌다 이름이 두 개가 됐냐, 그게 재미있는 이야기입니다.

이름등장 시기유래
directory1970년대 유닉스영어로 "전화번호부, 명단, 목록" — 파일 목록을 담는 곳이라는 의미
folder1980년대 GUI 시대영어로 "서류철" — 그래픽 화면에 종이 폴더 모양 아이콘을 보여주면서

맥OS와 윈도우즈 같은 그래픽 운영체제가 등장하면서, 일반 사용자에게 "디렉토리"는 너무 기술적인 단어로 느껴졌습니다. 그래서 책상 위의 서류철처럼 친숙한 단어인 "폴더"로 부르기 시작한 거예요. 노란색 폴더 아이콘 기억나시죠?

📂
지금은 둘 다 통용됩니다. 다만 분위기가 좀 달라요. 터미널/리눅스/개발 환경에서는 "디렉토리". 윈도우/맥의 그래픽 파일 관리자에서는 "폴더". 같은 대상을 가리킵니다.
🤓
리눅스에서만 통하는 깊은 이야기 하나. 리눅스는 "모든 것이 파일"이라는 철학을 가지고 있어요. 디렉토리도 사실은 특수한 형태의 파일입니다. "이 폴더 안엔 이런 파일들이 있어요"라는 목록을 저장하는 파일이죠. 키보드, 마우스 같은 장치도 /dev/ 아래에 파일로 존재합니다. 처음엔 어색하지만 익숙해지면 강력한 개념입니다.
"디렉토리"와 "폴더"의 관계로 가장 맞는 설명은?
2-3

📋ls — 여기 뭐가 있어?

위치는 알았으니, 그 위치에 뭐가 있는지 봅시다. 두 글자: ls. 풀어 쓰면 LiSt — "목록을 보여줘".

bash — ls 한번 쳐보기
$ ls
Desktop  Documents  Downloads  Music  Pictures  Videos

홈 디렉토리에서 ls를 치면 보통 이런 폴더들이 나옵니다. 운영체제가 사용자에게 기본 제공하는 폴더들이에요.

🎨
색깔에 의미가 있어요. 대부분의 리눅스 터미널은 결과에 색을 입혀줍니다:
  • 파란색 — 디렉토리(폴더)
  • 흰색/회색 — 일반 파일
  • 초록색 — 실행 가능한 파일
  • 하늘색 — 심볼릭 링크(바로가기)
  • 빨간색 — 압축 파일
지금 외울 필요 없습니다. 익숙해지면 자연스럽게 알게 돼요.

특정 위치를 보고 싶으면 뒤에 경로를 붙입니다.

bash — 특정 위치 보기
$ ls /etc            # 시스템 설정 폴더 안에 뭐 있나?
apache2  bash.bashrc  cron.d  hostname  hosts  passwd  ...

$ ls Documents       # 내 Documents 안에 뭐 있나?
memo.txt  report.pdf

$ ls /                # 루트(최상위)엔 뭐 있나?
bin  boot  dev  etc  home  lib  media  opt  proc  root  sbin  ...
🔑
리눅스의 핵심 규칙: 명령어 + (옵션) + (대상). ls /etc의 경우 ls가 명령어, /etc가 대상(어디를 볼지). 명령어 다음에 공백을 두고 정보를 추가로 주는 방식입니다. 거의 모든 리눅스 명령어가 이 패턴이에요.
ls 명령어는 무엇을 출력합니까?
2-4

🎛️ls의 옵션들 — -l, -a, -lh

그냥 ls는 시작일 뿐입니다. 진짜 자주 쓰는 건 ls 뒤에 옵션을 붙인 형태예요.

💡
옵션이란? 명령어의 동작을 살짝 바꾸는 추가 지시사항입니다. 보통 짧은 옵션은 -(하이픈 하나) + 알파벳 한 글자, 긴 옵션은 --(하이픈 두 개) + 단어로 표기합니다.

예: ls -l (짧은 옵션) = ls --format=long (긴 옵션) — 같은 동작.

-l : long format (자세히)

bash — ls -l
$ ls -l
drwxr-xr-x 2 cdct cdct 4096 Apr 12 10:33 Desktop
drwxr-xr-x 5 cdct cdct 4096 May 03 18:21 Documents
-rw-r--r-- 1 cdct cdct  142 May 11 09:00 memo.txt

한 줄이 길어 보이지만, 왼쪽부터 7개 칸으로 끊어 읽으면 어렵지 않아요:

위치예시의미
1drwxr-xr-x권한 정보. 맨 앞 d는 디렉토리, -면 일반 파일
22이 항목을 가리키는 링크 수 (지금은 신경 X)
3cdct파일 주인 (사용자)
4cdct파일이 속한 그룹
54096크기 (바이트 단위)
6Apr 12 10:33마지막 수정 시각
7Desktop파일/폴더 이름

-a : all (숨김 파일 포함)

리눅스에서는 이름이 점(.)으로 시작하는 파일/폴더는 자동으로 숨겨집니다. 평소 안 보여요. 그걸 보고 싶을 때 -a를 씁니다.

bash — ls -a
$ ls -a
.  ..  .bashrc  .config  .profile  Desktop  Documents  Downloads  ...

이름이 .이나 ..인 것도 보이실 거예요. 이건 챕터 3에서 자세히 다룹니다. .bashrc.config 같은 건 평소엔 보이지 않는 설정 파일들입니다.

-l + -a 합치기 → -la

거의 모든 짧은 옵션은 합칠 수 있습니다. -l -a는 그냥 -la로 줄여 쓸 수 있어요.

bash — 자주 쓰는 조합
$ ls -la            # 숨김 포함 + 자세히
$ ls -lh            # 자세히 + 사람이 읽기 좋은 크기(K/M/G)
$ ls -lah           # 세 가지 다 합치기
$ ls -lt            # 시간순(최신 먼저)으로 자세히
$ ls -lS            # 크기순(큰 것 먼저)으로 자세히
💡
가장 많이 쓰는 조합은 ls -lah입니다. 자세히 보면서, 숨김 파일까지, 크기는 사람이 읽기 좋게(1024 대신 1K). 외울 가치가 있어요. 손가락이 자동으로 치게 될 겁니다.
홈 디렉토리에서 숨김 파일까지 자세히 보고 싶을 때 가장 적절한 명령은?
Chapter 03

자리를 옮겨보자 — cd

위치를 알고, 거기 뭐가 있는지도 봤다면, 이제 그 안으로 들어가거나 다른 곳으로 옮겨갈 차례입니다. 그 명령이 cd입니다.

3-1

🚶cd — Change Directory

두 글자, cd. 풀어 쓰면:

C
hange
D
irectory

"디렉토리를 바꿔라" — 즉 "다른 곳으로 옮겨가라". 사용법은 단순합니다.

bash — cd 기본 사용
$ pwd                  # 출발 위치 확인
/home/cdct

$ cd Documents         # Documents로 이동

$ pwd                  # 도착 위치 확인
/home/cdct/Documents

패턴은 항상 똑같습니다: cd [공백] [어디로]. 그게 전부예요.

⌨️
가장 강력한 단축키: Tab 자동완성
cd Doc까지만 치고 Tab을 누르면 자동으로 cd Documents/로 완성됩니다. 오타도 안 나고 빠르고, 손목도 덜 아파요. 후보가 여러 개면 두 번 누르면 후보 목록이 보입니다. 평생 쓰는 단축키이니 지금부터 손에 익히세요.
⚠️
리눅스는 대소문자를 구분합니다. cd documentscd Documents는 다른 명령입니다. 윈도우는 둘 다 같다고 보지만, 리눅스는 아닙니다. "그런 폴더 없다(No such file or directory)" 에러가 뜨면 대소문자부터 확인하세요.
cd는 무엇의 약자인가요?
3-2

🗺️경로 — 절대경로 vs 상대경로

"어디로 갈지" 적는 방법이 두 가지 있습니다. 처음 보면 헷갈리지만, 비유 하나로 풀립니다.

절대경로 (absolute path)
$ cd /home/cdct/Documents
# 출발 위치 무관 — 어디서 쳐도 같은 곳에 도착
상대경로 (relative path)
$ cd Documents
# 지금 위치 기준으로 찾아감
# /home/cdct에 있을 때만 통함
📬
비유:
절대경로는 "서울시 강남구 테헤란로 123" 같은 정식 주소예요. 어디서 출발하든 그 자체로 위치가 정해져 있어요. 항상 /로 시작합니다.

상대경로는 "여기서 왼쪽으로 두 블록, 첫 번째 골목" 같은 안내예요. "여기"가 바뀌면 도착지도 바뀝니다. /로 시작하지 않습니다.
bash — 같은 곳, 두 가지 표현
# 내가 /home/cdct 에 있다고 가정
$ pwd
/home/cdct

# 방법 1 — 절대경로 (어디서 쳐도 정확히 같은 곳)
$ cd /home/cdct/Documents

# 방법 2 — 상대경로 (지금 /home/cdct에 있어야 통함)
$ cd Documents

어느 쪽이 좋다 나쁘다는 없습니다. 상황에 따라 둘 다 씁니다.

  • 가까운 곳으로 갈 땐 상대경로가 빠르고 짧음
  • 먼 곳으로 가거나 어디서 칠지 모를 땐 절대경로가 안전함
  • 스크립트나 설정 파일에 적을 땐 거의 항상 절대경로 (어디서 실행될지 모르니까)
3-3

특수 기호 — . , .. , ~ , /

리눅스 경로에는 자주 쓰는 약속된 기호가 네 개 있습니다. 외워두면 인생이 편해져요.

기호의미예시
.지금 위치(현재 디렉토리)./script.sh (지금 위치의 script.sh)
..한 단계 위(부모 디렉토리)cd ..
~내 홈 디렉토리 (예: /home/cdct)cd ~/Downloads
/루트(최상위)cd / 또는 /etc/...

점 하나 vs 점 두 개

이게 처음엔 가장 헷갈립니다. 비교해서 봅시다.

. (점 하나) — 여기
# 지금 /home/cdct/projects 에 있다면
$ cd .
# 그대로 /home/cdct/projects
# (이동이 없는 셈)
.. (점 두 개) — 한 단계 위
# 지금 /home/cdct/projects 에 있다면
$ cd ..
# /home/cdct 로 한 칸 위로 올라감
💡
점 하나는 왜 필요한가? 그냥 "여기"인데 무슨 의미가 있냐 싶지만, 명령어를 실행할 때 자주 쓰입니다. 예를 들어 ./run.sh는 "지금 위치의 run.sh를 실행해"라는 명시적 표현. 그냥 run.sh라고 치면 시스템이 다른 곳에서 찾아버려서 못 찾을 수 있거든요.

틸드(~) — 내 홈

키보드 좌상단 ~ 기호 (Shift + 1 옆 키). 이건 "현재 사용자의 홈 디렉토리"를 의미하는 약속 기호입니다.

bash — ~ 활용
$ cd ~                    # 홈으로 (그냥 cd만 쳐도 됨)
$ cd ~/Downloads         # /home/cdct/Downloads
$ ls ~/.config            # 홈의 .config 폴더 내용 보기

cd 단독 / cd -

두 가지 편의 기능이 더 있습니다.

bash — 편의 기능
$ cd                  # 인자 없이 cd만 → 홈으로 (cd ~ 와 동일)

$ cd /var/log
$ cd /etc
$ cd -                # 직전 위치로 토글 (/var/log로 돌아감)
/var/log
$ cd -                # 또 토글 (/etc로 돌아감)
/etc

cd -는 두 위치 사이를 왔다 갔다 할 때 진짜 편합니다. 탭(브라우저 탭 전환)처럼 토글로 생각하면 됩니다.

현재 /home/cdct/projects/myapp에 있을 때 cd ..를 치면 어디로 갈까요?
3-4

🚀실습 — 이리저리 옮겨다니기

이론은 충분합니다. 실제로 따라 쳐보세요. 각 줄을 직접 입력하고 결과를 확인하는 게 중요합니다.

bash — 길찾기 연습
# 1) 일단 홈으로 가서 위치 확인
$ cd ~
$ pwd
/home/cdct

# 2) Documents로 들어가기
$ cd Documents
$ pwd
/home/cdct/Documents

# 3) 한 단계 위로
$ cd ..
$ pwd
/home/cdct

# 4) 또 한 단계 위로
$ cd ..
$ pwd
/home

# 5) 또 한 번 → 루트 도착
$ cd ..
$ pwd
/

# 6) 루트에서 뭐가 있나 보기
$ ls
bin  boot  dev  etc  home  lib  media  opt  proc  root  run  sbin  ...

# 7) 절대경로로 한 번에 점프
$ cd /home/cdct/Documents
$ pwd
/home/cdct/Documents

# 8) 토글로 돌아가기
$ cd /etc
$ cd -
/home/cdct/Documents

# 9) 인자 없이 cd → 홈으로 귀가
$ cd
$ pwd
/home/cdct
🎯
익숙해지는 가장 빠른 길: 위 9단계를 종이에 한 번 그려보세요. /를 맨 위에 두고 트리처럼 가지를 그리면서 "지금 어디에 있는지" 손으로 따라가는 게 머리에 박힙니다. cd는 그 트리 위의 점프입니다.
Chapter 04

만들고 지우기 — touch · mkdir · rm

여기서부터 진짜 "만지는" 영역입니다. 파일을 만들고, 폴더를 만들고, 만든 것을 지워보면서 손에 익혀봅시다. 마지막엔 위험한 명령도 다루니 끝까지 읽어주세요.

4-1

touch — 빈 파일 만들기

이름이 좀 이상한 명령어입니다. touch는 영어로 "건드리다, 만지다"라는 뜻이에요. 그게 본래 용도였습니다.

📅
touch의 원래 용도는 파일의 "최종 수정 시각"을 지금 시각으로 바꾸는 거예요. 파일을 "톡 건드려서" 시간 도장만 새로 찍는 셈입니다. 그런데 만약 그 파일이 존재하지 않으면? 그땐 빈 파일을 새로 만들어줍니다. 그래서 "빈 파일을 만드는 명령"으로 더 자주 쓰이게 됐어요.
bash — touch 실습
$ cd ~
$ touch hello.txt        # 빈 파일 생성
$ ls
Desktop  Documents  Downloads  hello.txt  Music  Pictures  Videos

$ touch a.txt b.txt c.txt  # 여러 개 한번에도 가능
$ ls
a.txt  b.txt  c.txt  Desktop  Documents  Downloads  hello.txt  ...

여러 파일을 한 번에 만들 수 있는 게 보이시죠? 명령어 뒤에 공백으로 구분해 여러 개를 적으면 차례로 처리합니다. 리눅스의 거의 모든 명령이 이래요.

4-2

📁mkdir — Make Directory

이번엔 폴더(디렉토리) 만들기. mkdir 다섯 글자.

M
a
K
e
DIR
ectory

"디렉토리를 만들어라". 사용법은 touch와 비슷합니다.

bash — mkdir 실습
$ cd ~
$ mkdir test                # test 폴더 만들기
$ ls
Desktop  Documents  Downloads  test  ...

$ cd test                  # 만든 폴더 안으로 들어가기
$ pwd
/home/cdct/test

$ ls                          # 안엔 아무것도 없음 (새로 만들었으니까)

$ mkdir inside                # 그 안에 또 만들기
$ ls
inside

$ cd ..                          # 한 칸 위로 나가기
$ pwd
/home/cdct
💡
이미 있는 이름으로 만들면? 같은 이름의 폴더가 이미 있는 곳에 mkdir test를 또 치면, "이미 존재한다(File exists)"는 에러가 납니다. 안전장치예요. 기존 폴더는 그대로 보존됩니다.

여러 폴더를 한 번에 만들 수도 있어요.

bash — 여러 개 한 번에
$ mkdir apple banana cherry
$ ls
apple  banana  cherry  ...
4-3

🪜mkdir -p — 깊은 폴더를 한 방에

가끔 이런 게 필요합니다: "projects/myapp/src/utils 같은 깊은 폴더 구조를 한 번에 만들고 싶다". 그냥 mkdir로는 안 됩니다.

bash — 그냥 mkdir는 안 됨
$ mkdir projects/myapp/src/utils
mkdir: cannot create directory 'projects/myapp/src/utils':
No such file or directory

왜 에러? "projects도 없는데 그 안에 myapp을 어떻게 만드냐"는 항의입니다. 이럴 땐 -p 옵션:

bash — mkdir -p
$ mkdir -p projects/myapp/src/utils
$ ls projects
myapp
$ ls projects/myapp
src
$ ls projects/myapp/src
utils
🔤
-p의 정체: p는 parents의 약자입니다. "필요하면 부모 디렉토리들도 같이 만들어줘"라는 뜻이에요. 옵션 글자 하나에도 다 이유가 있습니다. 외울 필요는 없지만, 알면 안 까먹어요.

-p는 또 하나 좋은 점이 있어요: 이미 폴더가 있어도 에러를 내지 않습니다. 스크립트에서 "있으면 그대로, 없으면 만들기"가 필요할 때 자주 씁니다.

mkdir -p a/b/c 명령의 동작은?
4-4

🗑️rmdir — 빈 폴더 지우기

만들었으면 지우는 것도 알아야죠. 폴더 지우기는 rmdir입니다.

R
e
M
ove
DIR
ectory
bash — rmdir 실습
$ cd ~
$ mkdir tobedeleted     # 일단 만들고
$ ls
... tobedeleted ...

$ rmdir tobedeleted     # 지우기
$ ls                       # 사라짐 확인
... (tobedeleted 없음) ...
⚠️
rmdir의 중요한 안전장치: 폴더 안에 뭐라도 들어 있으면 안 지웁니다. "Directory not empty" 에러를 띄워요. 실수로 가득 찬 폴더를 날리는 것을 막아주는 거예요. 안에 든 게 있는 폴더를 지우려면 다음 레슨의 rm -r을 써야 합니다.
bash — 안 지워지는 경우
$ mkdir hasstuff
$ touch hasstuff/inside.txt
$ rmdir hasstuff
rmdir: failed to remove 'hasstuff': Directory not empty
4-5

rm — 파일 지우기

이번엔 파일 지우기. rm 두 글자. ReMove의 줄임입니다.

bash — rm 기본
$ touch trash.txt
$ ls
... trash.txt ...

$ rm trash.txt        # 지우기
$ ls
... (trash.txt 없음) ...
🚨
리눅스 터미널에는 휴지통이 없습니다. rm으로 지운 파일은 즉시 영구 삭제입니다. Ctrl+Z로 되돌릴 수도, 휴지통에서 복구할 수도 없어요. 칠 때마다 한 번 더 확인하는 습관을 들이세요.

(파일 관리자에서 마우스로 지우는 건 보통 휴지통으로 들어갑니다 — 그건 다른 동작입니다. rm은 그렇지 않습니다.)

실수가 무서우면 -i (interactive, 확인) 옵션을 붙이세요. 하나하나 물어봅니다.

bash — 묻고 지우기
$ rm -i a.txt b.txt c.txt
rm: remove regular empty file 'a.txt'? y
rm: remove regular empty file 'b.txt'? n
rm: remove regular empty file 'c.txt'? y
# y는 지움, n은 건너뜀
4-6

💥rm -r / rm -rf — 폴더 통째로 지우기

가득 찬 폴더를 지우려면 rmdir로는 안 됩니다 (앞 레슨 참고). 이럴 땐 rm에 옵션을 붙입니다.

옵션풀이의미
-rRecursive안에 든 모든 것을 재귀적으로 같이 지움
-fForce묻지 않고 강제로 지움 (확인 메시지 무시)
-rf합치기위 둘 다 — 묻지도 따지지도 않고 폴더 통째로
bash — rm -r 실습
# 실습용 폴더 만들기
$ mkdir -p playground/sub/deeper
$ touch playground/file1.txt playground/sub/file2.txt
$ ls -R playground       # -R 옵션은 ls도 재귀적으로
playground:
file1.txt  sub
playground/sub:
deeper  file2.txt
playground/sub/deeper:

# 통째로 지우기
$ rm -r playground
$ ls playground
ls: cannot access 'playground': No such file or directory
# 사라졌습니다!
☠️
위험 경고 — 절대로 하면 안 되는 명령:
rm -rf / — 시스템 전체를 통째로 날립니다. 운영체제가 죽을 수 있어요.
rm -rf ~ — 내 홈 디렉토리의 모든 파일이 즉시 사라집니다.
sudo rm -rf /* — 관리자 권한으로 위와 비슷한 짓.

인터넷의 장난으로 이런 명령을 권하는 글이 있을 수 있어요. 절대 따라 하지 마세요. 모르는 명령은 일단 --help로 확인하는 습관을 들이세요(챕터 5).
🛡️
안전한 습관 세 가지:
  1. rm -rf 치기 전에 ls로 그 경로에 뭐가 있는지 먼저 확인
  2. 경로를 두 번 확인. 특히 / 하나가 어디에 있는지 (앞에 있나 뒤에 있나)
  3. 중요한 작업은 -i (interactive)로 하나하나 확인하며 지우기
내용물이 들어있는 폴더 myproject를 지우려면?
Chapter 05

파일 다루기 & 도움말 보기

파일 내용을 들여다보고, 복사하고, 옮기고. 그리고 모르는 명령은 어떻게 스스로 찾아보는지까지. 여기까지 마스터하면 진짜 기초는 끝입니다.

5-1

📄cat — 파일 들여다보기

cat은 세 글자. 그런데 어원이 재미있습니다. 풀어 쓰면:

con
cat
CAT
enate

영어로 "이어붙이다, 연결하다"라는 단어 concatenate의 줄임이에요. 원래 용도는 파일 여러 개를 이어붙여서 출력하는 것이었습니다. 그런데 파일 하나만 줘도 그 내용을 출력해주니까, 결국 "파일 내용 보기"의 표준 명령이 됐습니다.

bash — cat 실습
# 실습용 파일 만들기 (echo로 글자 써넣기)
$ echo "안녕 리눅스" > hello.txt
$ cat hello.txt
안녕 리눅스

# 시스템 파일 들여다보기 — 시스템에 어떤 사용자가 있나
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...

# 여러 파일을 이어붙여 출력 (cat의 원래 용도)
$ echo "파일1" > a.txt
$ echo "파일2" > b.txt
$ cat a.txt b.txt
파일1
파일2
📜
큰 파일에 cat을 쓰면? 화면을 한 번에 다 뱉어내서 위쪽 내용이 스크롤로 사라집니다. 긴 파일은 less 같은 페이지 단위 도구가 더 좋아요(잠시 후 man에서 다룹니다). 짧은 파일 빠르게 볼 때 cat이 편합니다.
5-2

📋cp — Copy (복사)

파일/폴더를 복사할 땐 cp. 두 글자, 그냥 copy의 줄임입니다.

패턴: cp [원본] [사본]. 원본은 그대로 두고, 사본을 만듭니다.

bash — cp 실습
$ echo "원본" > original.txt
$ cp original.txt copy.txt
$ ls
copy.txt  original.txt

$ cat copy.txt
원본
# 같은 내용으로 복사됨

# 다른 폴더로 복사하면 이름은 그대로
$ mkdir backup
$ cp original.txt backup/
$ ls backup
original.txt

폴더를 통째로 복사할 땐 — 기억나시죠? rm처럼 -r이 필요합니다.

bash — 폴더 복사
$ cp backup           # 폴더만 주면? 안 됨!
cp: -r not specified; omitting directory 'backup'

$ cp -r backup backup2  # -r로 폴더 통째 복사
$ ls
backup  backup2  copy.txt  original.txt
💡
-r은 패턴입니다. 폴더(디렉토리)를 다룰 땐 거의 항상 -r(recursive, 재귀적)이 필요해요. rm -r, cp -r, ls -R(대문자) 등. 외워두면 다음에 만날 명령도 쉽게 따라 갑니다.
5-3

🚚mv — Move (이동 + 이름변경)

mv 두 글자. move의 줄임이에요. 두 가지 일을 합니다:

  1. 파일을 다른 위치로 이동
  2. 파일의 이름을 변경

처음엔 좀 이상하게 보입니다. "왜 이동이랑 이름변경이 같은 명령이야?". 비밀은 이렇습니다 — 리눅스에선 "이름 바꾸기"가 사실 "같은 위치로 옮기는데 이름만 다르게"입니다. 한 명령으로 둘 다 처리해버립니다.

bash — mv 두 가지 모드
# 1) 이름 변경 (같은 위치, 새 이름)
$ touch old_name.txt
$ mv old_name.txt new_name.txt
$ ls
new_name.txt
# old_name.txt는 사라지고 new_name.txt만 남음

# 2) 이동 (다른 폴더로)
$ mkdir archive
$ mv new_name.txt archive/
$ ls
archive
$ ls archive
new_name.txt

# 3) 이동 + 이름변경을 한 번에
$ mv archive/new_name.txt ~/Documents/final.txt
# Documents 안으로 옮기면서 이름도 final.txt로 변경
🤔
다른 OS의 "rename"은? 윈도우엔 ren, 다른 일부 시스템엔 rename 같은 별도 명령이 있습니다. 리눅스에는 그런 게 따로 없어요. 왜? mv 하나면 충분하니까요. "기능이 적은 게 아니라, 적은 명령에 많은 기능을 담은 것"이 유닉스 철학입니다.
⚠️
같은 이름의 파일이 이미 있다면? mv경고 없이 덮어씁니다. 원본 파일이 사라질 수 있어요. 안전하게 하려면 mv -i(묻기) 또는 mv -n(이미 있으면 건너뜀)을 쓰세요.
5-4

--help — 가장 가까운 도움말

지금까지 8개 명령(pwd, ls, cd, touch, mkdir, rmdir, rm, cp, mv, cat)을 배웠습니다. 옵션도 몇 개 나왔어요. 그런데 옵션이 그 외에도 많거든요. 다 외울 수 없죠.

그럴 때 가장 빠른 도움말: 명령어 뒤에 --help를 붙이는 것.

bash — --help
$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
...
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
  -h, --human-readable       with -l and -s, print sizes like 1K 234M 2G
  -l                         use a long listing format
  -R, --recursive            list subdirectories recursively
  -S                         sort by file size, largest first
  -t                         sort by modification time, newest first
  ...

옵션 목록과 한 줄 설명이 쭉 나옵니다. 모르는 옵션이 있으면 이 목록에서 검색하면 돼요.

💡
--help는 거의 모든 GNU/리눅스 표준 명령이 지원합니다. "이 명령 옵션 뭐 있더라?" 싶으면 일단 --help부터. 인터넷 검색보다 빠릅니다.
5-5

📚man — Manual Page (정식 매뉴얼)

--help는 빠른 참조용 짧은 도움말입니다. 진짜 자세한 설명서는 man 페이지예요.

man
ual

사용법: man [공백] [명령어 이름].

bash — man ls
$ man ls
LS(1)                            User Commands                            LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List information about the FILEs (the current directory by default).
       ...
       Mandatory arguments to long options are mandatory for short options too.

       -a, --all
              do not ignore entries starting with .
       ...

전체 화면을 매뉴얼이 차지합니다. 처음엔 "어, 빠져나가는 법을 모르겠어"가 됩니다. 안심하세요, 키 하나로 빠져나옵니다.

동작
↑ ↓ 또는 j k한 줄씩 위/아래로
Space 또는 f한 페이지 아래로
b한 페이지 위로
/검색어 + Enter해당 단어 검색
n / N검색 결과 다음/이전
g / G맨 처음/맨 끝으로
q나가기 (가장 중요!)
🚪
man 페이지에서 나가는 키는 q 한 글자입니다. q = quit. man뿐 아니라 less, more, vi/vim의 명령 모드 등 많은 도구에서 통합니다. 외워두세요.

man 페이지는 보통 이런 구조입니다:

  • NAME — 명령 한 줄 요약
  • SYNOPSIS — 사용 패턴 ([]는 선택, ...은 반복 가능)
  • DESCRIPTION — 상세 설명
  • OPTIONS — 옵션 목록
  • EXAMPLES — 사용 예 (없는 경우도 많음)
  • SEE ALSO — 관련 명령
man ls로 매뉴얼을 보다가 빠져나가려면 어떤 키를 누르나요?
5-6

🎓여기까지 마치며 — 다음 권으로 가는 길

축하합니다. 진짜 기초의 기초를 다 봤어요. 정리하면 손에 익힌 명령이 이만큼입니다:

분류명령한 줄 요약
위치pwd지금 어디 있는지
cd다른 디렉토리로 이동
목록ls / ls -lah여기 뭐 있는지 / 자세히+숨김+가독성
만들기touch빈 파일 만들기
mkdir / mkdir -p폴더 만들기 / 깊은 폴더 한 번에
echo "글" > 파일글자 적힌 파일 만들기 (보너스)
지우기rmdir빈 폴더 지우기
rm파일 지우기 (복구 불가!)
rm -r폴더 통째로 지우기 (위험)
다루기cat파일 내용 보기
cp / cp -r복사 / 폴더 복사
mv이동 + 이름변경
도움말--help빠른 옵션 목록
man자세한 매뉴얼 (q로 나가기)
📖
이 책은 인터랙티브 웹북 시리즈 Vol.1입니다. 진짜 처음 만지는 사람을 위해 설계됐어요. 다음 단계로 넘어가고 싶다면 LinuxLab(/linuxlab/)으로 가세요. 권한(chmod), 패키지(apt), 편집기(nano, vim), 환경변수(.bashrc), 셸 스크립트, grep/sed/awk, SSH 원격 접속, Python 입문, C언어까지 다룹니다. 이 책의 다음 챕터라고 봐도 됩니다.

다음 권에서 만나기 전까지 한 가지만 부탁드립니다 — 매일 5분이라도 터미널을 열어보세요. 폴더 만들고, 들어가고, 파일 옮기고, 지우는 동작을 반복하면 일주일 안에 손이 기억합니다. 명령어 외우는 것보다 그 감각이 훨씬 중요합니다.

🎉
Linux Starter 완주!
진짜 첫 발을 떼셨습니다. 다음 권은 LinuxLab에서 만나요.