Skip to main content

OS & Linux 기초

모델 코드가 같아도 OS 이해가 부족하면 설치, 권한, 실행 환경에서 반복적으로 막힙니다. 이 문서는 “명령어 암기”보다 “문제 해결 순서”를 익히는 데 초점을 둡니다.

학습 목표

  • 프로세스, 메모리, 파일시스템, 권한의 관계를 설명할 수 있습니다.
  • Linux 파일시스템 구조를 이해하고 주요 디렉터리의 역할을 알 수 있습니다.
  • 경로/권한/환경변수 오류를 스스로 진단할 수 있습니다.
  • systemd 서비스 관리와 리소스 모니터링 기본을 활용할 수 있습니다.

운영체제 최소 모델

  • 커널: 하드웨어 자원(CPU, 메모리, 디스크)을 관리합니다.
  • 사용자 공간: 앱과 셸이 동작하는 영역입니다.
  • 프로세스: 실행 중인 프로그램 단위입니다.
  • 파일시스템: 데이터와 설정을 경로 기반으로 관리합니다.

Linux 파일시스템 구조

디렉터리역할AI/ML 관련 예시
/루트 디렉터리모든 경로의 시작점
/home사용자 홈 디렉터리개인 설정, 프로젝트 코드
/etc시스템 설정 파일nvidia-container-runtime, 환경변수
/var가변 데이터 (로그, 캐시)/var/log/syslog, Docker 볼륨
/tmp임시 파일 (재부팅 시 삭제)중간 처리 파일
/opt서드파티 소프트웨어CUDA, cuDNN, NCCL
/usr/local사용자 설치 프로그램/usr/local/cuda, Python 빌드
/data데이터 마운트 (관례)학습 데이터, 모델 체크포인트
/proc프로세스/시스템 가상 정보/proc/meminfo, /proc/cpuinfo
/dev장치 파일/dev/nvidia0 (GPU 장치)
GPU 서버에서 CUDA는 보통 /usr/local/cuda에, 대용량 데이터는 별도 디스크를 /data에 마운트하여 사용합니다. 루트 파티션(/)에 학습 데이터를 저장하면 디스크 부족으로 시스템 전체가 영향을 받을 수 있습니다.

꼭 알아야 할 명령

목적명령확인 포인트
현재 위치 확인pwd내가 어느 디렉터리에서 작업 중인지
파일 목록 확인ls -al숨김 파일, 권한, 소유자
파일 내용 확인cat file설정 값 오타
프로세스 확인ps aux | rg python실행 중인 작업과 PID
리소스 확인top 또는 htopCPU/메모리 과부하
디스크 사용량df -h, du -sh *용량 부족 원인
GPU 확인nvidia-smiGPU 사용률, 메모리, 온도

프로세스 관리 명령어

목적명령설명
프로세스 목록ps aux전체 프로세스 상태 확인
실시간 모니터링htopCPU/메모리 사용 실시간 확인
프로세스 종료kill <PID>정상 종료 요청 (SIGTERM)
강제 종료kill -9 <PID>강제 종료 (SIGKILL)
백그라운드 실행nohup cmd &SSH 끊어도 유지
포트 확인ss -tlnp 또는 lsof -i :8080특정 포트를 사용하는 프로세스 확인
환경변수 확인env | rg CUDACUDA 관련 환경변수 확인
환경변수 설정export PATH=/usr/local/cuda/bin:$PATH현재 세션에 환경변수 추가
학습 도중 OOM(Out of Memory)으로 프로세스가 죽었는지 확인하려면 dmesg | rg -i "oom\|killed" 명령을 사용하세요. 커널이 메모리 부족으로 프로세스를 강제 종료한 기록을 볼 수 있습니다.

systemd 서비스 관리

대부분의 Linux 서버 서비스는 systemd로 관리됩니다.
# 서비스 상태 확인
sudo systemctl status docker
sudo systemctl status nginx

# 서비스 시작/중지/재시작
sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl restart docker

# 부팅 시 자동 시작 설정
sudo systemctl enable docker
sudo systemctl disable docker

# 서비스 로그 확인 (최근 100줄)
journalctl -u docker --no-pager -n 100

# 실시간 로그 확인 (tail -f와 유사)
journalctl -u docker -f
PM2, supervisord 같은 프로세스 매니저도 자주 사용됩니다. systemd는 OS 수준 서비스, PM2는 Node.js 앱, supervisord는 범용 프로세스 관리에 적합합니다.

디스크 & 메모리 모니터링

# 디스크 사용량 전체 확인
df -h

# 특정 디렉터리 용량 확인 (하위 디렉터리별)
du -sh /data/* | sort -rh | head -10

# 메모리 사용 현황
free -h

# 상세 메모리 정보
cat /proc/meminfo | head -10

# GPU 메모리 및 사용률 (반복 확인)
watch -n 1 nvidia-smi

# I/O 대기 확인
iostat -x 1 5
디스크 사용률이 95%를 넘으면 시스템이 불안정해집니다. 로그 파일, 모델 체크포인트, Docker 이미지가 주요 원인입니다. docker system prune으로 미사용 이미지/컨테이너를 정리하고, 오래된 체크포인트는 주기적으로 삭제하세요.

문제 해결 기본 순서

1

경로 확인

명령은 맞는데 파일을 못 찾는다면 먼저 pwd, ls -al로 현재 위치와 파일 존재 여부를 확인합니다.
2

권한 확인

Permission denied가 나오면 파일/디렉터리 권한과 실행 비트(chmod +x)를 확인합니다.
ls -la script.sh    # 권한 확인
chmod +x script.sh  # 실행 권한 부여
3

환경변수 확인

command not found가 나오면 which, echo $PATH로 실행 파일 경로가 등록되어 있는지 확인합니다.
which python
echo $PATH
echo $CUDA_HOME
4

프로세스/리소스 확인

실행이 안 되거나 멈추면 ps, htop, nvidia-smi로 프로세스 상태와 리소스 사용량을 확인합니다.
5

로그 확인

마지막으로 애플리케이션 로그를 확인해 애플리케이션 레벨 오류를 분리합니다.
tail -100 /var/log/syslog
journalctl -u myservice --since "1 hour ago"
./data/file.csv는 현재 디렉터리 기준 경로입니다. 터미널 위치가 바뀌면 같은 명령도 실패합니다. 팀 스크립트에서는 가능하면 프로젝트 루트 기준 경로를 일관되게 사용하세요.
스크립트 파일에 실행 권한이 없으면 실행이 실패합니다. chmod +x script.sh 후 재실행하세요. #!/bin/bash (shebang)도 스크립트 첫 줄에 반드시 포함해야 합니다.
코드 오류처럼 보이지만 실제로는 메모리 부족으로 프로세스가 종료될 수 있습니다. 대용량 데이터 로딩 시 배치 크기, 샘플 수, 캐시 사용량을 먼저 줄여보세요. dmesg | rg oom으로 커널 OOM Killer 로그를 확인할 수 있습니다.
  • nvidia-smi 실행 안 됨: NVIDIA 드라이버 미설치 또는 커널 업데이트 후 불일치.
  • CUDA 버전 불일치: nvcc --versionnvidia-smi의 CUDA 버전이 다를 수 있음 (드라이버 vs 런타임).
  • GPU 메모리 부족: nvidia-smi로 다른 프로세스가 GPU를 점유하고 있는지 확인.
  • CUDA_VISIBLE_DEVICES 환경변수로 특정 GPU만 사용하도록 제한할 수 있습니다.

AI/ML 작업에서 특히 중요한 포인트

  • 대용량 데이터 처리 전 디스크/메모리 여유를 먼저 확인합니다.
  • 모델 체크포인트 경로를 고정하고, 실험마다 폴더를 분리합니다.
  • .env 파일과 키 파일 권한을 최소화합니다. (chmod 600)
  • GPU 서버에서는 nvidia-smiwatch 명령으로 GPU 상태를 상시 모니터링합니다.
  • 학습 시작 전 df -h, free -h, nvidia-smi를 습관적으로 확인합니다.

체크리스트

  • 경로/권한/프로세스 3가지를 먼저 점검하나요?
  • 실패 원인을 “OS 문제”와 “코드 문제”로 분리해서 기록하나요?
  • 실행 환경(버전, 경로, 변수)을 재현 가능하게 남기나요?
  • 디스크/메모리/GPU 리소스를 주기적으로 모니터링하나요?
  • systemd/PM2 등 서비스 관리 방법을 알고 있나요?

다음 문서