리눅스 / 우분투 가이드
개념, 윈도우즈와의 차이, 터미널 명령어와 옵션(-, --)까지 한 번에 정리
1. 리눅스란?
1-1. 커널 + 배포판
리눅스(Linux)는 1991년 리누스 토르발스(Linus Torvalds)가 만든 운영체제(OS) 커널의 이름이다. 오픈소스(소스코드 공개, 누구나 무료 사용·수정·배포 가능)라는 점이 가장 큰 특징.
정의
엄밀히 말하면 우리가 "리눅스"라 부르는 것은
리눅스 커널 + GNU 도구들 + 각종 응용 프로그램을 묶은
배포판(Distribution, distro)이다.
대표 배포판 계열
| 계열 | 대표 배포판 | 특징 | 패키지 매니저 |
| Debian |
Ubuntu, Debian, Linux Mint |
초보자 친화적, 데스크톱·서버 모두 강력 |
apt / dpkg |
| Red Hat |
RHEL, Rocky, CentOS, Fedora |
기업·서버용, 안정성 중시 |
dnf / yum / rpm |
| Arch |
Arch Linux, Manjaro |
최신 패키지, 고급 사용자용 |
pacman |
| SUSE |
openSUSE, SLES |
유럽권 기업에서 다수 사용 |
zypper |
1-2. 우분투(Ubuntu)의 위치
Ubuntu는 데비안 기반 배포판 중 가장 대중적이고 입문에 좋다. 캐노니컬(Canonical)사가 후원하며, 데스크톱·서버·클라우드·IoT 전 영역에서 광범위하게 사용된다.
Desktop
Server
Cloud (AWS / GCP / Azure)
WSL on Windows
Raspberry Pi
버전 번호는 YY.MM 형식 (예: 24.04 = 2024년 4월 출시). 짝수 해 4월 버전은 LTS(Long Term Support)로 5년 이상 지원된다.
2. 윈도우즈 vs 리눅스
2-1. 한눈에 보는 비교표
| 항목 | Windows | Linux (Ubuntu) |
| 라이선스 | 상용, 유료 | 오픈소스, 무료 |
| 소스코드 | 비공개 | 공개 |
| 파일시스템 | NTFS, C:\ D:\ 드라이브 분리 | ext4 등, 단일 루트 / 트리 |
| 경로 구분자 | \ (백슬래시) | / (슬래시) |
| 대소문자 | 구분 안 함 (A.txt = a.txt) | 구분함 (A.txt ≠ a.txt) |
| 실행 파일 식별 | 확장자 (.exe, .bat) | 실행 권한 비트 (chmod +x) |
| 권한 모델 | 관리자 / 일반 | root / 일반, sudo로 권한 상승 |
| 소프트웨어 설치 | exe/msi 다운로드 | 패키지 매니저 (apt install) |
| 기본 셸 | cmd, PowerShell | bash, zsh |
| GUI 의존도 | GUI 중심 | CLI 중심, GUI는 선택사항 |
| 설정 저장 | 중앙 레지스트리 | 주로 텍스트 설정 파일 (/etc/) |
| 서버 점유율 | 낮음 | 압도적 1위 (웹서버 대부분) |
| 업데이트 방식 | 전체 재부팅 요구 多 | 대부분 재부팅 없이 즉시 적용 |
2-2. 리눅스(유닉스)의 핵심 철학
철학 1 — Everything is a file
파일뿐 아니라
디바이스, 프로세스, 네트워크 소켓까지 모두 파일처럼 다룬다. 그래서
/dev/sda(디스크),
/proc/cpuinfo(CPU 정보) 같은 것에
cat을 쓸 수 있다.
철학 2 — Do One Thing Well
하나의 명령은
한 가지 일만 잘하고,
파이프(|)로 여러 명령을 조합해 복잡한 작업을 만든다. (예:
ps aux | grep python | wc -l)
3. 파일시스템 구조
리눅스는 드라이브 문자(C:, D:)가 없다. 모든 것은 /(루트) 아래의 단일 트리에 매달려 있다. USB나 외장하드도 "마운트(mount)"되어 트리의 어느 디렉터리에 붙는다.
/ # 루트 — 모든 것의 시작
├── bin/ # 기본 실행 파일 (ls, cp, mv 등)
├── etc/ # 시스템 설정 파일 (텍스트)
├── home/ # 사용자 홈 (/home/shkim)
├── root/ # root 사용자 전용 홈
├── usr/ # 사용자 프로그램, 라이브러리
├── var/ # 가변 데이터 (/var/log: 로그)
├── tmp/ # 임시 파일 (재부팅 시 비워짐)
├── opt/ # 외부 패키지 (선택적)
├── dev/ # 디바이스 파일 (디스크, USB 등)
├── proc/ # 커널·프로세스 정보 (가상)
└── mnt/, media/ # 외부 저장장치 마운트 지점
단축 기호
~ : 현재 사용자 홈 (/home/shkim)
. : 현재 디렉터리
.. : 상위 디렉터리
- (cd -) : 직전 디렉터리로
4. 자주 쓰는 터미널 명령어
4-1. 파일/디렉터리 탐색
| 명령 | 의미 | 예시 |
pwd | 현재 경로 출력 (Print Working Directory) | pwd |
ls | 파일 목록 (List) | ls -al |
cd | 디렉터리 이동 (Change Directory) | cd ~/Documents |
tree | 트리 형태로 보기 | tree -L 2 |
4-2. 파일 조작
| 명령 | 의미 | 예시 |
mkdir | 폴더 생성 (MaKe DIRectory) | mkdir -p a/b/c |
touch | 빈 파일 생성 | touch hello.txt |
cp | 복사 (CoPy) | cp -r src/ dst/ |
mv | 이동 / 이름 변경 (MoVe) | mv a.txt b.txt |
rm | 삭제 (ReMove) | rm -rf dir/ |
ln -s | 심볼릭 링크 (단축아이콘) | ln -s /실제경로 별칭 |
⚠️ 주의
rm -rf / 같은 명령은 시스템 전체를 지워버릴 수 있다. 리눅스에는
휴지통이 없다 — 한번 지우면 끝.
4-3. 내용 보기 / 검색
| 명령 | 의미 | 예시 |
cat | 파일 내용 전체 출력 | cat file.txt |
less | 페이지 단위로 보기 (q로 종료) | less big.log |
head | 앞 N줄 | head -n 20 file |
tail | 뒤 N줄 / 실시간 | tail -f server.log |
grep | 텍스트 검색 | grep -r "error" . |
find | 파일 찾기 | find . -name "*.py" |
wc | 줄/단어/문자 수 세기 | wc -l file |
4-4. 권한 / 사용자
| 명령 | 의미 | 예시 |
chmod | 권한 변경 (CHange MODe) | chmod +x run.sh |
chown | 소유자 변경 | sudo chown shkim:shkim file |
sudo | root 권한으로 실행 (SuperUser DO) | sudo apt update |
whoami | 현재 사용자 이름 | whoami |
passwd | 비밀번호 변경 | passwd |
권한 숫자 계산법
r = 4,
w = 2,
x = 1 → 합산해서 표기.
chmod 755 file → 소유자
7(rwx) / 그룹
5(r-x) / 기타
5(r-x)
4-5. 패키지 관리 (Ubuntu)
| 명령 | 의미 |
sudo apt update | 패키지 목록 갱신 (설치 X, 정보만) |
sudo apt upgrade | 설치된 패키지 업그레이드 |
sudo apt install <패키지> | 설치 |
sudo apt remove <패키지> | 제거 (설정 유지) |
sudo apt purge <패키지> | 제거 + 설정 파일까지 삭제 |
apt search <키워드> | 패키지 검색 |
apt list --installed | 설치된 패키지 목록 |
4-6. 프로세스 / 시스템
| 명령 | 의미 | 예시 |
ps | 프로세스 목록 (Process Status) | ps aux | grep python |
top / htop | 실시간 모니터링 | htop |
kill | 프로세스 종료 | kill -9 1234 |
df | 디스크 용량 (Disk Free) | df -h |
du | 폴더 용량 (Disk Usage) | du -sh ./* |
free | 메모리 상태 | free -h |
uname | 시스템 정보 | uname -a |
uptime | 가동 시간 / 부하 | uptime |
4-7. 네트워크
| 명령 | 의미 |
ping <주소> | 연결 테스트 |
curl <URL> | HTTP 요청 (응답 본문 출력) |
wget <URL> | 파일 다운로드 |
ip addr / ifconfig | 네트워크 인터페이스 정보 |
ss -tulpn / netstat -tulpn | 열린 포트 / 연결 상태 |
ssh user@host | 원격 서버 접속 |
scp file user@host:/path | 원격으로 파일 복사 |
4-8. 파이프 · 리다이렉션
| 기호 | 의미 |
| | 파이프: 앞 명령의 출력을 뒤 명령의 입력으로 |
> | 표준 출력을 파일로 (덮어쓰기) |
>> | 표준 출력을 파일에 이어붙이기 |
2> | 표준 에러를 파일로 |
2>&1 | 표준 에러를 표준 출력과 합치기 |
< | 파일에서 입력 받기 |
& | 백그라운드 실행 |
조합 예시
# access.log에서 "404" 등장 횟수 세기
cat access.log | grep "404" | wc -l
# CPU 사용량 상위 5개 프로세스
ps aux | sort -k 3 -r | head -5
# 결과를 파일로 저장 + 에러도 같이
make build > build.log 2>&1
4-9. 단축키와 팁
- Tab — 자동완성 (파일명·명령어)
- Ctrl + C — 실행 중인 명령 중단
- Ctrl + D — 종료 / 로그아웃 (EOF 전송)
- Ctrl + R — 이전 명령 검색 (히스토리)
- Ctrl + L — 화면 지우기 (=
clear)
- ↑ / ↓ — 명령 히스토리 탐색
!! — 직전 명령 재실행 (예: sudo !!)
man <명령> — 매뉴얼 보기 (예: man ls)
history — 명령어 기록 보기
5. 명령어 옵션 (-, --) 해부
리눅스 명령어 뒤에 붙는 -l, -rf, --help 같은 것들이 옵션(option) 또는 플래그(flag)다. 명령의 동작을 세밀하게 조절하는 스위치라고 생각하면 된다.
기본 구조
명령어 [옵션] [인자]
# 예
ls -l /home
grep -i --color "error" log.txt
5-1. 짧은 옵션 — - + 알파벳 한 글자
대시 1개(-) + 알파벳 한 글자. 가장 흔한 형태. 1970년대 유닉스 전통.
ls -l # long: 상세 정보
ls -a # all: 숨김 파일 포함
rm -r # recursive: 하위 폴더까지
rm -f # force: 확인 없이
5-2. 긴 옵션 — -- + 단어
대시 2개(--) + 사람이 읽을 수 있는 단어. 1990년대 GNU 도구들에서 도입. 가독성이 높아서 스크립트에 쓰기 좋다.
ls --all # -a와 동일
rm --recursive # -r과 동일
grep --ignore-case # -i와 동일
git --version # 버전 출력
짧은 옵션 vs 긴 옵션
- 거의 대부분 같은 의미의 짝이 존재 (
-a = --all)
- 터미널에서 즉석으로 → 짧은 옵션 (타이핑 빠름)
- 스크립트·문서·자동화에 → 긴 옵션 (읽기 쉬움)
- 긴 옵션만 있는 기능도 있다 (자주 안 쓰는 고급 옵션)
5-3. 대문자 옵션 vs 소문자 옵션 — 완전히 다른 기능
리눅스는 대소문자를 구분한다. -r과 -R은 다른 옵션이다. 한 글자가 부족해서 대문자를 별도 의미로 쓰는 경우가 많다.
| 명령 | 소문자 | 대문자 |
ls |
-r 역순 정렬 |
-R 하위 디렉터리까지 재귀 |
grep |
-i 대소문자 무시 (ignore) |
-I 바이너리 파일 무시 |
tar |
-x 압축 풀기 (eXtract) |
-X 제외 목록 파일 지정 |
cp |
-r 재귀 복사 |
-R 재귀 복사 (cp는 같음) |
ssh |
-p 포트 번호 |
-P (scp에서) 포트 번호 |
find |
-name 이름 매칭 (대소문자 구분) |
-iname 매칭 (구분 X) |
⚠️ 헷갈리지 마
대소문자가 비슷한 의미인 경우(예:
cp -r vs
-R)도 있지만,
완전히 다른 기능인 경우가 훨씬 많다.
man 페이지로 꼭 확인하자.
5-4. 옵션 묶기와 인자
짧은 옵션은 묶어서 쓸 수 있다
# 다음 세 줄은 모두 같은 의미
ls -l -a -h
ls -l -a -h
ls -lah # 묶기 (가장 짧음)
※ 긴 옵션(--all)은 묶을 수 없다. 항상 따로 써야 한다.
옵션이 값을 받을 때
| 형태 | 예시 |
| 짧은 옵션 + 공백 + 값 | tail -n 20 file |
| 짧은 옵션 + 값 (붙여서) | tail -n20 file |
| 긴 옵션 + 공백 + 값 | tail --lines 20 file |
긴 옵션 + = + 값 | tail --lines=20 file (가장 명확) |
옵션과 일반 인자를 구분하는 --
팁
-- (대시 두 개 + 공백)는 "여기부터는 옵션이 아니라 일반 인자다"라는 신호다.
# "-file"이라는 이름의 파일을 지우고 싶을 때
rm -file # 에러! -f, -i, -l, -e 옵션으로 해석됨
rm -- -file # OK: -- 뒤는 파일명으로 인식
5-5. 실전에서 자주 보는 옵션 모음
ls — 파일 목록
| 옵션 | 의미 |
-l | long: 상세 (권한·크기·날짜) |
-a | all: 숨김파일(.으로 시작) 포함 |
-h | human-readable: KB/MB 단위 |
-t | time: 수정 시간순 정렬 |
-r | reverse: 역순 |
-R | Recursive: 하위까지 전부 |
실무 조합: ls -lah (상세 + 숨김 + 사람단위)
rm — 삭제
| 옵션 | 의미 |
-r | recursive: 폴더와 그 안의 것 모두 |
-f | force: 확인·경고 없이 |
-i | interactive: 매번 확인 |
-v | verbose: 지운 파일 출력 |
grep — 검색
| 옵션 | 의미 |
-i | ignore-case: 대소문자 무시 |
-r / -R | recursive: 하위 디렉터리까지 |
-n | 줄 번호 표시 |
-v | invert: 매칭 안 되는 줄만 |
-l | 매칭된 파일명만 |
-c | count: 매칭된 줄 수 |
-E | 확장 정규식 사용 |
cp / mv
| 옵션 | 의미 |
-r / -R | 폴더 통째로 복사 |
-i | 덮어쓰기 전 확인 |
-v | 처리 과정 출력 |
-p | preserve: 권한·시간 보존 |
-u | update: 새 파일이거나 더 최신일 때만 |
tar — 압축/해제 (옵션 외우기 까다로움)
# 압축 만들기 (Create)
tar -czvf archive.tar.gz folder/
│││││
││││└ f: 파일명 지정
│││└─ v: verbose
││└── z: gzip 압축
│└─── c: create
└──── 대시
# 풀기 (eXtract)
tar -xzvf archive.tar.gz
5-6. 도움말 찾는 법
모르는 옵션 만나면
명령 --help — 간단한 도움말 (대부분 명령이 지원)
man 명령 — 매뉴얼 페이지 (자세함, q로 종료)
info 명령 — GNU 정보 페이지 (더 상세, 잘 안 씀)
tldr 명령 — 자주 쓰는 예시만 정리 (별도 설치: sudo apt install tldr)
6. 실전 예시 풀이
이 프로젝트의 실행방법.txt에 있던 명령어를 풀어보자.
nohup caffeinate -is python3 -m http.server 8000 > server.log 2>&1 </dev/null & disown
| 토큰 | 역할 |
nohup | No HangUP — 터미널이 닫혀도 프로세스가 죽지 않게 |
caffeinate | (macOS 전용) 시스템이 잠들지 않게 막음 |
-i | idle sleep 방지 |
-s | system sleep 방지 (AC 전원일 때) |
python3 -m http.server 8000 | 파이썬으로 8000번 포트에 간이 웹서버 띄움 |
-m http.server | module 모드 — http.server 모듈을 스크립트처럼 실행 |
> server.log | 표준 출력을 server.log 파일에 저장 |
2>&1 | 표준 에러도 표준 출력과 같은 곳으로 |
</dev/null | 표준 입력은 비워둠 (입력 대기 안 함) |
& | 백그라운드 실행 |
disown | 현재 셸의 작업 목록에서 분리 |
한 줄 요약
"터미널을 닫아도, Mac이 잠들어도 계속 살아있는 백그라운드 웹서버를 띄우고 로그는 server.log에 저장하라."
caffeinate는 macOS 전용이지만, 리눅스에도 비슷한 도구로 systemd-inhibit, caffeine 패키지 등이 있다. 나머지 문법(nohup, &, 2>&1, disown)은 둘 다 동일하게 동작한다 (둘 다 유닉스 계열이라서).
7. 한눈에 보는 요약
- 리눅스 = 커널, 우리가 쓰는 건 배포판(Ubuntu, Fedora 등). Ubuntu는 데비안 계열 입문용.
- Windows와 달리 단일 루트
/, 대소문자 구분, CLI 중심, 패키지 매니저로 설치.
- "모든 것은 파일이다" + "작은 도구의 조합" — 파이프
|로 강력함.
- 옵션 규칙:
-x 짧은 옵션 (전통, 묶기 가능: ls -lah)
--xxxx 긴 옵션 (가독성, 묶기 불가)
- 대소문자는 다른 옵션 (
-r ≠ -R)
- 막히면
명령 --help 또는 man 명령
- 가장 자주 쓸 5개:
ls, cd, cp/mv/rm, grep, sudo apt install.
- 가장 위험한 1개:
rm -rf — 휴지통 없다. 무조건 한 번 더 확인하기.
리눅스 / 우분투 입문 가이드 · Tech / Program