Contents
see ListLinux 시스템 관리 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가지 축을 중심으로 체계화할 수 있습니다. 위에서 다룬 명령어들을 셸 스크립트로 자동화하면 운영 부담을 크게 줄일 수 있습니다.