카테고리: IT·활용 팁

게임서버 운영자용 리눅스 기초 명령어 20개 - 디스코드 봇·게임서버 굴릴 때 진짜 쓰는 것만! (Ubuntu 26.04 LTS) 🐧

목차11개 항목

안녕하세요! Mojangcam입니다 😎

지난번 파이썬 VPS 배포 입문 - 디스코드 봇·자동화 스크립트 24시간 돌리기 (Ubuntu + systemd) 글에서 VPS에 봇을 올려서 24시간 돌리는 법을 다뤘어요. 그런데 막상 서버를 하나 빌리고 나면 이런 생각이 들죠.

"검은 화면만 뜨는데... 여기서 뭘 쳐야 하지? 😱"

그래서 이번 편에서는 게임서버·봇 운영자가 실제로 매일 쓰는 리눅스 명령어 20개만 딱 골라서 정리했어요. 리눅스 교과서에 나오는 100개짜리 목록이 아니라, "봇이 죽었는데 왜 죽었지?", "디스크가 꽉 찼대요", "서버 재부팅했는데 봇이 안 켜져요" 같은 실제 상황에서 손이 가는 것들만 담았습니다.

📌 준비물

  • Ubuntu 26.04 LTS (코드명 Resolute Raccoon, 2026-04-23 출시) 기준으로 작성했어요. 24.04 LTS·22.04 LTS에서도 거의 그대로 동작합니다.
  • SSH 접속 가능한 서버 1대 (VPS, 라즈베리파이, 집에 남는 미니PC 다 OK)
  • 윈도우라면 PowerShell 또는 Windows Terminal에 기본 내장된 ssh 명령
터미널
# 서버 접속 (가장 먼저 하는 일)
ssh 사용자명@서버IP

# 포트가 22가 아니라면
ssh -p 2222 사용자명@서버IP

💡 접속하자마자 sudo apt update && sudo apt upgrade -y 한 번 돌려두세요. 보안 패치는 미루면 손해예요.

📌 1단계 - 길 찾기 (여기가 어디죠?)

터미널에 들어가면 제일 먼저 헷갈리는 게 "지금 내가 어느 폴더에 있나"예요.

터미널
pwd                 # 현재 위치 출력 (예: /home/mojang)
ls -alh             # 현재 폴더 목록 (숨김파일 + 용량 읽기 쉽게)
cd /opt/discordbot  # 폴더 이동
cd ..               # 상위 폴더로
cd ~                # 내 홈 폴더로 한 방에

하나씩 뜯어볼게요 💡

  • pwd : print working directory. 지금 서 있는 위치를 알려줘요.
  • ls -alh : -a는 숨김파일(.env 같은 것!)까지, -l은 권한·크기 자세히, -h는 용량을 1.2G처럼 사람이 읽기 좋게.
  • cd ~ : ~는 내 홈 디렉터리(/home/사용자명)를 뜻하는 단축기호예요.

💡 경로를 다 치지 마세요. 몇 글자 치고 Tab 키를 누르면 자동완성됩니다. 이거 하나로 삶이 편해져요 🙌

📌 2단계 - 파일 다루기 (봇 코드 올리고 고치기)

터미널
mkdir -p /opt/discordbot/logs      # 폴더 만들기 (-p: 중간 경로까지 한번에)
cp config.example .env             # 복사
mv old_bot.py backup_bot.py        # 이름 변경 / 이동
rm -rf __pycache__                 # 삭제 (되돌리기 없음!)
cat .env                           # 파일 내용 그냥 출력
nano bot.py                        # 파일 편집 (Ctrl+O 저장, Ctrl+X 종료)

하나씩 뜯어볼게요 💡

  • rm -rf : 리눅스에서 가장 위험한 명령어예요. 휴지통이 없어요. 지우기 전에 ls로 경로를 한 번 확인하는 습관을 들이세요.
  • nano : 초보자에게 가장 편한 편집기. vim은 나중에 배워도 늦지 않아요.
  • cat vs less : 파일이 길면 cat 대신 less 파일명을 쓰세요. 화살표로 스크롤, q로 종료됩니다.

🧩 내 PC에서 서버로 파일 보내기 (scp)

터미널
# 내 컴퓨터(PowerShell)에서 실행 — 서버로 업로드
scp C:\Users\me\bot.py 사용자명@서버IP:/opt/discordbot/

# 폴더째 올릴 땐 -r
scp -r C:\Users\me\mybot 사용자명@서버IP:/opt/

📌 3단계 - 권한 (Permission denied가 뜨는 이유)

리눅스 입문자가 가장 많이 만나는 벽이 권한이에요.

터미널
chmod +x start.sh                  # 실행 권한 주기
chmod 600 .env                     # 나만 읽고 쓰기 (토큰 파일 필수!)
chown -R mojang:mojang /opt/discordbot   # 소유자 통째로 변경
sudo 명령어                         # 관리자 권한으로 실행

하나씩 뜯어볼게요 💡

  • chmod 600 : 숫자는 소유자-그룹-기타 순서예요. 6은 읽기(4)+쓰기(2), 0은 아무 권한 없음. 즉 나만 볼 수 있는 파일이 됩니다.
  • .env는 반드시 600으로 두세요. 디스코드 봇 토큰이 들어있는 파일이 다른 사용자에게 읽히면 서버가 통째로 털립니다.
  • sudo : 매번 붙이지 말고, 정말 시스템을 건드릴 때만 쓰세요.
터미널
# .env 예시 (토큰은 절대 코드에 직접 쓰지 않기!)
cat > /opt/discordbot/.env << 'EOF'
token=여기에_봇_토큰
EOF
chmod 600 /opt/discordbot/.env

파이썬 쪽에서는 이렇게 불러오면 돼요. (pip install python-dotenv 필요)

Python
# python-dotenv 1.2.x / Python 3.10+
from dotenv import load_dotenv
import os

load_dotenv()
token = os.getenv("token")

💡 .env는 .gitignore에 꼭 추가하세요. 깃허브에 토큰 올라가면 디스코드가 자동으로 토큰을 무효화시킵니다.

📌 4단계 - 프로세스·서비스 (봇이 살아있나요?)

운영자가 제일 자주 쓰는 구간이에요.

터미널
htop                                 # 실시간 CPU·메모리 모니터 (q로 종료)
ps aux | grep python                 # 파이썬 프로세스 찾기
kill -9 12345                        # PID 12345 강제 종료

sudo systemctl status discordbot     # 서비스 상태 확인
sudo systemctl restart discordbot    # 재시작
sudo systemctl enable discordbot     # 부팅 시 자동 시작 등록
journalctl -u discordbot -n 50 -f    # 로그 실시간 보기

하나씩 뜯어볼게요 💡

  • htop : 없으면 sudo apt install htop으로 설치. top보다 훨씬 보기 편해요.
  • ps aux | grep python : |(파이프)는 앞 명령 결과를 뒤 명령에 넘기는 기호예요. "전체 프로세스 목록에서 python이 든 줄만 보여줘"라는 뜻.
  • journalctl -f : -f는 follow, 즉 로그가 새로 쌓이는 걸 실시간으로 따라가요. 봇이 죽는 순간을 잡는 최고의 도구입니다.
  • systemctl enable : 이걸 안 걸어두면 서버 재부팅 후 봇이 안 켜져요. 가장 흔한 사고입니다.

📌 5단계 - 디스크·네트워크 ("용량 꽉 찼대요")

터미널
df -h                       # 디스크 전체 사용량
du -sh /opt/discordbot/*    # 폴더별 용량 (범인 찾기)
free -h                     # 메모리 사용량
ss -tulpn                   # 열려있는 포트 확인
curl ifconfig.me            # 서버 공인 IP 확인

하나씩 뜯어볼게요 💡

  • df -h : Use%가 90%를 넘으면 위험 신호예요.
  • du -sh : 용량 범인은 대부분 로그 파일입니다. 게임서버 로그는 며칠만 방치해도 GB 단위로 불어나요.
  • ss -tulpn : 게임서버 포트(예: 아크 7777, 마크 25565)가 실제로 열려있는지 확인할 때 씁니다.

📌 전체 코드 (복붙 OK)

서버에 처음 접속했을 때 그대로 돌릴 수 있는 초기 세팅 스크립트예요.

터미널
#!/bin/bash
# Ubuntu 26.04 LTS / 24.04 LTS 공용 — 게임서버·봇 운영 기본 세팅
set -e

echo "[1/5] 패키지 업데이트"
sudo apt update && sudo apt upgrade -y

echo "[2/5] 운영 필수 도구 설치"
sudo apt install -y htop curl git unzip python3-pip python3-venv

echo "[3/5] 작업 폴더 생성"
sudo mkdir -p /opt/discordbot/logs
sudo chown -R "$USER":"$USER" /opt/discordbot

echo "[4/5] 파이썬 가상환경 준비"
cd /opt/discordbot
python3 -m venv venv
./venv/bin/pip install --upgrade pip
./venv/bin/pip install python-dotenv

echo "[5/5] .env 자리 만들기 (토큰은 직접 입력하세요)"
[ -f .env ] || printf 'token=\n' > .env
chmod 600 .env

echo "완료! nano /opt/discordbot/.env 로 토큰을 넣어주세요."

저장하고 실행하는 법이에요.

터미널
nano setup.sh        # 위 내용 붙여넣기 → Ctrl+O, Enter, Ctrl+X
chmod +x setup.sh
./setup.sh

📌 실행 결과

스크립트가 끝나면 /opt/discordbot 폴더에 venv와 권한 600짜리 .env가 만들어져 있어요. ls -alh로 확인하면 .env 권한이 -rw-------로 표시됩니다. 여기에 토큰만 넣고 systemd 서비스를 등록하면 24시간 봇 운영 준비 끝이에요 🙌

📌 자주 나는 에러

1. Permission denied

  • 원인: 실행 권한이 없거나, 남의 소유 폴더를 건드리는 중
  • 해결: chmod +x 파일명 또는 sudo chown -R $USER:$USER 폴더명

2. command not found: htop

  • 원인: 패키지가 설치되어 있지 않음
  • 해결: sudo apt install htop (그래도 안 되면 sudo apt update 먼저)

3. 서버 재부팅 후 봇이 안 켜져요

  • 원인: systemd 서비스에 enable을 안 걸어둠
  • 해결: sudo systemctl enable 서비스명 후 sudo systemctl is-enabled 서비스명으로 enabled 확인

4. No space left on device

  • 원인: 로그 파일 누적
  • 해결: du -sh /var/log/*로 범인 찾고 sudo journalctl --vacuum-time=7d로 7일치만 남기기

5. SSH 접속이 갑자기 안 돼요

  • 원인: 방화벽 규칙 변경 또는 포트 변경
  • 해결: VPS 웹 콘솔로 접속해 sudo ufw status, sudo ss -tulpn | grep sshd 확인

📌 마무리

오늘은 게임서버·디스코드 봇 운영자가 진짜로 매일 쓰는 리눅스 명령어 20개를 정리했어요. 정리하면 이렇게 5덩어리예요.

  • 길 찾기: pwd ls -alh cd
  • 파일: mkdir cp mv rm cat nano scp
  • 권한: chmod chown sudo
  • 프로세스: htop ps kill systemctl journalctl
  • 자원: df -h du -sh free -h ss -tulpn curl

이 20개만 손에 익으면 서버 운영의 90%는 해결됩니다. 나머지 10%는 검색으로 충분해요 😎

다음 편에서는 서버가 꺼져도 자동으로 살아나게 만드는 자동 재시작·백업 스크립트를 다뤄볼게요. cron과 systemd timer로 매일 새벽에 백업을 뜨는 실전 구성입니다. 기대해주세요 🙌

💬 궁금한 명령어나 막히는 부분 있으면 댓글로 남겨주세요!

글쓴이

Mojangcam

직접 코드를 짜고, 서버를 돌리고, 막힌 에러를 해결하며 배운 것들을 기록하는 개발·IT 실전 기록 블로그