Skip to content

Linux 기초

서론

서버의 세계에서 Linux는 절대적인 주인공입니다. 전 세계 서버의 90% 이상이 Linux를 실행하고 있으며, 매일 사용하는 카카오톡부터 Google 검색까지 모두 Linux가 뒷받침하고 있습니다. 개발자로서 Linux 기초를 마스터하는 것은 선택이 아닌 필수입니다.

이 글에서 무엇을 배우게 될까요?

이 장을 마치면 다음을 얻게 됩니다:

  • 파일 시스템: Linux 디렉토리 구조와 "모든 것은 파일"이라는 철학 이해
  • 일반 명령어: 파일 조작, 텍스트 처리, 프로세스 관리 등 핵심 명령어 숙지
  • 권한 모델: 사용자, 그룹, 권한의 개념 이해
  • Shell 기초: 파이프, 리다이렉션, 환경 변수 등 Shell 핵심 개념 이해
  • 실전 기술: 로그 확인, 프로세스 조사, 네트워크 진단 등 운영 기본기 습득
내용핵심 개념
제1장파일 시스템디렉토리 구조, 모든 것은 파일
제2장일반 명령어파일, 텍스트, 프로세스, 네트워크
제3장권한 모델사용자, 그룹, rwx, sudo
제4장Shell 기초파이프, 리다이렉션, 변수, 스크립트
제5장실전 시나리오로그 조사, 성능 진단

1. 파일 시스템: 모든 것은 파일

Linux의 가장 핵심적인 철학 중 하나는 모든 것은 파일이라는 것입니다. 일반 파일은 파일이고, 디렉토리는 파일이고, 하드 디스크는 파일이며, 심지어 네트워크 연결, 프로세스 정보도 파일입니다. 이 통일된 추상화 덕분에 동일한 도구 세트(읽기, 쓰기, 권한 제어)로 거의 모든 시스템 리소스를 조작할 수 있습니다.

Linux Filesystem Hierarchy
Click a directory to see what it is used for
📁/Root directory
⚙️/binEssential commands
📋/etcConfiguration files
🏠/homeUser home directories
📊/varVariable data
🗑️/tmpTemporary files
📦/usrUser programs
🔍/procProcess information
🔌/devDevice files
/
The starting point of the whole filesystem. Every directory and file begins here. In Linux, everything is a file, including devices and process information exposed through this directory tree.

디렉토리 구조 빠른 기억

Linux 파일 시스템을 뒤집힌 나무로 상상해 보세요:

/                    ← 루트 디렉토리(나무의 뿌리)
├── home/            ← 사용자의 집(당신의 파일이 모두 여기에)
├── etc/             ← 설정 파일(시스템의 "설정 패널")
├── var/             ← 변화하는 데이터(로그, 캐시)
├── usr/             ← 사용자 설치 프로그램
├── tmp/             ← 임시 파일(재시작하면 사라짐)
├── proc/            ← 프로세스 정보(가상, 디스크 공간 차지 안 함)
├── dev/             ← 장치 파일(하드 디스크, 터미널)
├── bin/             ← 기본 명령어(ls, cp, mv)
├── sbin/            ← 시스템 관리 명령어(root 필요)
├── opt/             ← 서드파티 소프트웨어
└── root/            ← root 사용자의 홈 디렉토리

"모든 것은 파일"의 위력

CPU 정보를 알고 싶나요? 파일을 읽으세요: cat /proc/cpuinfo 메모리 사용량을 알고 싶나요? 파일을 읽으세요: cat /proc/meminfo 난수를 생성하고 싶나요? 파일을 읽으세요: cat /dev/urandom 출력을 버리고 싶나요? 파일에 쓰세요: echo "no thanks" > /dev/null

전용 API가 필요 없고, 파일을 읽고 쓰는 것만으로 충분합니다. 이것이 Unix 철학의 우아함입니다.


2. 일반 명령어

Linux 명령은 통일된 형식을 따릅니다: 명령 [옵션] [매개변수]. 예를 들어 ls -la /home에서 ls는 명령, -la는 옵션, /home은 매개변수입니다.

Linux Command Cheat Sheet
Browse common commands and examples by category
lsList files and directories
ls -la /home
cdChange directory
cd /var/log
cpCopy files
cp -r src/ backup/
mvMove or rename
mv old.txt new.txt
rmRemove files
rm -rf dist/
mkdirCreate directories
mkdir -p src/components
findFind files
find . -name "*.js" -type f

가장 많이 사용하는 10개 명령어

기억해야 할 명령이 10개뿐이라면, 이것들을 외우세요:

명령어용도기억 팁
ls파일 나열list
cd디렉토리 변경change directory
cat파일 보기concatenate
grep텍스트 검색global regular expression print
find파일 찾기그냥 find
ps프로세스 보기process status
tail -f실시간 로그 보기파일 "꼬리"를 보고, -f는 follow
chmod권한 변경change mode
curlHTTP 요청 보내기client URL
ssh원격 로그인secure shell

명령어 조합의 예술

Linux의 강력함은 단일 명령이 아니라 명령어 조합에 있습니다. 파이프 |를 통해 여러 단순한 명령을 연결하여 복잡한 문제를 해결합니다:

bash
# CPU를 가장 많이 사용하는 5개 프로세스 찾기
ps aux --sort=-%cpu | head -6

# 로그에서 가장 많이 발생한 에러 유형 통계
grep "ERROR" app.log | awk '{print $4}' | sort | uniq -c | sort -rn | head -10

# 100MB보다 큰 파일 찾기
find / -size +100M -type f 2>/dev/null

# 로그의 에러를 실시간으로 모니터링
tail -f /var/log/app.log | grep --color "ERROR"

Unix 철학

"한 가지 일을 하되, 그것을 잘 하라." 각 명령은 하나의 기능만 담당하고, 파이프로 조합하여 복잡한 작업을 수행합니다. 이것이 Linux 명령이 모두 짧은 이유입니다 — 레고 블록이지, 스위스 아미 나이프가 아닙니다.


3. 권한 모델

Linux는 다중 사용자 시스템이며, 권한 모델은 보안의 초석입니다. 모든 파일에는 세 그룹의 권한이 있어 소유자(Owner), 소속 그룹(Group), 기타 사용자(Others)가 할 수 있는 일을 각각 제어합니다.

ls -l 출력 읽기

bash
$ ls -l app.js
-rwxr-xr-- 1 alice developers 2048 Jan 15 10:30 app.js
│├──┤├──┤├──┤
          └── 파일 크기
     └── 소속 그룹
     └── 소유자
   └── 기타 사용자 권한: r-- (읽기 전용)
   └── 그룹 권한: r-x (읽기+실행)
 └── 소유자 권한: rwx (읽기+쓰기+실행)
└── 파일 유형: - 일반 파일, d 디렉토리, l 링크

권한의 세 가지 조작

권한문자숫자파일에 대한 의미디렉토리에 대한 의미
읽기r4파일 내용 보기디렉토리 내용 나열(ls)
쓰기w2파일 내용 수정디렉토리 내의 파일 생성/삭제
실행x1프로그램/스크립트 실행디렉토리 진입(cd)
Linux Permission Decoder
Enter a numeric permission and inspect what it means
-rwxr-xr-x
Owner
Group
Others
Common permission combinations
644Normal file: owner can read/write, others read-only
755Executable file or directory: owner has full access
600Private file: only owner can read/write
777Fully open: not recommended

숫자 권한 빠른 계산

세 개의 숫자는 각각 Owner, Group, Others의 권한을 나타내며, 각 숫자는 r(4) + w(2) + x(1)의 합입니다:

chmod 755 script.sh
  7 = rwx (4+2+1)  → 소유자: 읽기+쓰기+실행
  5 = r-x (4+0+1)  → 그룹: 읽기+실행
  5 = r-x (4+0+1)  → 기타 사용자: 읽기+실행
일반적인 권한의미대표적 용도
644rw-r--r--일반 파일(소유자는 쓰기 가능, 기타 사용자는 읽기 전용)
755rwxr-xr-x실행 파일/디렉토리
600rw-------개인 파일(예: SSH 키)
777rwxrwxrwx모든 사람이 읽고 쓰고 실행 가능(위험, 사용 피하기)

sudo: 임시로 슈퍼 권한 획득

일반 사용자의 권한은 제한적이며, 어떤 작업은 root 권한이 필요합니다. sudo를 사용하면 임시로 root 신분으로 명령을 실행할 수 있습니다:

bash
# 일반 사용자는 시스템 설정을 수정할 수 없음
$ vim /etc/nginx/nginx.conf
# Permission denied

# sudo로 임시 권한 상승
$ sudo vim /etc/nginx/nginx.conf
# 비밀번호를 입력하면 편집 가능

# root 사용자로 전환(신중하게 사용)
$ sudo su -

최소 권한 원칙

절대 chmod 777로 권한 문제를 해결하지 마세요. 이는 문을 열어두는 것과 같습니다. 올바른 방법은 누가 어떤 권한이 필요한지 파악하고 정확하게 부여하는 것입니다. 마찬가지로, root 신분으로 장기간 작업하지 말고 필요할 때만 sudo를 사용하세요.


4. Shell 기초

Shell은 사용자와 Linux 커널 사이의 "통역사"입니다. 사용자가 명령을 입력하면, Shell이 해석하여 커널에 전달하여 실행합니다. 가장 많이 사용되는 Shell은 Bash(대부분의 Linux 배포판 기본)와 Zsh(macOS 기본)입니다.

파이프와 리다이렉션

이것은 Shell의 가장 강력한 두 가지 기능입니다:

기호명칭역할예시
``파이프앞 명령의 출력을 뒤 명령의 입력으로 전달
>출력 리다이렉션출력을 파일에 쓰기(덮어쓰기)echo "hello" > file.txt
>>추가 리다이렉션출력을 파일 끝에 추가echo "world" >> file.txt
<입력 리다이렉션파일에서 입력 읽기wc -l < file.txt
2>에러 리다이렉션에러 정보를 파일에 쓰기cmd 2> error.log
2>&1출력 병합에러와 정상 출력을 병합cmd > all.log 2>&1

환경 변수

환경 변수는 Shell의 "전역 설정"으로 명령의 동작에 영향을 미칩니다:

bash
# 모든 환경 변수 보기
env

# 특정 변수 보기
echo $PATH
echo $HOME

# 임시 설정(현재 Shell에만 유효)
export API_KEY="abc123"

# 영구 설정(설정 파일에 기록)
echo 'export API_KEY="abc123"' >> ~/.bashrc
source ~/.bashrc   # 설정을 즉시 적용

Shell 스크립트 입문

여러 명령을 하나의 파일에 작성하면 Shell 스크립트가 됩니다. 자동화 운영의 시작점입니다:

bash
#!/bin/bash
# deploy.sh - 간단한 배포 스크립트

APP_DIR="/opt/myapp"
LOG_FILE="/var/log/deploy.log"

echo "$(date) - 배포 시작..." >> $LOG_FILE

# 최신 코드 가져오기
cd $APP_DIR && git pull origin main

# 의존성 설치
npm install --production

# 서비스 재시작
pm2 restart myapp

echo "$(date) - 배포 완료" >> $LOG_FILE

스크립트 디버깅 팁

스크립트 시작 부분에 set -ex를 추가하세요: -e는 스크립트가 에러를 만나면 즉시 종료하게 하고(계속 실행하지 않고), -x는 실행되는 각 명령을 출력합니다(문제 파악에 유용). 이 두 옵션은 프로덕션 스크립트에서 거의 필수입니다.


5. 실전 시나리오

이론을 배웠으니, 개발 중 가장 자주 마주치는 실전 시나리오를 살펴보겠습니다.

5.1 로그 조사

서비스에 문제가 발생하면 첫 번째 반응은 로그를 보는 것입니다. 다음은 로그 조사의 일반적인 방법입니다:

bash
# 1. 실시간 로그 추적(가장 많이 사용)
tail -f /var/log/app/error.log

# 2. 특정 시간대의 에러 검색
grep "2024-01-15 14:" error.log | grep "ERROR"

# 3. 시간당 에러 수 통계
grep "ERROR" app.log | awk '{print substr($1,1,13)}' | uniq -c

# 4. 최근 100줄 로그 보기
tail -100 app.log

# 5. 여러 로그 파일에서 검색
grep -r "OutOfMemory" /var/log/app/

5.2 프로세스 조사

애플리케이션이 멈춤, CPU 급증, 메모리 누수 — 이런 문제는 모두 프로세스에서 시작해야 합니다:

bash
# CPU 점유율이 가장 높은 프로세스 보기
ps aux --sort=-%cpu | head -10

# 메모리 점유율이 가장 높은 프로세스 보기
ps aux --sort=-%mem | head -10

# 특정 프로세스 찾기
ps aux | grep "node"

# 프로세스의 상세 정보 보기(스레드 포함)
top -Hp <PID>

# 프로세스가 열어둔 파일 보기
lsof -p <PID>

# 우아한 프로세스 종료(SIGTERM)
kill <PID>

# 강제 종료(SIGKILL, 최후 수단)
kill -9 <PID>

5.3 네트워크 진단

서비스에 연결이 안 되나요? 먼저 네트워크 문제인지 애플리케이션 문제인지 확인하세요:

bash
# 대상이 접근 가능한지 테스트
ping -c 4 google.com

# 포트가 열려 있는지 확인
telnet db-server 3306
# 또는 nc 사용
nc -zv db-server 3306

# 로컬에서 수신 중인 포트 보기
ss -tlnp
# 또는
netstat -tlnp

# DNS 해석 확인
dig api.example.com
nslookup api.example.com

# HTTP 인터페이스 테스트
curl -v http://localhost:3000/health

# 네트워크 연결 상태 통계 보기
ss -s

5.4 디스크 공간 조사

디스크가 꽉 차는 것은 온라인에서 가장 흔한 장애 중 하나입니다:

bash
# 각 파티션 사용 현황 보기
df -h

# 공간을 가장 많이 차지하는 디렉토리 찾기
du -sh /* 2>/dev/null | sort -rh | head -10

# 큰 디렉토리 추가로 파악
du -sh /var/log/* | sort -rh | head -10

# 대용량 파일 찾기(>100MB)
find / -type f -size +100M 2>/dev/null | head -20

# 일반적인 공간 정리
# 오래된 로그 정리
sudo journalctl --vacuum-size=500M
# Docker 불필요한 이미지 정리
docker system prune -a

온라인 조사 요령

"1순위 로그, 2순위 프로세스, 3순위 네트워크, 4순위 디스크". 온라인 문제의 90%는 이 네 단계로 원인을 파악할 수 있습니다. 습관을 들이면 조사 효율이 크게 향상됩니다.


요약

Linux는 개발자의 필수 기술이며, 기초를 마스터하면 대부분의 일상적인 개발과 운영 시나리오에 대응할 수 있습니다.

핵심 포인트 복습:

  1. 모든 것은 파일: Linux는 파일 추상화를 통해 하드웨어, 프로세스, 네트워크 등 리소스에 대한 접근 방식을 통일
  2. 명령어 조합: 단일 명령의 기능은 단순하지만, 파이프 |로 조합해야 진정한 위력 발휘
  3. 권한 모델: Owner/Group/Others x Read/Write/Execute, 숫자(예: 755)로 빠르게 설정
  4. Shell 기초: 파이프, 리다이렉션, 환경 변수, 스크립트가 자동화의 초석
  5. 실전 조사: 로그 → 프로세스 → 네트워크 → 디스크, 4단계로 대부분의 온라인 문제 파악

더 읽어보기