A-1: 리눅스 입문 — 터미널의 첫 문
목차 27
안녕하세요, 홍순구입니다. 오늘부터 우리는 리눅스의 세계로 들어갑니다. 그 첫걸음은 아마 많은 분이 한 번쯤 무서워했던 그 화면 — 깜빡이는 커서만 있는 검은 창, 터미널입니다.
처음 이 창을 마주하면 다들 비슷한 생각을 해요. "여기다 뭘 어떻게 치라는 거지?", "잘못 치면 컴퓨터가 망가지는 거 아냐?" 괜찮습니다. 누구나 그렇게 시작했어요. 이 검은 창은 사실 여러분의 명령을 가장 충실하게 들어주는 도구일 뿐입니다. 오늘 수업이 끝날 때쯤이면, 이 창을 열어 리눅스 안을 두 발로 걸어 다니게 될 거예요.
왜 이걸 배워야 할까요? 여러분이 앞으로 만들 프로그램 — 자바로 짠 백엔드든, 파이썬으로 짠 분석 코드든 — 실제로 돌아가는 곳은 거의 다 리눅스 서버입니다. 그 서버에는 마우스로 클릭할 화면이 없어요. 오직 이 검은 창, 셸을 통해서만 대화할 수 있습니다. 그래서 리눅스 셸은 개발자에게 운전면허 같은 기본기예요.
오늘 우리가 걸어갈 길을 먼저 한눈에 그려둘게요.
[이해] 왜 셸인가 → 터미널 열기 → 이 창의 정체 → 리눅스의 지도(FHS)
[실습] 경로 읽기(절대·상대) → 첫 탐색(pwd·ls·cd) → 도움말
"왜 이게 필요한지"부터 차근차근 풀어갈 테니, 명령어를 외우려 애쓰지 말고 편하게 따라오세요.
💡 오늘 수업의 핵심 — "마우스가 닿지 않는 서버를 다루는 유일한 통로, 셸"
터미널을 열고, 셸·터미널·커널이 무엇인지 구분하고, 리눅스 파일시스템이라는 지도를 머릿속에 그린 다음, pwd·ls·cd 세 명령으로 길을 잃지 않고 누비는 것 — 여기까지가 오늘의 목표입니다.
🎯 학습 목표
- 왜 개발자에게 셸이 필수인지 설명하고, 내 컴퓨터에 리눅스 터미널을 직접 연다
- 셸·터미널·커널의 차이를 구분하고, 프롬프트가 나에게 무엇을 말하는지 읽는다
- 파일시스템 계층구조(FHS)를 이해하고
pwd·ls·cd로 리눅스 안을 누빈다
Step 1: "서버엔 화면이 없다 — 왜 리눅스, 왜 셸인가"
리눅스를 배우기 전에, 왜 굳이 검은 창에 명령어를 손수 입력하는지부터 짚고 갈게요. 우리는 평소 마우스로 폴더를 더블클릭하고 아이콘을 끌어다 놓습니다. 편하죠. 그런데 개발자가 코드를 올려 실제로 돌리는 서버에는 화면도 마우스도 없습니다.
클라우드의 가상 서버, 도커 컨테이너, CI 빌드 머신 — 이들과 대화하는 유일한 통로가 바로 셸(shell, 명령어를 받아 운영체제에 전달하는 통역사), 곧 명령어를 주고받는 텍스트 창입니다.
마우스(GUI)와 명령어(셸)가 각자 잘하는 일이 따로 있어요. 아래 표를 보면 "아, 그래서 서버에선 명령어구나" 하고 감이 올 겁니다.
| 상황 | 마우스(GUI) | 명령어(셸·CLI) |
|---|---|---|
| 내 노트북에서 파일 하나 열기 | 편하다 | 굳이? |
| 화면 없는 원격 서버 다루기 | 불가능 | 유일한 길 |
| 파일 1,000개를 한 번에 이름 바꾸기 | 1,000번 클릭 | 한 줄 명령 |
| 매일 새벽 3시에 백업 실행 | 사람이 깨어 있어야 | 스크립트가 알아서 |
| "에러가 난 줄만 모아줘" | 눈으로 스크롤 | 명령 한 줄 |
전 세계 웹 서버, 도커 컨테이너, 클라우드 인스턴스의 절대다수가 리눅스에서 돕니다. 안드로이드폰도, 슈퍼컴퓨터도 리눅스 커널 위에 있어요. 윈도우·맥에서 개발하더라도, 코드를 배포하는 순간 리눅스를 만납니다. 그래서 "리눅스 셸을 다룰 줄 안다"는 건 개발자에게 가장 든든한 기본기예요.
그리고 이 명령어들 뒤에는 한 가지 철학이 흐릅니다. 리눅스가 물려받은 유닉스(Unix)라는 1970년대 운영체제의 정신인데, "작은 도구 하나가 한 가지 일을 아주 잘하고, 그런 도구들을 이어 붙여 큰일을 해낸다"는 생각이에요.
오늘 배우는 ls도, 다음 모듈들에서 만날 grep도 다 이 철학의 산물입니다. 이 "이어 붙이기"는 A-4에서 파이프(|)로 본격적으로 다룰게요.
💡 한 줄 정리
서버에는 화면이 없기 때문에, 셸은 "편한 선택지"가 아니라 서버를 다루는 "유일한 통로"다.
🙋 학생 질문 — "마우스가 훨씬 편한데, 왜 굳이 명령어를 외워야 하나요?"
좋은 질문이에요. 사실 외울 필요 없습니다. 오늘 마지막 Step에서 "명령을 외우는 대신 찾는 법"을 배울 거예요.
핵심은 "편함"이 아니라 "가능함"이에요. 내 노트북에서야 마우스가 편하지만, 화면이 없는 원격 서버 앞에선 마우스를 쓸 방법 자체가 없습니다. 게다가 "파일 1,000개 이름 바꾸기"처럼 사람 손으로는 끔찍한 일을, 셸은 한 줄로 끝내요. 지금은 "서버에선 이게 유일한 길이구나" 정도만 받아들이면 충분합니다.
Step 2: "검은 창을 내 손에 — 배포판 고르고 터미널 열기"
이제 직접 리눅스 터미널을 손에 넣어 봅시다. 그 전에 "배포판"이라는 말부터 정리할게요. 앞에서 "리눅스"는 운영체제의 심장인 커널을 가리킨다고 했죠. 그 커널만으로는 일반 사용자가 쓰기 어려워서, 필요한 프로그램들을 함께 묶어 설치하기 좋게 만든 꾸러미가 배포판(distribution)입니다.
배포판은 크게 두 계열로 나뉘어요. 데비안 계열(Ubuntu·Debian, 프로그램 설치 명령이 apt)과 레드햇 계열(RHEL·Fedora·Rocky, 명령이 dnf)입니다.
우리는 입문·웹 서버·클라우드에서 가장 흔한 Ubuntu 26.04 LTS를 기준으로 배웁니다. 24.04 LTS도 여전히 널리 쓰이는데, 명령어는 양쪽이 똑같으니 둘 중 무엇이든 괜찮아요.
LTS가 뭔가요: Long Term Support, 곧 "장기 지원"이라는 뜻이에요. 5년간 보안 업데이트를 받는 안정 버전이라 서버에 주로 이 LTS를 깝니다. 셸 명령(
ls·cd·cp…) 자체는 배포판이나 버전과 상관없이 똑같으니, 버전 숫자에 너무 신경 쓰지 않아도 됩니다.
여러분의 환경에 맞는 트랙 하나만 골라 5분 안에 리눅스 셸을 손에 넣어 봅시다.
| 트랙 | 누구에게 | 손에 넣는 법 |
|---|---|---|
| 🌟 WSL2 | 윈도우 사용자(권장) | PowerShell에서 wsl --install 한 줄 → 재부팅 → 사용자 생성 |
| 터미널 | 맥 사용자 | 기본 터미널 앱(zsh) — 명령 대부분 그대로 통함 |
| VM·클라우드 | 어떤 OS든 | VirtualBox·Multipass로 로컬 VM, 또는 클라우드 무료 인스턴스 |
윈도우 사용자라면 WSL2를 권합니다. 진짜 Ubuntu가 윈도우 안에서 그대로 도는 방식이라 입문 허들이 가장 낮아요. 관리자 권한으로 연 PowerShell에 다음 한 줄을 칩니다.
wsl --install
재부팅한 뒤 사용자 이름과 비밀번호를 한 번 정해주면 끝이에요. 그러면 진짜 Ubuntu 셸이 열립니다.
⚠️ "Git Bash로 따라오면 안 되나요?" — git-github에서 써봤을 수 있죠. 하지만 Git Bash는 윈도우 위에 셸을 흉내 낸 얇은 층이라, 명령을 쳐볼 순 있어도 리눅스의 권한·프로세스·
/etc같은 핵심이 가짜로 동작합니다. 우리는 진짜 리눅스가 필요하니, 윈도우에선 WSL2(진짜 Ubuntu)를 씁니다.
맥 사용자는 별도 설치 없이 기본 터미널 앱을 열면 됩니다. 맥의 기본 셸은 zsh지만 오늘 배우는 명령은 거의 그대로 통하니 걱정 마세요. 어떤 OS든 "진짜 리눅스 한 대"를 통째로 갖고 싶다면 VM이나 클라우드 무료 인스턴스를 쓰는 방법도 있는데, 이건 A-7에서 SSH 원격 접속과 함께 자연스럽게 이어집니다.
💡 한 줄 정리
리눅스는 배포판(Ubuntu·Fedora…)으로 만나며, 윈도우에선 wsl --install 한 줄로 진짜 Ubuntu를 손에 넣는다.
🙋 학생 질문 — "꼭 Ubuntu여야 하나요? 다른 배포판을 깔면 수업을 못 따라가요?"
전혀요. 이 과목에서 배우는 셸 명령(ls·cd·pwd·grep…)은 배포판이 무엇이든 똑같이 동작합니다. Ubuntu든 Fedora든 결과가 같아요.
배포판마다 다른 건 딱 하나, "프로그램을 설치하는 명령"입니다. 데비안 계열은 apt, 레드햇 계열은 dnf를 쓰죠. 이 차이는 A-6에서 두 명령을 나란히 짚어줄 테니, 지금은 가장 흔한 Ubuntu로 시작하면 됩니다. 설치하다 에러가 나면 보통 재부팅 한 번이나 "WSL 업데이트"로 풀리니, 막히면 편하게 질문하세요.
Step 3: "이 검은 창의 정체 — 셸·터미널·커널, 그리고 프롬프트 읽기"
터미널을 열었으니, 이 검은 창의 정체를 한 번 정리하고 갑시다. 사람들이 자주 섞어 쓰는 세 단어 — 터미널, 셸, 커널 — 은 사실 층이 다릅니다. 이걸 한 번 구분해두면 앞으로 헷갈리지 않아요.
내가 ls라고 입력하면 무슨 일이 벌어질까요? 셸이 내 명령을 받아 해석하고, 운영체제의 핵심인 커널에게 일을 시키고, 그 결과를 다시 화면에 돌려줍니다.
나(사용자)
│ ls 라고 입력
▼
셸(shell) ← 내 명령을 해석하는 통역사 (bash)
│ "디렉토리 목록을 보여줘" 라고 커널에 요청
▼
커널(kernel) ← 운영체제의 심장, 하드웨어를 직접 다룸
│ 디스크에서 파일 목록을 읽음
▼
하드웨어(디스크·CPU·메모리)
│
▼ 결과가 거꾸로 올라와 화면에 출력
나에게 목록 표시
- 터미널(terminal): 셸과 내가 글자를 주고받는 창 그 자체. WSL2 창, 맥의 터미널 앱이 모두 터미널이에요. 비유하면 통화가 오가는 전화기입니다.
- 셸(shell): 사람의 명령어를 운영체제가 알아듣는 요청으로 바꿔주는 통역사. 이 과목은 가장 널리 쓰이는 bash를 기준으로 합니다.
- 커널(kernel): 운영체제의 핵심. 디스크·메모리·CPU를 직접 만지는 유일한 층이에요. "리눅스"라는 말은 엄밀히 이 커널을 가리킵니다. 실제로 일을 처리하는 심장이죠.
이제 터미널에 보이는 한 줄을 읽어봅시다. 명령을 기다리는 이 표시를 프롬프트(prompt)라고 해요. 보통 이렇게 생겼습니다.
jaehoon@DESKTOP-A1B2C3:~$
이 짧은 한 줄이 사실 네 가지를 말해주고 있어요.
jaehoon— 지금 로그인한 내 사용자 이름DESKTOP-A1B2C3— 이 컴퓨터(호스트)의 이름~— 지금 내가 서 있는 위치.~는 내 홈 디렉토리를 뜻해요(곧 나옵니다)$— "명령을 기다린다"는 표시. 일반 사용자는$, 관리자(root)는#로 바뀝니다
$와 #의 차이는 중요해요. #가 보이면 지금 막강한 관리자 권한이라는 신호라서, 명령 하나하나를 더 조심해야 합니다. 관리자 권한 이야기는 A-3에서 제대로 다룰게요.
앞으로 예제에선 프롬프트를
$하나로 줄여 적을게요.$뒤에 오는 게 여러분이 입력하는 명령이고, 그 아래 줄이 명령의 결과입니다.
💡 한 줄 정리
터미널은 글자가 오가는 창, 셸은 내 명령을 해석하는 통역사, 커널은 하드웨어를 부리는 심장이며, 프롬프트는 "내가 누구로 어디에 있는지"를 알려준다.
🙋 학생 질문 — "맥은 bash가 아니라 zsh라던데, 그럼 수업이랑 다른 건가요?"
거의 같습니다. zsh는 bash의 사촌 같은 셸이라, 오늘 배우는 pwd·ls·cd를 비롯해 이 과목 명령의 대부분이 똑같이 동작해요.
아주 세세한 차이(프롬프트 모양, 일부 고급 문법)는 있지만 입문 단계에선 신경 쓸 필요가 없습니다. 정 진짜 bash 환경에서 똑같이 맞추고 싶다면 맥에서 bash라고 입력해 잠깐 bash로 넘어갈 수도 있어요. 하지만 그냥 기본 zsh로 따라와도 전혀 문제없습니다.
Step 4: "리눅스의 지도 — 파일시스템 계층구조(FHS)"
이제 리눅스 안을 돌아다니기 전에, 전체 지도를 머릿속에 그려둡시다. 길을 잃지 않으려면 지도가 있어야 하니까요.
윈도우는 C:\, D:\처럼 드라이브가 여러 개로 나뉘죠. 리눅스는 다릅니다. 단 하나의 뿌리 /(루트라고 읽어요)에서 모든 것이 나무처럼 가지를 뻗어요. USB를 꽂아도 새 드라이브 문자가 생기는 게 아니라, 이 하나의 나무 어딘가에 폴더로 연결됩니다.
이 구조에는 FHS(Filesystem Hierarchy Standard, 파일시스템 계층구조 표준)라는 약속이 있어서, 어느 배포판이든 "무엇이 어디에 사는지"가 거의 같아요. 주요 가지만 알아두면 됩니다.
/ 모든 것의 출발점, 최상위 "루트(root)"
├─ home/ 사용자별 개인 공간이 모인 곳
│ └─ jaehoon/ └ 한 사람의 홈 디렉토리 (~ 로 줄여 부름)
├─ etc/ 시스템 전체 설정 파일 모음 (텍스트 파일들)
├─ var/ 로그처럼 계속 변하는 데이터 (/var/log)
├─ usr/ 설치된 프로그램·라이브러리
├─ bin/ 기본 명령어 실행 파일 (ls, cp, cat ...)
├─ tmp/ 잠깐 쓰고 지워지는 임시 파일
└─ root/ 관리자(root) 계정의 홈 (/home 아래가 아님에 주의)
지금 당장 이걸 다 외울 필요는 없어요. 다만 두 곳만 기억해두면 현업에서 큰 도움이 됩니다. 첫째, /home/내이름은 내 개인 공간이라 마음껏 만들고 지워도 돼요. 둘째, /etc에는 시스템 설정이, /var/log에는 로그가 삽니다. 서버에서 "설정 어디 있지?", "에러 로그 어디서 보지?" 할 때 가장 먼저 찾아갈 곳이에요.
왜 지도가 중요한가: 현업에서 서버에 처음 들어가면 누구나 "여기가 어디지?" 하고 막막해요. 그런데 이 지도가 머릿속에 있으면, 로그를 보러
/var/log로, 설정을 고치러/etc로 곧장 갈 수 있습니다. 길을 아는 사람과 모르는 사람의 차이가 여기서 갈려요.
💡 한 줄 정리
리눅스는 드라이브를 나누지 않고 단 하나의 뿌리 /에서 모든 것이 가지를 뻗으며, /home은 내 공간, /etc는 설정, /var/log는 로그가 사는 곳이다.
🙋 학생 질문 — "/root랑 /home이랑 헷갈려요. 둘 다 홈 아닌가요?"
이름이 비슷해서 정말 자주 헷갈리는 부분이에요. 정리하면 이렇습니다.
/home은 일반 사용자들의 홈이 모이는 동네예요. 그 안에 /home/jaehoon, /home/minji처럼 사람마다 방이 하나씩 있죠.
반면 /root는 관리자(root) 한 명만의 홈이라, 일부러 /home 바깥 최상위에 따로 두었습니다. 관리자는 특별한 존재라 방도 따로 있다고 생각하면 쉬워요. 그래서 /(뿌리)와 /root(관리자 홈)도 다른 곳이라는 점, 같이 기억해두세요.
Step 5: "길을 가리키는 두 방법 — 절대경로와 상대경로"
지도를 봤으니, 이제 "어떤 위치를 가리키는 법"을 배울 차례예요. 리눅스에서 위치를 말하는 방법은 두 가지입니다. 절대경로와 상대경로.
절대경로(absolute path)는 뿌리 /에서 시작해 목적지까지 빠짐없이 적는 방식이에요. 우편으로 치면 "서울특별시 강남구 …"처럼 전체 주소를 다 쓰는 거죠. 어디서 부르든 항상 같은 곳을 가리킵니다.
상대경로(relative path)는 "지금 내가 서 있는 곳"을 기준으로 적는 방식입니다. "여기서 두 번째 골목"처럼요. 내 위치가 바뀌면 가리키는 곳도 따라 바뀌어요.
절대경로: /home/jaehoon/practice/notes.txt
└ 뿌리(/) 부터 빠짐없이 — 어디서 부르든 같은 곳
상대경로: practice/notes.txt (지금 위치가 /home/jaehoon 일 때)
└ 지금 서 있는 곳 기준 — 위치가 바뀌면 가리키는 곳도 바뀐다
그리고 경로를 짧게 줄여 쓰는 세 가지 기호가 있어요. 이건 매일 쓰게 되니 꼭 익혀두세요.
~(틸드) — 내 홈 디렉토리./home/jaehoon을~한 글자로 부를 수 있어요.(점 하나) — 지금 내가 있는 현재 폴더..(점 둘) — 한 단계 위 폴더(부모 폴더)
예를 들어 내가 /home/jaehoon/practice에 있을 때, ..는 /home/jaehoon을, ~는 똑같이 /home/jaehoon을(홈이니까), .은 지금 있는 practice 자신을 가리킵니다.
💡 한 줄 정리
절대경로는 뿌리 /부터 쓰는 전체 주소, 상대경로는 현재 위치 기준의 주소이며, ~(홈)·.(현재)·..(상위) 기호로 경로를 줄여 쓴다.
🙋 학생 질문 — ".은 어차피 지금 위치인데, 굳이 왜 쓰나요?"
좋은 의문이에요. 길을 찾을 때만 보면 .이 쓸모없어 보이죠. 하지만 "지금 이 폴더를 콕 집어 가리켜야 할 때"가 생깁니다.
예를 들어 나중에 직접 만든 스크립트를 실행할 때 ./backup.sh처럼 .을 붙여 "다른 데 말고 바로 여기 있는 그 파일"이라고 명시해요. 또 파일을 "현재 폴더로 복사"할 때 목적지로 .을 쓰기도 하고요. 지금은 "현재 폴더를 콕 집는 기호"라는 것만 알아두면 충분합니다. 실제로 쓰는 장면은 다음 모듈들에서 자연스럽게 만날 거예요.
Step 6: "첫 발걸음 — pwd·ls·cd로 누비기"
드디어 직접 손을 움직일 시간입니다. 리눅스 안을 누비는 데 가장 먼저 익혀야 할 세 명령 — pwd, ls, cd — 를 차례로 써볼게요. 터미널을 열어 그대로 따라 쳐보세요.
먼저 pwd(print working directory, 현재 위치 출력)입니다. "나 지금 어디 있지?"가 궁금할 때 가장 먼저 치는 명령이에요.
$ pwd
/home/jaehoon
지금 내 홈에 있네요. 다음은 ls(list, 목록 보기)로 이 폴더 안에 뭐가 있는지 봅시다.
$ ls
Desktop Documents Downloads Pictures
ls에 옵션을 붙이면 더 자세히 볼 수 있어요. -a는 숨김 파일까지(이름이 .으로 시작하는 파일은 평소엔 숨겨져요), -l은 한 줄에 하나씩 자세한 정보를 보여줍니다.
$ ls -a
. .. .bashrc .profile Desktop Documents Downloads Pictures
.bashrc 같은 숨김 파일이 보이죠? 맨 앞의 .과 ..은 Step 5에서 배운 "현재 폴더"와 "상위 폴더"입니다. 이제 cd(change directory, 폴더 이동)로 자리를 옮겨봅시다.
$ cd Documents
$ pwd
/home/jaehoon/Documents
Documents 안으로 들어왔어요. 다시 한 단계 위로 올라가려면 Step 5의 ..을 씁니다.
$ cd ..
$ pwd
/home/jaehoon
cd는 똑똑한 단축키가 몇 개 있어요. 아무것도 안 붙이고 cd만 치면 곧장 내 홈으로, cd -는 바로 직전에 있던 곳으로 돌아갑니다.
$ cd /var/log
$ cd -
/home/jaehoon
현업 서버에 SSH로 막 접속하면 "여기가 어디지?" 싶을 때가 많아요. 그럴 때 반사적으로
pwd(어디?) →ls(뭐가 있나?) → 필요하면cd(이동)를 치면, 낯선 서버에서도 길을 잃지 않습니다.
💡 한 줄 정리
pwd로 현재 위치를 확인하고, ls로 내용물을 보고, cd로 이동하는 이 세 명령이 리눅스를 누비는 기본 발걸음이다.
🙋 학생 질문 — "cd Documents 쳤는데 아무 메시지도 안 떠요. 실패한 건가요?"
아니에요, 성공한 겁니다! 리눅스에는 "조용한 성공"이라는 미덕이 있어요. 명령이 잘 됐을 때는 굳이 "성공했습니다"라고 떠들지 않고 조용히 다음 프롬프트를 내줍니다.
오히려 빨간 글씨나 메시지가 떴다면 그게 문제 신호예요. 예를 들어 없는 폴더로 이동하려 하면 No such file or directory(그런 파일이나 디렉토리가 없음)라고 알려줍니다. 그러니 아무 말 없이 프롬프트가 다시 나왔다면, 잘 된 거니 안심하고 pwd로 옮겨진 위치를 확인해보세요.
Step 7: "막혔을 때 살아남는 법 — man·--help·tldr"
마지막으로, 오늘 수업에서 가장 마음이 놓일 이야기를 할게요. 리눅스 명령은 수천 개고, 옵션은 그보다 훨씬 많습니다. 이걸 다 외우는 사람은 없어요. 베테랑 개발자도 매일 찾아봅니다. 그러니 우리가 배워야 할 건 "외우기"가 아니라 "찾는 법"이에요.
첫 번째는 man(manual, 매뉴얼)입니다. 명령의 공식 설명서를 보여줘요.
$ man ls
여기서 가장 중요한 건 빠져나오는 법입니다. man을 켜면 화면이 설명서로 꽉 차는데, q(quit) 한 글자를 누르면 빠져나옵니다. 이걸 모르면 "갇혔다!" 싶어 당황하기 쉬워요. (A-5에서 만날 vim도 비슷하게 빠져나오는 법이 따로 있는데, 그건 그때 안심시켜 드릴게요.)
man은 내용이 방대해서 입문자에겐 부담스러울 수 있어요. 그럴 땐 --help로 짧은 요약만 볼 수 있습니다. 거의 모든 명령이 이 옵션을 지원해요.
$ ls --help
세 번째는 tldr입니다. "too long; didn't read(너무 길어서 안 읽음)"의 약자인데, 이름처럼 긴 설명 대신 자주 쓰는 사용 예시만 콕 집어 보여줘요. 입문자에게 가장 친절한 도구입니다.
$ tldr ls
tldr은 기본 탑재가 아니라 따로 설치해야 합니다. 설치 명령(apt)과 관리자 권한(sudo)은 다음 모듈들에서 제대로 배울 테니, 지금은 "이런 친절한 도구가 있구나" 정도만 알아두면 돼요.
현업에서 모르는 명령을 만나면 부끄러워할 일이 전혀 아니에요. 오히려
man이나tldr로 바로 찾아 확인하는 사람이 실수 없이 일을 처리합니다. "찾을 줄 안다"가 "다 외운다"보다 강해요.
💡 한 줄 정리
명령을 다 외울 수 없으니 man(공식 설명서, 종료는 q)·--help(짧은 요약)·tldr(실전 예시)로 찾는 법을 익히는 것이 진짜 실력이다.
🙋 학생 질문 — "man 켰는데 도저히 빠져나올 수가 없어요!"
당황하지 마세요. 거의 모든 입문자가 한 번씩 겪는 일이에요. 키보드에서 q(영어 큐) 한 글자만 누르면 곧바로 빠져나옵니다.
man은 위아래 화살표나 스페이스바로 스크롤하며 읽는 "보기 전용" 화면이라, 글자를 타이핑한다고 뭔가 입력되지는 않아요. 읽기를 마쳤으면 q로 닫으면 됩니다. 이 q 하나만 기억하면 man이 더는 무섭지 않을 거예요.
마무리
첫 시간 정말 고생 많았어요. 검은 창이 처음엔 무서웠을 텐데, 이제 그 창을 열고 리눅스 안을 걸어 다닐 수 있게 됐습니다. 오늘 배운 걸 세 가지로 정리할게요.
오늘 배운 핵심 세 가지
💡 하나 — 서버에는 화면이 없어서, 셸은 편한 선택이 아니라 서버를 다루는 유일한 통로다. 그 셸을 윈도우에선 wsl --install 한 줄로 손에 넣는다.
💡 둘 — 터미널(창)·셸(통역사)·커널(심장)은 층이 다르며, 프롬프트는 "내가 누구로 어디에 있는지"를 알려준다. 리눅스는 단 하나의 뿌리 /에서 모든 것이 가지를 뻗는다.
💡 셋 — pwd(어디?)·ls(뭐가 있나?)·cd(이동)로 길을 잃지 않고 누비고, 막히면 man·--help·tldr로 찾는다.
다음 시간 예고
오늘은 리눅스 안을 "걸어 다니는" 법을 익혔어요. 그런데 여행자가 길만 알고 끝나면 아쉽죠. 다음 시간(A-2)엔 직접 파일을 만들고, 복사하고, 옮기고, 이름을 바꾸고, 지워봅니다. 내 손으로 리눅스를 다듬기 시작하는 거예요.
특히 "지우기"는 조심스럽게 다룰 거예요. 리눅스에는 윈도우 같은 휴지통이 없어서, 한 번 지운 파일은 되돌릴 수 없거든요. 무섭게 들리겠지만 괜찮아요. "치기 전에 확인하고, 중요한 건 백업하는" 안전한 습관을 함께 익히면 됩니다. 그럼 다음 시간에 만나요.
과제
오늘 과제는 모두 여러분 자신의 리눅스 환경(WSL2·맥 터미널·VM)에서 직접 손으로 쳐보는 실습이에요. 결과 화면을 눈으로 확인하며 천천히 따라오세요.
[기초] 내 홈 둘러보기
터미널을 열고 다음을 순서대로 실행해보세요. 각 단계에서 프롬프트와 결과가 어떻게 바뀌는지 직접 적어봅니다.
pwd로 지금 내 위치를 확인한다ls와ls -a를 각각 쳐서 무엇이 다른지 비교한다 (숨김 파일이 어떻게 나타나는지)cd /etc로 설정 폴더에 갔다가,cd(아무것도 안 붙이고)로 홈에 돌아온다- 돌아온 뒤 다시
pwd로 정말 홈으로 왔는지 확인한다
[응용] 두 가지 길로 같은 곳에 가기
리눅스 로그가 사는 /var/log에, 절대경로와 상대경로 두 가지 방법으로 각각 가보세요.
- 먼저 절대경로로 한 번에 이동한다 (
/로 시작하는 전체 주소) - 홈으로 돌아온 뒤, 이번엔
..을 여러 번 써서 상대경로로 같은 곳에 가본다 /var/log에서ls로 어떤 로그 파일들이 있는지 확인한다- 추가로
man ls를 읽고-lh옵션이 무엇을 하는지 찾아,ls -lh를 직접 적용해본다 (읽기를 마치면q로 빠져나오기)
[심화] 낯선 서버에서 길 잃지 않기 (서버 상황 상상)
현업 상황을 상상해봅시다. "방금 어떤 서버에 막 접속했는데, 내가 어디에 있고 무엇을 다룰 수 있는지 전혀 모르겠다." 길을 잃지 않기 위한 나만의 점검 순서를 직접 설계해보세요.
- "어디에 있나 → 무엇이 있나 → 안전한 내 홈으로" 흐름을 어떤 명령으로 구성할지 적는다
- 그 순서를 실제로 자기 환경에서 실행해본다
- 마지막으로, 서버 에러를 추적해야 하는 상황을 가정해 로그가 사는 곳(
/var/log)까지 직접 찾아가ls로 무엇이 있는지 살펴본다
생각해볼 주제
1. 50년 된 텍스트 명령어가 왜 아직도 서버의 표준일까
화려한 그래픽 인터페이스가 넘치는 시대에, ls 같은 수십 년 된 텍스트 명령어가 여전히 서버를 다루는 표준입니다. 마우스 클릭보다 명령어 입력이 서버 환경에서 더 강력한 이유가 무엇일지, 효율·자동화·원격·재현성이라는 네 단어를 실마리 삼아 생각해보세요.
2. "하나의 도구가 한 가지만 잘한다"는 유닉스 철학의 힘
유닉스 철학은 ls가 정렬·검색·압축까지 전부 떠안는 대신, 작은 도구 여럿이 한 가지씩만 잘하도록 설계했습니다. 한 명령에 모든 기능을 몰아넣지 않고 작게 쪼갠 이 선택이, 왜 오히려 더 유연하고 강력한 결과를 낳는지 고민해보세요.
3. 자동화 스크립트에는 절대경로와 상대경로 중 무엇이 안전할까
매일 새벽 자동으로 도는 백업 스크립트를 짠다고 상상해봅시다(A-12에서 직접 만들 거예요). 이 스크립트가 어디서 실행되든 항상 같은 파일을 정확히 가리키게 하려면, 절대경로와 상대경로 중 어느 쪽이 더 안전할지, 그리고 그 반대를 골랐을 때 어떤 사고가 날 수 있을지 생각해보세요.
✅ 예시 답안정답 보기
과제와 생각해볼 주제의 예시답안입니다. 모든 명령은 여러분 자신의 환경에서 직접 쳐보며 확인하는 게 가장 중요해요. 결과가 책과 조금 달라도(파일 이름·개수 등) 정상이니 당황하지 마세요. 흐름이 맞는지를 보면 됩니다.
🎯 [과제 1 예시답안] 내 홈 둘러보기
채점 포인트
| 확인 항목 | 무엇을 보면 되는가 |
|---|---|
| 현재 위치 확인 | pwd가 /home/내이름 같은 절대경로를 보여주는가 |
| 숨김 파일 차이 | ls -a에서 .으로 시작하는 파일(.bashrc 등)이 추가로 보이는가 |
| 홈으로 복귀 | cd만 쳤을 때 어디 있었든 홈으로 돌아오는가 |
| 프롬프트 변화 관찰 | 이동할 때마다 프롬프트의 위치 표시가 어떻게 바뀌는지 적었는가 |
풀이 예시
$ pwd
/home/jaehoon
$ ls
Desktop Documents Downloads Pictures
$ ls -a
. .. .bashrc .profile Desktop Documents Downloads Pictures
$ cd /etc
$ pwd
/etc
$ cd
$ pwd
/home/jaehoon
ls와 ls -a의 차이가 핵심이에요. 평소엔 보이지 않던 .bashrc, .profile 같은 파일이 -a를 붙이자 나타났죠? 이름이 .으로 시작하는 파일은 리눅스가 평소에 숨겨둡니다. 대부분 사용자가 자주 볼 필요 없는 설정 파일이라서예요.
/etc로 갔을 때 프롬프트의 위치 표시가 ~에서 /etc로 바뀌고, cd만 치자 다시 ~(홈)로 돌아오는 것도 확인했을 거예요.
💡 튜터의 한마디 — cd를 아무것도 안 붙이고 치면 "묻지도 따지지도 말고 내 홈으로" 가는 단축키예요. 낯선 곳에서 길을 잃었을 때 cd 한 번이면 안전한 내 집으로 돌아올 수 있으니 꼭 기억해두세요.
🎯 [과제 2 예시답안] 두 가지 길로 같은 곳에 가기
채점 포인트
| 확인 항목 | 무엇을 보면 되는가 |
|---|---|
| 절대경로 이동 | /로 시작하는 전체 주소로 /var/log에 한 번에 갔는가 |
| 상대경로 이동 | ..을 적절히 써서 같은 곳에 도착했는가 |
| 두 결과가 같은가 | 어느 길로 가든 pwd 결과가 /var/log로 같은가 |
| 옵션 찾아 적용 | man ls로 -lh의 뜻을 찾아 ls -lh를 실제로 적용했는가 |
풀이 예시
$ pwd
/home/jaehoon
# 절대경로 — 어디서 부르든 한 번에
$ cd /var/log
$ pwd
/var/log
# 홈으로 돌아와서, 이번엔 상대경로로
$ cd
$ cd ../../var/log
$ pwd
/var/log
상대경로 ../../var/log를 한 단계씩 따라가 볼까요? 시작이 /home/jaehoon이니, ..로 /home, 다시 ..로 /(뿌리)까지 올라간 다음, 거기서 var/log로 내려간 거예요. 절대경로 /var/log와 똑같은 곳에 도착했죠.
이제 man ls로 -lh가 뭔지 찾아봅니다. -l은 한 줄에 하나씩 자세히, -h는 파일 크기를 사람이 읽기 좋은 단위(K·M)로 보여주는 옵션이에요. (설명서를 다 봤으면 q로 빠져나오기!)
$ ls -lh
total 4.2M
-rw-r----- 1 syslog adm 1.2M Jun 16 09:14 auth.log
-rw-r--r-- 1 root root 240K Jun 16 09:02 dpkg.log
-rw-r----- 1 syslog adm 2.1M Jun 16 09:15 syslog
💡 튜터의 한마디 — 절대경로는 "전체 주소"라 어디서 부르든 같은 곳을 가리키고, 상대경로는 "지금 내 위치 기준"이라 출발점이 바뀌면 결과도 바뀝니다. 맨 앞에 보이는 -rw-r----- 같은 권한 표시가 궁금하셨다면, 그건 A-3에서 제대로 읽는 법을 배울 거예요.
🎯 [과제 3 예시답안] 낯선 서버에서 길 잃지 않기
채점 포인트
| 확인 항목 | 무엇을 보면 되는가 |
|---|---|
| 점검 순서 설계 | "어디에 있나 → 무엇이 있나 → 안전한 홈으로" 흐름을 명령으로 옮겼는가 |
| 실제 실행 | 설계한 순서를 자기 환경에서 직접 실행했는가 |
| 로그 위치 추적 | 로그가 사는 /var/log까지 찾아가 ls로 살펴봤는가 |
풀이 예시
낯선 서버에 막 들어갔을 때의 점검 순서를 명령으로 옮기면 이렇게 됩니다.
# 1. 나 지금 어디 있나?
$ pwd
/home/deploy
# 2. 여기엔 뭐가 있나?
$ ls -a
. .. .bashrc app logs
# 3. 일단 안전한 내 홈으로 (방향 감각 리셋)
$ cd
# 4. 에러 추적 — 로그가 사는 곳으로
$ cd /var/log
$ ls
auth.log dpkg.log nginx syslog
순서가 핵심이에요. 무작정 이것저것 만지기 전에, pwd로 내 위치를 확인하고 ls로 주변을 살피는 습관 하나면 어떤 서버에서도 침착할 수 있습니다.
💡 튜터의 한마디 — 현업에서 서버에 처음 들어가면 누구나 막막해요. 그때 pwd → ls → cd 세 명령을 반사적으로 떠올리면 길을 잃지 않습니다. 참고로 "원격 서버에 들어가는" SSH 접속은 A-7에서 배울 거예요. 지금은 자기 환경에서 이 흐름을 익혀두는 것만으로 충분합니다.
🤔 [생각해볼 주제 1] 50년 된 텍스트 명령어가 왜 아직도 서버의 표준일까
문제 상황 요약
화려한 그래픽 인터페이스가 넘치는 시대에, ls 같은 수십 년 된 텍스트 명령어가 여전히 서버를 다루는 표준입니다. 마우스 클릭이 더 직관적인데, 왜 서버 환경에선 명령어가 더 강력할까요?
튜터의 가이드 및 해설
실마리였던 네 단어로 하나씩 풀어볼게요.
- 효율 — "파일 1,000개 이름 바꾸기"를 마우스로 하면 1,000번 클릭, 명령어로는 한 줄입니다. 반복 작업일수록 격차가 벌어져요.
- 원격 — 화면 없는 서버를 다루는 유일한 통로가 텍스트 명령입니다. 그래픽을 통째로 전송하는 것보다 글자 몇 줄을 주고받는 게 훨씬 가볍고 빠르기도 하죠.
- 자동화 — 명령은 텍스트라서 그대로 파일에 적어 스크립트로 만들 수 있어요. "매일 새벽 3시 백업"처럼 사람 없이 도는 일을 맡길 수 있습니다(A-12에서 직접 만들어요).
- 재현성 — 가장 중요한 지점이에요. 마우스 클릭은 기록도, 남에게 정확히 전달하기도 어렵습니다. 반면 명령어는 "이 한 줄을 그대로 치세요"라고 공유하면 누구 컴퓨터에서든 똑같이 재현됩니다.
결국 명령어가 "편함"에서 마우스에 밀리는 건 사실이지만, "기록하고·자동화하고·정확히 재현한다"는 점에서 서버 운영의 본질에 맞아떨어집니다.
💡 핵심을 한마디로
"마우스 클릭은 그 순간 한 번 일어나고 사라지지만, 명령어는 텍스트로 남아 스크립트가 되고 그대로 공유·재현됩니다. 서버 운영의 핵심인 자동화와 재현성이 바로 여기서 나옵니다."
🤔 [생각해볼 주제 2] "하나의 도구가 한 가지만 잘한다"는 유닉스 철학의 힘
문제 상황 요약
유닉스 철학은 ls가 정렬·검색·압축까지 전부 떠안는 대신, 작은 도구 여럿이 한 가지씩만 잘하도록 설계했습니다. 기능을 한곳에 몰아넣지 않고 작게 쪼갠 이 선택이 왜 오히려 더 강력할까요?
튜터의 가이드 및 해설
ls가 목록 보기·검색·정렬·압축을 전부 한다고 상상해봅시다. 옵션이 수백 개로 불어나고, 새 기능 하나를 고칠 때마다 거대한 덩어리 전체를 건드려야 합니다. 배우기도, 고치기도 어려워지죠.
대신 리눅스는 작게 쪼갰습니다. ls는 목록만, grep은 검색만, sort는 정렬만 잘합니다. 그리고 이 작은 도구들을 파이프(|)로 이어 붙여 큰일을 해내요(이 "이어 붙이기"는 A-4에서 배웁니다).
$ ls | grep log | sort
이게 강력한 이유는 조합 가능성이에요. 도구가 셋만 있어도 잇는 방법은 수십 가지가 되고, 새 도구가 하나 늘면 가능한 조합이 곱으로 늘어납니다. 한 도구가 모든 걸 다 하려 했다면 불가능한 유연함이죠. 도구 하나하나가 단순하니 배우기 쉽고, 고장 나도 그 도구만 고치면 된다는 장점도 큽니다.
💡 핵심을 한마디로
"한 도구에 모든 기능을 넣으면 거대하고 고치기 어려운 덩어리가 되지만, 한 가지만 잘하는 작은 도구들은 파이프로 무한히 조합됩니다. 단순함이 오히려 더 큰 유연함을 낳는 것, 이것이 유닉스 철학의 힘입니다."
🤔 [생각해볼 주제 3] 자동화 스크립트엔 절대경로와 상대경로 중 무엇이 안전할까
문제 상황 요약
매일 새벽 자동으로 도는 백업 스크립트를 짠다고 상상해봅시다(A-12에서 직접 만들어요). 이 스크립트가 어디서 실행되든 항상 같은 파일을 정확히 가리키게 하려면, 절대경로와 상대경로 중 어느 쪽이 안전할까요?
튜터의 가이드 및 해설
핵심은 "스크립트가 실행되는 위치(현재 폴더)를 내가 통제할 수 없다"는 점이에요. 새벽에 자동으로 도는 스크립트는 내가 직접 그 폴더에 서서 실행하는 게 아니거든요.
상대경로 data/photos로 적었다고 해봅시다. 스크립트가 /home/jaehoon에서 돌면 /home/jaehoon/data/photos를 가리키지만, 다른 위치에서 돌면 엉뚱한 곳을 가리키거나 "그런 폴더 없음" 에러로 백업이 통째로 실패합니다. 현재 위치라는 "가정"에 기대고 있기 때문이에요.
반면 절대경로 /home/jaehoon/data/photos는 어디서 실행되든 항상 같은 곳을 가리킵니다. 그래서 자동화 스크립트에서는 절대경로가 안전해요.
다만 절대경로를 코드 곳곳에 그대로 박으면, 나중에 폴더를 옮길 때 일일이 고쳐야 하는 불편함이 있습니다. 그래서 실무에선 경로를 변수에 한 번만 담아두고(예: BACKUP_DIR=/home/jaehoon/data) 그 변수를 쓰는 방식으로 두 마리 토끼를 잡아요. 이런 변수 활용도 A-8에서 다룹니다.
💡 핵심을 한마디로
"자동으로 도는 스크립트는 어느 위치에서 실행될지 보장할 수 없습니다. 그래서 현재 위치에 기대는 상대경로 대신, 어디서든 같은 곳을 가리키는 절대경로가 안전합니다. 다만 절대경로는 변수에 담아 한곳에서 관리하면 유지보수까지 챙길 수 있습니다."