Linux 시스템 관리 2026

현대 서버 환경에서 Linux 시스템 관리는 컨테이너, 클라우드, AI 워크로드에 최적화된 방향으로 발전했습니다. 이 가이드에서는 현업에서 바로 활용할 수 있는 핵심 명령어와 모범 사례를 정리합니다.

1. systemd 완벽 활용

현대 Linux 배포판의 핵심 init 시스템인 systemd를 효과적으로 활용하는 방법입니다.

# 서비스 관리
systemctl status nginx           # 상태 확인
systemctl start|stop|restart nginx  # 서비스 제어
systemctl enable nginx           # 부팅 시 자동 시작
systemctl disable nginx          # 자동 시작 해제
systemctl reload nginx           # 설정 재로드 (재시작 없이)

# 서비스 목록
systemctl list-units --type=service         # 실행 중인 서비스
systemctl list-units --type=service --all   # 전체 서비스
systemctl list-units --failed               # 실패한 유닛

# 커스텀 서비스 작성
sudo nano /etc/systemd/system/myapp.service
# /etc/systemd/system/myapp.service 예시
[Unit]
Description=My Node.js Application
After=network.target postgresql.service
Requires=postgresql.service

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/dist/index.js
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

# 환경변수 파일 지정
EnvironmentFile=/opt/myapp/.env

# 보안 강화
NoNewPrivileges=true
ProtectSystem=strict
PrivateTmp=true
ReadWritePaths=/opt/myapp/logs

# 리소스 제한
MemoryMax=512M
CPUQuota=50%

[Install]
WantedBy=multi-user.target
# 서비스 등록 및 시작
sudo systemctl daemon-reload   # 새 서비스 파일 인식
sudo systemctl enable --now myapp
sudo systemctl status myapp

2. journalctl로 로그 분석

# 기본 로그 조회
journalctl -u nginx             # nginx 서비스 로그
journalctl -u nginx -f          # 실시간 추적 (tail -f)
journalctl -u nginx -n 100      # 최근 100줄
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx --since "2026-04-13 00:00" --until "2026-04-13 12:00"

# 중요도 필터링
journalctl -p err               # 에러 이상만 (emerg, alert, crit, err)
journalctl -p warning -u myapp  # 경고 이상만

# JSON 형식으로 출력 (로그 분석 자동화)
journalctl -u myapp -o json | jq '.MESSAGE' | head -20

# 시스템 부팅 로그
journalctl -b          # 현재 부팅 로그
journalctl -b -1       # 이전 부팅 로그
journalctl --list-boots # 부팅 이력

# 로그 용량 관리
journalctl --disk-usage             # 현재 사용량
sudo journalctl --vacuum-size=1G    # 1GB로 제한
sudo journalctl --vacuum-time=30d   # 30일 이상된 로그 삭제

3. 성능 모니터링 명령어

# CPU 및 프로세스 모니터링
htop                    # 인터랙티브 프로세스 뷰어 (top 개선판)
ps aux --sort=-%cpu | head -20  # CPU 사용률 높은 프로세스
top -b -n 1 -o %CPU    # 배치 모드 (스크립트에서 활용)

# 메모리 분석
free -h                 # 전체 메모리 현황
vmstat 1 5              # 가상 메모리 통계 (1초 간격, 5회)
cat /proc/meminfo       # 상세 메모리 정보

# 디스크 I/O 모니터링
iotop -ao               # 누적 I/O 모니터링 (root 권한)
iostat -x 2 5           # 디스크 상세 통계 (2초 간격, 5회)
df -h                   # 디스크 사용량
du -sh /var/log/*       # 디렉토리별 크기

# 네트워크 모니터링
ss -tunlp               # 열린 포트와 프로세스 (netstat 대체)
nethogs                 # 프로세스별 네트워크 사용량
iftop                   # 인터페이스별 트래픽
ip -s link              # 네트워크 인터페이스 통계

4. 사용자 및 권한 관리

# 사용자 관리
sudo useradd -m -s /bin/bash -G sudo appuser  # 사용자 생성
sudo passwd appuser                             # 비밀번호 설정
sudo usermod -aG docker appuser               # 그룹 추가
sudo userdel -r appuser                       # 사용자 삭제

# sudo 권한 세밀하게 설정
sudo visudo
# appuser ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
# 특정 명령만 비밀번호 없이 실행 가능

# 파일 권한 관리
chmod 755 /opt/myapp/bin/start.sh  # rwxr-xr-x
chmod 640 /opt/myapp/.env          # rw-r----- (환경변수 파일)
chown appuser:appgroup /opt/myapp  # 소유자 변경
chmod -R u+X /opt/myapp            # 디렉토리만 실행 권한 추가

# ACL (Access Control List) - 더 세밀한 권한
sudo apt install acl
setfacl -m u:webserver:rx /opt/myapp/logs   # 특정 사용자에게 권한
getfacl /opt/myapp/logs                      # ACL 확인

5. 방화벽 설정 (UFW)

# UFW (Ubuntu Firewall) - 간편한 방화벽 관리
sudo ufw status verbose        # 현재 상태
sudo ufw enable                # 방화벽 활성화

# 규칙 추가
sudo ufw allow 22/tcp          # SSH
sudo ufw allow 80/tcp          # HTTP
sudo ufw allow 443/tcp         # HTTPS
sudo ufw allow from 192.168.1.0/24 to any port 5432  # 내부 망에서만 PostgreSQL

# 서비스 이름으로도 가능
sudo ufw allow 'Nginx Full'

# 규칙 삭제
sudo ufw delete allow 8080/tcp
sudo ufw status numbered       # 번호 확인
sudo ufw delete 3              # 번호로 삭제

# nftables로 상세 제어 (iptables 대체)
sudo nft list ruleset          # 현재 규칙 확인

6. 시스템 성능 튜닝

# 커널 파라미터 조정 (sysctl)
# /etc/sysctl.d/99-custom.conf

# 네트워크 성능 향상
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_syn_backlog = 8096
net.ipv4.tcp_tw_reuse = 1

# 메모리 관리
vm.swappiness = 10             # SSD 서버는 낮게 설정 (기본 60)
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

# 파일 디스크립터 제한
fs.file-max = 2097152

# 적용
sudo sysctl -p /etc/sysctl.d/99-custom.conf

# 파일 디스크립터 제한 늘리기 (/etc/security/limits.conf)
# * soft nofile 65535
# * hard nofile 65535
# appuser soft nofile 65535
# appuser hard nofile 65535

# 현재 제한 확인
ulimit -n           # 현재 세션
cat /proc/sys/fs/file-max  # 시스템 전체 최대값

7. 스크립트 자동화 (Bash)

#!/bin/bash
# 시스템 헬스체크 스크립트

set -euo pipefail  # 오류 시 즉시 종료, 미정의 변수 오류 처리

# 색상 정의
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

check_service() {
    local service=$1
    if systemctl is-active --quiet "$service"; then
        echo -e "${GREEN}[OK]${NC} $service is running"
    else
        echo -e "${RED}[FAIL]${NC} $service is NOT running"
        systemctl status "$service" --no-pager -l
    fi
}

check_disk() {
    local threshold=85
    while IFS= read -r line; do
        usage=$(echo "$line" | awk '{print $5}' | tr -d '%')
        mount=$(echo "$line" | awk '{print $6}')
        if [ "$usage" -ge "$threshold" ]; then
            echo -e "${RED}[WARN]${NC} Disk $mount is ${usage}% full"
        fi
    done < <(df -h | grep -v '^Filesystem')
}

echo "=== System Health Check: $(date) ==="
echo ""
echo "--- Services ---"
check_service nginx
check_service postgresql
check_service myapp

echo ""
echo "--- Resources ---"
echo "Load Average: $(uptime | awk -F'load average:' '{print $2}')"
echo "Memory: $(free -h | awk '/^Mem:/ {print $3 "/" $2}')"
check_disk

echo ""
echo "=== Check Complete ==="

마치며

Linux 시스템 관리는 systemd 기반의 서비스 관리, journalctl 로그 분석, 보안 설정의 3가지 축을 중심으로 체계화할 수 있습니다. 위에서 다룬 명령어들을 셸 스크립트로 자동화하면 운영 부담을 크게 줄일 수 있습니다.