리눅스 / 우분투 가이드

개념, 윈도우즈와의 차이, 터미널 명령어와 옵션(-, --)까지 한 번에 정리

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. 한눈에 보는 비교표

항목WindowsLinux (Ubuntu)
라이선스상용, 유료오픈소스, 무료
소스코드비공개공개
파일시스템NTFS, C:\ D:\ 드라이브 분리ext4 등, 단일 루트 / 트리
경로 구분자\ (백슬래시)/ (슬래시)
대소문자구분 안 함 (A.txt = a.txt)구분함 (A.txta.txt)
실행 파일 식별확장자 (.exe, .bat)실행 권한 비트 (chmod +x)
권한 모델관리자 / 일반root / 일반, sudo로 권한 상승
소프트웨어 설치exe/msi 다운로드패키지 매니저 (apt install)
기본 셸cmd, PowerShellbash, 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
sudoroot 권한으로 실행 (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. 단축키와 팁

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 — 파일 목록

옵션의미
-llong: 상세 (권한·크기·날짜)
-aall: 숨김파일(.으로 시작) 포함
-hhuman-readable: KB/MB 단위
-ttime: 수정 시간순 정렬
-rreverse: 역순
-RRecursive: 하위까지 전부

실무 조합: ls -lah (상세 + 숨김 + 사람단위)

rm — 삭제

옵션의미
-rrecursive: 폴더와 그 안의 것 모두
-fforce: 확인·경고 없이
-iinteractive: 매번 확인
-vverbose: 지운 파일 출력

grep — 검색

옵션의미
-iignore-case: 대소문자 무시
-r / -Rrecursive: 하위 디렉터리까지
-n줄 번호 표시
-vinvert: 매칭 안 되는 줄만
-l매칭된 파일명만
-ccount: 매칭된 줄 수
-E확장 정규식 사용

cp / mv

옵션의미
-r / -R폴더 통째로 복사
-i덮어쓰기 전 확인
-v처리 과정 출력
-ppreserve: 권한·시간 보존
-uupdate: 새 파일이거나 더 최신일 때만

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
토큰역할
nohupNo HangUP — 터미널이 닫혀도 프로세스가 죽지 않게
caffeinate(macOS 전용) 시스템이 잠들지 않게 막음
-iidle sleep 방지
-ssystem sleep 방지 (AC 전원일 때)
python3 -m http.server 8000파이썬으로 8000번 포트에 간이 웹서버 띄움
-m http.servermodule 모드 — 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