본문 바로가기
Tutorial/OS

리눅스 기초 명령어 ②: 시스템 관리와 운영의 기본 루틴

by CLJ 2025. 10. 13.

리눅스에서 시스템이 느려지거나 저장공간이 부족할 때, 원인을 정확히 파악하고 즉시 조치하는 능력은 관리자의 실력이다. 이번 글에서는 서버 관리자들이 매일 사용하는 디스크 점검(df, du), 프로세스 관리(ps, top, kill), 백업(tar), 시스템 제어(sudo) 명령어를 정리한다. 


📚 목차 (id 구조 포함, 티스토리 HTML 친화형)

  1. 디스크·용량 관리(df, du)
  2. 프로세스·자원 모니터링(ps, top, kill)
  3. 압축·아카이브로 효율적 백업(tar)
  4. 관리자 권한과 시스템 제어(sudo)
  5. 운영자의 일상 루틴 예시
  6. 정리

 

1. 디스크·용량 관리(df, du)

서버의 저장공간이 부족하면 로그가 쌓이지 않거나 시스템이 멈출 수 있다. 디스크 상태를 주기적으로 확인하는 것은 기본적인 관리 루틴이다. df와 du는 각각 disk free와 disk usage를 의미하며 저장공간 문제를 진단할 때 가장 많이 사용하는 명령어다.

df -h
  • 시스템 전체 디스크 사용량을 요약해 보여준다.
  • -h 옵션은 GB, MB 단위로 보기 쉽게 표시한다.
  • 출력 결과의 Use% 값이 80% 이상이면 해당 파티션을 점검해야 한다.
du -sh /var/log
  • 특정 디렉터리의 전체 용량을 계산한다.
  • -s는 합계(summary), -h는 읽기 쉬운 단위를 의미한다.

폴더별로 용량이 얼마나 되는지 비교하려면 다음 명령을 사용한다.

du -h --max-depth=1 /var/log | sort -hr | head
  • /var/log 하위 폴더의 용량을 1단계 깊이까지만 계산한다.
  • sort -hr은 사람이 읽기 좋은 단위(GB, MB)를 기준으로 큰 순서대로 정렬한다.
    • -h : 단위가 있는 숫자(예: 1G, 500M)를 크기순으로 정렬
    • -r : 내림차순 정렬, 즉 큰 값부터 표시
  • head는 정렬된 결과의 상위 10개 항목만 출력한다.

이 명령어는 /var/log에서 어떤 폴더가 가장 많은 디스크 공간을 사용하는지 빠르게 파악할 때 유용하다. 용량이 큰 폴더가 확인되면 오래된 로그를 삭제하거나 tar 명령으로 압축해 보관한다. 보통 /var/log, /tmp, /home 순으로 점검하면 효율적으로 공간을 확보할 수 있다.

2. 프로세스·자원 모니터링(ps, top, kill)

서버가 느려질 때는 어떤 프로세스가 CPU나 메모리를 과도하게 사용하는지 확인해야 한다. ps, top, kill 명령은 시스템 상태를 점검하고 문제 있는 프로세스를 제어할 때 사용한다.

ps aux | grep nginx
  • 현재 실행 중인 모든 프로세스를 출력한다.
  • a는 모든 사용자, u는 사용자 정보 포함, x는 터미널에 연결되지 않은 프로세스까지 보여준다.
  • grep nginx는 출력 결과 중 nginx 관련 프로세스만 필터링한다.
top
  • 실시간으로 CPU, 메모리 사용량, 프로세스 목록을 보여준다.
  • CPU 사용률이 높은 순서로 정렬되어 있으며, 실행 중 Shift + P를 누르면 CPU 기준, Shift + M을 누르면 메모리 기준으로 재정렬된다.
  • 서버가 느려질 때는 상단 몇 개의 프로세스만 봐도 원인을 찾을 수 있다.

특정 프로세스를 종료할 때는 kill 명령을 사용한다.

sudo kill -9 [PID]
  • [PID]는 종료할 프로세스의 ID다.
  • -9는 강제 종료 신호(SIGKILL)를 의미한다.
  • 시스템 핵심 프로세스(PID 1번이나 커널 관련)를 종료하면 서버가 즉시 다운될 수 있으므로 주의해야 한다.

자주 사용하는 조합 예시:

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head
  • ps : 현재 실행 중인 프로세스 정보를 출력한다.
  • -e : 시스템의 모든 프로세스를 보여준다.
  • -o : 출력할 항목을 직접 지정한다.
    • pid : 프로세스 ID
    • comm : 실행 중인 명령 이름
    • %cpu : CPU 사용률
    • %mem : 메모리 사용률
  • --sort=-%cpu : CPU 사용률을 기준으로 내림차순 정렬한다.
  • | head : 정렬된 결과 중 상위 10개 프로세스만 출력한다.

위의 명령은 현재 실행 중인 프로세스 중에서 CPU 사용률이 높은 상위 10개 프로세스를 빠르게 확인한다. 문제 프로세스의 PID를 파악한 후에 CPU를 가장 많이 사용하는 프로세스를 빠르게 파악할 수 있으며 서버가 느려질 때 원인 프로세스를 찾는 데 매우 유용하다.

3. 압축·아카이브로 효율적 백업(tar)

여러 파일이나 디렉터리를 하나로 묶거나 백업할 때는 tar 명령을 사용한다.
압축을 통해 공간을 절약하고, 필요할 때 쉽게 복원할 수 있다.

tar -czf backup.tar.gz /home/user/project
  • 지정한 디렉터리를 하나의 압축 파일로 만든다.
  • -c는 새 아카이브 생성(create), -z는 gzip 방식 압축, -f는 파일 이름을 지정한다.
tar -xzf backup.tar.gz
  • 압축된 파일을 해제(extract)한다.
  • -x는 해제, -z는 gzip 압축을 인식, -f는 파일 이름 지정이다.

 

다음 명령어는 /var/log 디렉터리를 날짜가 포함된 이름으로 압축 백업하는 명령이다.

tar -czf backup-$(date +%F).tar.gz /var/log

옵션과 구성 요소 설명은 다음과 같다.

  • tar : 여러 파일이나 디렉터리를 하나의 아카이브 파일로 묶는 명령어.
  • -c : 새로운 아카이브 파일을 생성(create).
  • -z : gzip 형식으로 압축.
  • -f : 결과 파일 이름 지정.
  • backup-$(date +%F).tar.gz : $(date +%F)는 현재 날짜(예: 2025-10-13)를 자동으로 삽입. %F는 date 명령어의 형식 지정자(format specifier) 중 하나로, 날짜를 YYYY-MM-DD (연-월-일) 형식으로 출력. 파일 이름이 backup-2025-10-13.tar.gz 형태로 생성됨.
  • /var/log : 압축 대상 디렉터리.

이 명령어는 백업 파일에 날짜를 자동으로 붙여 관리하기 쉽고, 중복 덮어쓰기를 방지할 수 있어 정기 로그 백업 자동화에 자주 사용된다.

 

자동 백업을 위해 crontab에 다음과 같이 등록할 수 있다. 다음은 리눅스 crontab(자동 실행 스케줄러)에 등록하여
매일 새벽 2시에 /home 디렉터리를 자동으로 백업하는 설정이다.

0 2 * * * tar -czf /backup/home-$(date +\%F).tar.gz /home

구성 요소별 설명은 다음과 같다.

  • **0 2 * * *** : 분 시 일 월 요일 순서로 0 2 * * *는 매일 새벽 2시 0분에 실행을 의미한다.
  • tar -czf /backup/home-$(date +%F).tar.gz /home : /home 디렉터리를 /backup 폴더 안에 날짜가 포함된 이름으로 gzip 압축 백업한다. $(date +\%F)는 crontab에서 % 문자를 인식하지 못하기 때문에, \%F처럼 백슬래시로 이스케이프해야 한다. 실행 시 실제로는 2025-10-13 같은 날짜가 삽입된다.

결과적으로, 이 설정은 매일 자동으로 /backup 경로에 home-2025-10-13.tar.gz, home-2025-10-14.tar.gz …
형태의 백업 파일을 생성한다. 즉, 자동 백업 루틴의 표준 형태이며, 관리자는 별도 명령 없이도 매일 최신 백업 파일을 확보할 수 있다.

4. 관리자 권한과 시스템 제어(sudo)

리눅스에서는 일반 사용자 계정으로 대부분의 작업을 수행하지만, 시스템 설정이나 서비스 제어에는 관리자(root) 권한이 필요하다. sudo는 이러한 관리자 권한으로 명령을 실행할 때 사용하는 명령어다. "superuser do"의 약자로, 명령 실행 시 임시로 root 권한을 부여한다.

sudo apt update
  • 패키지 목록을 갱신한다.
  • 시스템 업데이트나 설치 작업 전 필수적으로 실행하는 명령이다.
sudo systemctl restart nginx
  • nginx 서비스를 재시작한다.
  • 서비스 설정을 변경한 후 즉시 반영할 때 사용한다.

sudo 명령을 실행하면 사용자 비밀번호를 입력해야 하며, 모든 실행 내역은 /var/log/auth.log에 기록된다. 이는 보안 감사나 문제 추적 시 유용하다. 관리자 권한을 사용할 때는 항상 명령을 두 번 확인해야 한다. 예를 들어 다음 명령은 시스템 전체를 삭제할 수 있으므로 절대 실행해서는 안 된다.

sudo rm -rf /

sudo를 사용할 때는 목적이 명확해야 하며, 불필요한 권한 상승은 보안 위험을 초래한다. 가능하다면 특정 명령만 허용하도록 /etc/sudoers 파일을 설정해야 한다. 이 파일을 수정할 때는 반드시 visudo 명령을 사용해야 하며, 이는 문법 오류를 자동으로 검사해 sudo 기능이 완전히 비활성화되는 실수를 방지하기 위해서다. 직접 편집기(vi, nano 등)로 열어 수정하면 시스템 접근 권한이 손상될 수 있으므로 사용해서는 안 된다.

5. 운영자의 루틴 예시

서버 관리자는 주기적으로 시스템 상태를 점검하고, 이상 징후를 조기에 발견해야 한다. 다음은 하루 또는 주 단위로 수행하면 좋은 기본 점검 루틴 예시다.

# 디스크 용량 확인
df -h | grep -v tmpfs
du -h --max-depth=1 /var/log | sort -hr | head
  • 디스크 사용량을 점검하고, 용량이 80% 이상인 파티션을 우선 확인한다.
  • 로그 폴더에서 불필요한 파일은 압축하거나 삭제한다.
# CPU·메모리 상태 확인
top -b -n 1 | head -20
ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head
  • 현재 CPU, 메모리 사용량이 비정상적으로 높은 프로세스를 확인한다.
  • 지속적으로 자원을 점유하는 프로세스는 로그나 설정을 점검한다.
# 로그 백업 및 정리
tar -czf /backup/logs-$(date +%F).tar.gz /var/log
find /var/log -type f -mtime +7 -delete
  • 매일 또는 매주 로그를 압축해 백업하고, 7일 이상된 파일은 자동 삭제한다.
  • 정기 백업 폴더는 별도 디스크나 원격 스토리지에 보관한다.
# 서비스 점검 및 재시작
sudo systemctl status nginx
sudo systemctl restart nginx
  • 웹 서버나 주요 서비스의 상태를 확인하고, 필요시 재시작한다.
  • 서비스가 비정상적으로 종료되는 경우 로그 파일을 먼저 검토한다.

이러한 점검 루틴을 자동화 스크립트나 crontab에 등록하면 관리 효율이 높아진다. 작은 서버라도 이러한 기본 루틴을 꾸준히 유지하면 장애 발생 확률을 크게 줄일 수 있다.

6. 정리

이번 글에서는 리눅스 시스템 운영자가 자주 사용하는 핵심 명령들을 실무 중심으로 정리했다. dfdu로 저장공간을 확인하고, ps, top, kill로 프로세스를 관리했다. tar로 백업과 압축을 수행했으며, sudo로 시스템을 제어하는 방법도 살펴보았다. 이 명령어들은 서버 운영의 기본 루틴을 구성하는 핵심 도구다. 정기적인 점검과 백업 습관만으로도 대부분의 장애는 사전에 예방할 수 있다. 리눅스를 알아가는 것은 시스템이 동작하는 원리를 이해하며 제어하는 과정이다.

다음 글에서는 리눅스 네트워크 진단 명령어를 다룬다. ping, netstat, ss, traceroute 등을 통해 네트워크 연결 상태를 점검하고, 서버 간 통신 문제를 분석하는 방법을 정리할 예정이다.