🐧 Linux 기초 강의
리눅스 입문부터 파일 시스템, 패키지 관리, 텍스트 에디터까지. 실무 DevOps를 위한 Linux 핵심 가이드.
🐧 리눅스란?
리눅스는 오픈 소스 운영체제 커널입니다. 리누스 토르발스(Linus Torvalds)가 1991년에 개발하였으며, 누구나 자유롭게 사용·수정·배포할 수 있습니다.
📚 용어 정리: 커널 vs 배포판
- 커널(Kernel): 하드웨어와 소프트웨어를 연결하는 운영체제의 핵심 엔진. 리눅스 자체는 이 커널을 의미합니다.
- 배포판(Distribution): 리눅스 커널 + 각종 소프트웨어·도구를 묶어 사용하기 편하게 만든 패키지입니다.
| 배포판 | 특징 |
|---|---|
| Ubuntu | 입문자 친화적, 데스크탑·서버 모두 인기 |
| CentOS / RHEL | 기업용 서버에 특화, 안정성 중시 |
| Fedora | 최신 기술을 빠르게 도입하는 개발자 배포판 |
| Debian | Ubuntu의 모태, 안정성과 자유 소프트웨어 철학 |
🐧 왜 리눅스를 사용할까?
- 🏆 서버 점유율 1위: 전 세계 서버의 약 90% 이상이 리눅스 기반으로 운영됩니다.
- ☁️ 클라우드 표준: AWS, Azure, GCP 등 주요 클라우드 플랫폼의 기본 OS입니다.
- 🔓 오픈 소스의 자유도: 소스 코드를 자유롭게 수정·배포할 수 있어, 원하는 대로 커스터마이징이 가능합니다.
- ⌨️ 강력한 CLI(명령어 환경): 텍스트 명령어를 통해 시스템을 빠르고 정밀하게 제어할 수 있습니다. 자동화와 스크립팅에 매우 유리합니다.
🐳 Docker · Kubernetes도 리눅스 위에서 동작한다
앞으로 배울 Docker, Kubernetes, Jenkins 등 DevOps 핵심 도구들은 모두 리눅스를 기반으로 동작합니다. 명령어, 파일 경로, 권한 체계가 리눅스 그대로입니다.
🐳 Docker
컨테이너는 리눅스 커널의 namespaces와 cgroups를 이용합니다. Dockerfile의 명령어도 리눅스 쉘 명령어입니다.
☸️ Kubernetes
노드(서버)는 리눅스 기반이며, Pod 안에서 실행되는 컨테이너도 리눅스 환경입니다. kubectl exec로 접속하면 리눅스 쉘이 열립니다.
🔧 Jenkins / CI 서버
빌드·배포 파이프라인의 쉘 스크립트(sh)는 리눅스 명령어로 구성됩니다.
💡 리눅스 명령어에 익숙해지면 Docker 이미지 디버깅, Kubernetes Pod 접속, CI/CD 스크립트 작성이 훨씬 수월해집니다. 리눅스는 DevOps의 공통 언어입니다.
🪟 윈도우와의 차이
리눅스를 처음 접할 때 가장 낯선 부분은 윈도우와의 근본적인 철학 차이입니다.
📂 "Everything is a File" (모든 것은 파일이다)
리눅스의 가장 핵심적인 철학입니다. 윈도우와 달리 리눅스에서는 거의 모든 것이 파일로 취급됩니다.
| 대상 | 윈도우 | 리눅스 |
|---|---|---|
| 하드디스크 | C:, D: 드라이브 | /dev/sda (파일) |
| USB 장치 | 장치 관리자에서 관리 | /dev/usb (파일) |
| 프로세스 정보 | 작업 관리자(GUI) | /proc/[PID] (파일) |
| 시스템 설정 | 레지스트리(GUI) | /etc/ 디렉토리의 텍스트 파일 |
이 철학 덕분에 리눅스에서는 텍스트 명령어 하나로 장치 확인, 설정 변경, 프로세스 관리를 모두 할 수 있습니다.
🤝 리눅스와 친해지는 법
1. 직접 설치해보기
가상머신(VirtualBox, VMWare 등)이나
WSL(Windows Subsystem for Linux)로 리눅스를 설치해봅니다.
2. 윈도우처럼 사용해보기
두려움 없이 리눅스 환경에
발을 들여보는 것이 중요합니다.
3. 터미널에 익숙해지기
GUI 대신 터미널로
파일 탐색, 편집을 연습합니다.
💻 학습용 리눅스 준비하기
실습을 위해 가장 대중적인 Ubuntu 혹은 기업용 표준인 RHEL 중 하나를 준비합니다.
1️⃣ Ubuntu (입문자 추천)
가장 범용적이고 커뮤니티가 활성화되어 있어 실습에 가장 편리합니다.
- WSL2 (Windows 사용자 추천): Windows에서 리눅스를 앱처럼 실행 — 가장 빠르고 간편함
- VirtualBox: 가상 머신에 Ubuntu 설치
2️⃣ RHEL (Red Hat Enterprise Linux)
기업용 유료 OS이지만, 개인 개발자는 계정 등록 시 무료로 사용 가능합니다.
👉 등록: developers.redhat.com
3️⃣ 클라우드 VM
AWS EC2, GCP, Azure 등에서 Ubuntu 또는 RHEL 인스턴스를 생성하여 실습할 수 있습니다.
🛠️ 함께 쓰는 프로그램
리눅스 서버를 효율적으로 사용하기 위해 Windows에서 함께 활용하는 필수 도구들을 소개합니다.
PuTTY — SSH 원격 접속 도구
PuTTY는 Windows에서 리눅스 서버에 SSH(Secure Shell)로 원격 접속할 때 가장 많이 사용하는 무료 프로그램입니다.
⚙️ 추천 설정
- Font 변경: Window → Appearance → Font settings에서 Consolas로 변경하면 코드 가독성이 크게 향상됩니다.
- Font 사이즈: 12~14pt를 추천합니다.
PuTTY 접속 화면
PuTTY 설정 화면 (Font: Consolas)
✅ 시작하기 전에 확인할 것들
본격적인 실습에 앞서, 필요한 도구들이 정상적으로 설치되어 있는지 확인합니다. 아래 명령어들을 순서대로 실행하여 버전 정보가 출력되면 정상입니다.
🔍 설치 확인 명령어
1. Git — 버전 관리 도구
2. Docker(Podman) — 컨테이너 런타임
※ RHEL에서는 podman-docker가 설치되어 있으면 docker 명령어가 podman으로 연결됩니다.
3. pip3 — Python 패키지 관리자
4. Screen — 세션 관리 도구
💡 설치가 안 되어 있다면?
위 명령어 실행 시 command not found가 나오면 해당 패키지가 설치되지 않은 것입니다. 8번 슬라이드(필수 패키지 설치)를 참고하여 설치해주세요.
👤 계정 정보 확인
리눅스에 접속한 후 가장 먼저 해야 할 일은 내가 누구이고, 어디에 접속했는지 확인하는 것입니다.
🔍 현재 사용자 확인 (whoami)
whoami는 "Who am I?"의 약자로, 현재 로그인한 사용자의 이름을 출력합니다.
🌐 호스트명 확인 (hostname)
hostname은 현재 접속한 서버(컴퓨터)의 이름을 출력합니다.
🔑 사용자 ID 정보 확인 (id)
id는 현재 사용자의 UID(사용자 ID), GID(그룹 ID), 소속 그룹 목록을 보여줍니다.
💡 출력 결과 해석
- uid=1000(devops): 사용자 고유 번호(UID)가 1000이고, 이름이 devops입니다.
- gid=1000(devops): 기본 그룹 ID(GID)가 1000입니다.
- groups=1000(devops),10(wheel): devops 그룹과 wheel 그룹에 속해 있습니다. wheel 그룹은
sudo명령어 사용 권한과 관련됩니다.
🔐 Superuser란?
리눅스에는 일반 사용자와 Superuser(관리자)라는 두 가지 권한 레벨이 있습니다.
👥 User vs Superuser (root)
| 구분 | 일반 사용자 (User) | 슈퍼유저 (root) |
|---|---|---|
| 권한 | 자기 파일만 읽기/쓰기/실행 | 시스템 전체에 대한 모든 권한 |
| 위험도 | 시스템 손상 가능성 낮음 | 잘못된 명령으로 시스템 파괴 가능 |
| 프롬프트 | $ (달러 기호) |
# (해시 기호) |
🔑 sudo와 관리자 그룹
sudo는 일반 사용자가 일시적으로 root 권한을 빌려 명령을 실행할 수 있게 해주는 명령어입니다. 배포판에 따라 관리자 권한을 가진 그룹 명칭이 다릅니다.
- Ubuntu / Debian: sudo 그룹
- RHEL / CentOS: wheel 그룹
사용자에게 관리자 권한 부여하기
💡 왜 root 대신 sudo를 사용할까?
- 안전성: 항상 root로 작업하면 실수 한 번에 시스템이 망가질 수 있습니다.
- 추적 가능:
sudo를 사용하면 누가, 언제, 어떤 명령을 실행했는지 로그가 남습니다. - 최소 권한 원칙: 필요한 순간에만 높은 권한을 사용하는 것이 보안의 기본입니다.
📦 필수 패키지 설치
리눅스 설치 후, 개발 및 운영에 필요한 기본 패키지들을 설치합니다. 배포판에 맞는 명령어를 사용하세요.
🌐 Ubuntu / Debian (APT 사용)
🐧 RHEL / CentOS (DNF 사용)
📚 주요 도구 설명
- Git: 소스 코드 버전 관리 필수 도구
- Docker: 컨테이너 실행 및 관리
- pip3: Python 패키지 관리자
- Screen: 터미널 세션 유지 (연결 끊김 방지)
📂 파일 탐색 명령어
리눅스에 접속하자마자 가장 먼저 해야 할 일은 "내가 어디에 있고, 무엇이 있는지" 확인하는 것입니다.
📍 내 위치 확인 (pwd)
pwd는 "Print Working Directory"의 약자로, 현재 내가 위치한 폴더의 절대 경로를 보여줍니다.
🔍 목록 확인 (ls)
ls -l: 상세 정보(권한, 크기 등)ls -a: 숨겨진 파일 포함
🔎 파일 검색 (find)
📖 파일 읽기 (cat, less)
cat은 보통 파일 전체를 빠르게 출력할 때, less는 긴 로그나 파일을 천천히 읽을 때 씨니다.
🚶 폴더 이동하기 및 구조 확인
📂 폴더 이동 (cd)
cd는 "Change Directory"의 약자로, 작업 디렉토리를 변경할 때 사용합니다.
cd [경로]: 해당 경로로 이동합니다.cd ..: 현재 위치에서 한 단계 위(부모) 폴더로 이동합니다.cd ~: 현재 사용자의 홈 디렉토리로 즉시 이동합니다.
🌳 구조 시각화 (tree)
tree 명령어는 디렉토리 구조를 나무 모양으로 보기 좋게 시각화하여 계층 구조를 한눈에 파악할 수 있게 해줍니다.
💡 tree 명령어 직접 설치해보기
Linux 기본 설치 시 tree가 없을 수 있습니다. 이럴 때는 관리자 권한을 사용하여 직접 설치할 수 있습니다.
설치 후에 tree를 입력하여 결과를 확인해 보세요! 패키지 관리자의 편리함을 체험해 볼 수 있습니다.
🧹 실습: 루트 디렉토리 탐색하기
지금까지 배운 pwd, cd, ls 명령어를 종합해서 리눅스의 전체 파일시스템 구조를 첫 탐색해봅니다.
✅ 목표: 현재 위치 확인 → 루트(/) 이동 → 리눅스 시스템 콘텐츠 확인 → 원래 위치로 복귀
💻 실습 명령어 시퀀스
Step 1. 현재 위치 확인
Step 2. 루트 디렉토리로 이동
cd / 명령어로 리눅스 파일시스템의 최상단, 즉 루트(root) 디렉토리(≠ root 계정)로 이동합니다.
Step 3. 루트 디렉토리 안의 목록 확인
ls -l로 리눅스의 핵심 시스템 디렉토리들을 확인합니다.
📁 주요 디렉토리 한눈에 보기
/home
일반 사용자들의 홈 폴더
/etc
시스템 설정 파일 모음
/dev
장치 파일 (디스크, USB 등)
/proc
실행 중인 프로세스 정보 (가상 파일)
/usr/bin
일반 명령어 실행 파일 (git, python3 등)
/tmp
임시 파일 저장소 (재부팅 시 삭제)
Step 4. 원래 위치로 복귀
cd ~ 또는 cd만 입력해도 홈 디렉토리로 돌아옵니다.
💡 프롬프트를 확인하세요! [devops@localhost /]$와 [devops@localhost ~]$는 현재 위치가 다름을 보여줍니다. /는 루트, ~는 홈 디렉토리입니다.
🛠️ 파일과 폴더 만들기
리눅스 환경에서 새로운 작업 공간을 확보하고 파일을 생성하는 실습입니다.
📁 폴더 만들기 (mkdir)
mkdir은 "Make Directory"의 약자로, 새로운 디렉토리를 생성합니다.
📄 파일 만들기 (touch)
touch는 빈 파일을 빠르게 생성하거나, 이미 존재하는 파일의 접근/수정 시간을 현재 시간으로 업데이트할 때 사용합니다.
📋 파일 복사하기
cp는 "Copy"의 약자로, 기존 파일이나 디렉토리를 복사하여 동일한 내용의 새로운 파일을 만듭니다. 원본을 유지하면서 복제본을 만들 때 사용합니다.
- cp [원본] [대상]: 파일을 복사합니다.
- cp -r [원본디렉토리] [대상디렉토리]: 디렉토리를 복사할 때는 반드시
-r(Recursive) 옵션을 사용해야 내부 파일들까지 함께 복사됩니다.
📦 이동 및 이름 변경
mv는 "Move"의 약자로, 파일이나 폴더의 위치를 이동시키거나 이름을 변경할 때 사용합니다. 윈도우의 '잘라내기(Cut) 후 붙여넣기'와 같은 원리입니다.
💡 리눅스에서의 이름 변경: 리눅스에는 일반적인 파일 이름 변경을 위한 별도의 rename 명령어가 따로 있는 것이 아니라, mv 명령어를 통해 현재 위치에서 다른 이름으로 이동시키는 개념으로 파일명을 변경합니다.
이름 변경하기 (Rename)
파일 위치 옮기기 (Move)
🗑️ 파일 혹은 폴더 삭제하기 (주의필요)
리눅스에는 윈도우의 '휴지통' 개념이 없습니다. 명령어를 실행하면 즉시 지워지므로 숙달될 때까지 주의가 필요합니다.
📄 파일 삭제 (rm)
rm은 "Remove"의 약자로, 파일을 삭제합니다.
📁 폴더 강제 삭제 (rm -rf)
비어있지 않은 폴더를 삭제하려면 -r (Recursive)과 -f (Force) 옵션을 조합한 rm -rf를 사용합니다.
💻 삭제 실습
⚠️ 절대 금기 명령어: rm -rf /
rm -rf /는 루트(/) 경로 아래의 모든 파일을 강제로 삭제하는 명령어로, 운영체제를 회생 불능 상태로 만듭니다.
호기심에라도 연습하지 마세요. 실제 서버에서 이 명령어를 실행하는 것은 시스템 파괴 행위입니다.
🧹 실습: 프로젝트 구조 만들고 삭제하기
지금까지 배운 mkdir, touch, tree, rm -rf를 종합하여 실제 프로젝트를 늮은 폴더 구조를 만들고, 확인하고, 삭제하는 컨플릿 실습입니다.
✅ 목표 구조:
💻 실습 명령어 시퀀스
Step 1. 프로젝트 루트 폴더 생성
Step 2. 하위 폴더 생성
Step 3. 파일 생성
Step 4. tree로 구조 확인
Step 5. 상위 폴더로 이동 후 전체 삭제
⚠️ rm -rf는 되돌릴 수 없습니다. 삭제 전에 pwd로 위치를 확인하고, ls로 대상을 다시 한 번 확인하는 습관을 가집니다.
⚙️ 프로세스 & 시스템
시스템 자원 상태와 실행 중인 프로세스를 관리하는 핵심 명령어입니다.
📊 프로세스 확인 (ps, top/htop)
🛑 프로세스 종료 (kill)
비정상 동작하는 프로세스를 강제 종료합니다. ps aux로 PID(Process ID)를 확인 후 사용합니다.
💾 디스크 및 메모리 확인 (df, free)
📦 패키지 관리자 (APT vs DNF)
리눅스 배포판에 따라 사용하는 패키지 관리자가 다릅니다. 현재 사내(또는 실습) OS에 맞는 명령어를 선택하세요.
📦 주요 패키지 관리자 비교
| 구분 | APT (Advanced Package Tool) | DNF (Dandified YUM) |
|---|---|---|
| 주요 배포판 | Ubuntu, Debian, Linux Mint | RHEL, CentOS, Fedora |
| 설치 명령어 | sudo apt install [패키지] |
sudo dnf install [패키지] |
| 업데이트 | sudo apt update && upgrade |
sudo dnf update |
🛠️ 실습 (git 설치 기준)
Ubuntu 계열:
RHEL 계열:
📝 텍스트 에디터 (nano & vim)
리눅스 터미널 환경에서 파일 내용을 수정하기 위해 사용되는 도구들입니다.
🌱 입문용: nano
메모장처럼 직관적이고 사용법이 쉽습니다. 하단에 단축키 안내가 표시되어 초보자에게 권장됩니다.
⚡ 표준/전문가용: vi/vim
거의 모든 리눅스에 내장되어 있습니다. 매우 강력하지만 '모드(Mode)' 개념이 있어 학습이 필요합니다.
💡 에디터 설치하기
만약 해당 에디터들이 설치되어 있지 않다면 아래 명령어로 설치할 수 있습니다.
💡 VI/VIM 핵심 모드 안내
- 명령 모드(Normal Mode): 기본 상태. 커서 이동, 삭제, 복사 가능
- 입력 모드(Insert Mode):
i를 눌러 진입. 글자 입력 가능 - 명령어 라인 모드(Command Line Mode):
:를 눌러 진입. 저장(w), 종료(q) 등 수행
📝 nano 에디터 사용법
가장 직관적이고 쉬운 터미널 에디터입니다.
주요 단축키 (화면 하단 참고)
- Ctrl + O: 저장 (WriteOut)
- Ctrl + X: 종료 (Exit)
- Ctrl + K: 한 줄 잘라내기 (Cut)
- Ctrl + U: 붙여넣기 (Uncut)
- Ctrl + W: 찾기 (Where is)
🛠️ 실습 예시
💡 nano 단축키 표기 읽는 법
nano 하단에 표시되는 ^O, ^X 기호에서 ^는 Ctrl 키를 의미합니다. 즉, ^O는 Ctrl + O를 함께 누르라는 뜻입니다.
⚡ vim 에디터 사용법
'모드'를 전환하며 사용하는 강력한 에디터입니다.
🛠️ 핵심 커맨드
- i: 입력 모드로 전환
- Esc: 다시 명령 모드로 복귀
- :w: 파일 저장
- :q: 종료 (저장 안됐으면 에러)
- :wq: 저장하고 종료
- :q!: 저장하지 않고 강제 종료
⌨️ 편집 편의 기능
- dd: 현재 줄 삭제 (명령 모드)
- yy: 현재 줄 복사 (명령 모드)
- p: 아래 줄에 붙여넣기 (명령 모드)
- u: 실행 취소 (Undo)
💡 기억하세요! 처음 vim을 켜면 아무 글자도 써지지 않습니다. 반드시 i를 눌러 -- INSERT -- 상태가 되었는지 확인하세요.
🛠️ 실습 예시
🌐 네트워크 명령어
서버 연동 상태와 API 응답을 터미널에서 직접 테스트하고 포트 상태를 점검합니다.
📡 웹 요청 (curl, wget)
API 응답 테스트 및 파일 다운로드 도구입니다.
🔌 포트 및 통신 상태 확인 (netstat, ss)
어떤 프로그램이 몇 번 포트에서 대기(Listen) 중인지 확인합니다.
💡 -tlnp 옵션: t(TCP), l(Listening state), n(숫자로 표시), p(프로세스 ID 표시)의 조합입니다.
🔎 텍스트 처리 명령어 (로그 분석)
서버 로그를 분석하거나 엄청난 양의 텍스트 속에서 원하는 내용만 뽑아낼 때 사용하는 필수 조합입니다.
🔍 텍스트 필터링 (grep)
내가 원하는 패턴이 포함된 줄만 골라냅니다.
📝 실시간 로그 추적 (tail -f)
파일의 마지막 부분만 출력하는 tail 명령어에 -f (follow) 옵션을 붙여 실시간 업데이트를 모니터링합니다. (종료: Ctrl + C)
🔗 파이프라인 (|) 활용
앞 명령어의 출력을 뒤 명령어의 입력으로 전달하여 조합합니다.
🚀 권한 & 사용자
🔑 관리자 권한 (sudo)
보안을 위해 강한 권한이 필요한 순간에만 관리자(root) 권한을 빌려 패키지 설치나 관리 작업을 수행합니다.
🛡️ 권한의 3요소 (r, w, x)
r(Read, 4) - 읽기 권한w(Write, 2) - 쓰기 권한x(Execute, 1) - 실행 권한- 예:
chmod 755 file
🔐 권한 및 소유권 변경
리눅스 파일의 권한을 변경하거나 소유자를 바꿉니다.
🎯 핵심 정리 & 실습 시나리오
✅ 리눅스 생존 명령어 체크리스트
📂 파일 탐색 & 제어
- 목록/위치:
ls -la,pwd,cd - 검색/보기:
find,cat,less - 관리:
mkdir,touch,cp,mv,rm -rf
⚙️ 프로세스 & 시스템
- 확인:
ps aux,top/htop - 강제종료:
kill -9 [PID] - 자원:
df -h(디스크),free -h(메모리)
🌐 네트워크 & 텍스트
- 통신:
curl,wget,netstat -tlnp,ss -tlnp - 필터:
grep,tail -f,|(파이프) - 권한:
chmod,chown,sudo
📦 패키지 관리
- Ubuntu:
apt install [패키지] - RHEL:
dnf install [패키지]
💡 DevOps 엔지니어의 습관: 명령어를 실행하기 전 pwd를 확인하고, 긴 로그는 grep이나 less로 필요한 부분만 봅니다. 모든 것은 파일이며, 텍스트가 곧 설정입니다.