개요

리눅스에서는 다양한 성능 모니터링 도구를 통해 CPU, 메모리, 디스크, 네트워크 자원 상태를 확인하고, 문제 발생 시 빠르게 원일을 파악할 수 있습니다.

이번 글에서는 가장 자주 사용되는 다음의 도구들을 소개하겠습니다.

 

주요 성능 모니터링 도구

1. top - 실시간 프로세스 모니터링

top

top

● 실시간으로 CPU, 메모리, 프로세스 정보를 확인

● 기본으로 설치되어 있음

● 단축키 

P CPU 사용률 정렬
M 메모리 사용률 정렬
k 프로세스 종료
q 종료

 

 

2. htop - 상호작용이 가능한 top

sudo apt install htop -y
htop

● top 보다 보기 쉬운 UI

● 방향키로 프로세스 선택 가능

● 마우스 지원

● F키로 명령 실행 (F9: 종료 등)

시각적인 리소스 파악에 좋음

 

3. vmstat - 시스템 성능 요약 정보

vmstat 1

● 시스템의 메모리, 스왑, I/O, CPU 사용량을 요약해서 보여줌

● 예시 출력 항목: r, b, swpd, free, si, so, us, sy, id, wa

컬럼 의미
r Run queue의 수. 즉, 실행 대기 중인 프로세스
CPU에서 실행되길 기다리는 프로세스가 몇 개인지를 나타냅니다.
숫자가 많을수록 CPU가 바쁨을 의미
b Blocked 상태의 프로세스 수.
디스크 I/O나 네트워크 등의 자원 요청으로 대기 중인 프로세스 수입니다
swpd 스왑 공간에 사용 중인 메모리(KB 단위)
free 사용 가능한 메모리(KB 단위)
buff 버퍼에 사용 중인 메모리
cache 캐시에 사용 중인 메모리
si 스왑인: 디스크에서 메모리로 스왑된 양(KB/sec)
so 스왑아웃: 메모리에서 디스크로 스왑된 양(KB/sec)
bi 블록 입력 (디스크 읽기)
bo 블록 출력 (디스크 쓰기)
in 인터럽트 수 (초당)
cs 컨텍스트 수의치 수 (초당)
us 사용자 영역에서 CPU 사용 비율 (%)
sy 시스템 영역에서 CPU 사용 비율 (%)
id 유휴(idle) 상태 CPU 비율 (%)
wa I/O 대기 시간 비율 (%)
st 가상화 환경에서 다른 가상 머신에 의해 도난당한 CPU 시간 비율

 

정리

● r이 많다면 CPU 병목 현상 가능성 있음

● b가 많다면 디스크 I/O나 네트워크 지연 가능성 있음

 

4. iostat - 디스크 I/O 상태 확인

sudo apt install sysstat
iostat -x 1

● 디스크 장치의 읽기/쓰기 속도, 큐 길이 등 확인

● -x 옵션으로 상세 정보 제공

디스크 병목 원인을 찾을 때 유용

 

5. free - 메모리 상태 확인

free -h

● 시스템 메모리와 스왑 상태를 요약

● -h: 사람이 읽기 쉬운 형식 (MB, GB)

 

6. sar - 시스템 활동 기록 분석

sudo apt install sysstat
sar -u 1 5

● 과거 데이터를 저장하고 불러올 수 있음

● CPU, 메모리, 네트워크, I/O 등 폭넓게 지원

● -u: CPU 사용률, -r: 메모리, -n DEV: 네트워크

장시간 서버 부하 분석 시 필수 도구

 

7. nom - 통합 성능 분석 도구

sudo apt install nmon
nmon

 

● CPU, Memory, Disk, Network, NFS, TCP 등 실시간 모니터링

● 키보드 단축키 기반 UI

● CSV 로그로 저장 가능 (nmon -f)

모든 시스템 성능을 한눈에 볼 수 있는 올인원 도구

 

정리

도구 목적 특징
top 전체 시스템 자원 실시간 모니터링 기본 설치, 단순하고 강력
htop 시각적 프로세스 관리 마우스 지원, 사용자 친화적
vmstat 시스템 요약 메모리, CPU, I/O 등 요약 정보
iostat 디스크 성능 디스크 병목 분석
free 메모리 현황 메모리 사용량 빠르게 확인
sar 기록 기반 성능 분석 로그 저장 가능, 장기 모니터링
nmon  종합 성능 도구 그래픽 기반, CSV 저장 지원

 

마무리

운영 중인 리눅스 서버나 시스템의 상태를 파악하는 건 필수라고 생각합니다. 

위의 도구들을 익숙하게 사용하면, 문제 발생 시 빠르게 대응할 수 있습니다.

1. 파일 시스템이란?

파일 시스템(File System)은 운영체제가 데이터를 저장하고, 읽고, 관리할 수 있도록 해주는 저장 구조 방식입니다. 

쉽게 말하면, 하드디스크에 파일을 정리해 두는 규칙과 틀이라고 할 수 있습니다.

 

2. 왜 중요한가요?

● 리눅스에서의 파일 접근은 모두 파일 시스템 위에서 동작합니다.

● 파일 시스템이 깨지거나 잘못 구성되면 데이터 손실이 발생할 수 있습니다.

● 실무에서 디스크 파티션 구성, 마운트 관리, 성능 이슈 분석 등에서 매우 중요합니다.

 

3. 대표적인 리눅스 파일 시스템 종류

3-1. ext4(Fourth Extended File System)

개요

● 현재 대부분의 리눅스 배포판에서 기본 파일 시스템으로 사용

● ext3의 후속 버전으로 안정성과 성능 향상

특징

저널링 지원 : 시스템 오류 시 빠른 복구 가능

최대 파일 크기 : 16TB

최대 볼륨 크기 : 1EB (이론 상)

지연 할당(Delayed Allocation) : 성능 향상

백그라운드에서 자동 fsck 가능

사용 예

● Ubuntu, Debian, CentOS 등 거의 모든 리눅스 배포판에서 기본값

 

3-2. XFS (Extended File System by SGI)

개요 

● 고성능, 대용량 파일 처리에 최적화된 저널링 파일 시스템

● Red Hat 계열에서 주로 사용됨 (특히 CentOS, RHEL)

특징

고속 입출력(I/O) 처리에 강함

대형 파일대용량 파일 시스템 지원

● 실시간 디플래그(Defragmentaion) 가능

● xfs_growfs 명령어로 마운트 된 상태에서도 볼륨 확장 가능

단점

● 기본적으로 파일 시스템 축소는 지원하지 않음

사용 예

● RHEL, CentOS, Amazon Linux2 등

 

3-3. Btrfs (B-Tree File System)

개요

● "Better FS"라는 별명을 가진 차세대 파일 시스템

● 스냅샷, 압축, 체크섬 등 다양한 고급 기능 탑재

특징

스냅샷(Snapshot) 기능 내장 → 특정 시점 상태로 복구 가능

RAID 기능 통합 지원

서브볼륨(Subvolume) 기능으로 유연한 디렉터리 관리

데이터 및 메타 데이터 무결성 검사 지원

● 압축 기능 (zlib, lzo, zstd 등)

주의사항

● 여전히 파일 시스템 손상 이슈 보고됨 → 신중하게 사용해야 함

● 중요한 시스템에서는 신뢰성과 안정성을 우선 고려

사용 예

● openSUSE, 일부 Ubuntu 환경

 

3-4. VFAT (Virtual FAT) / FAT32

개요

● Windows와의 호환을 위해 사용되는 파일 시스템

● FAT32는 특히 USB 메모리나 SD카드에서 자주 사용됨

특징

● 리눅스 윈도 간 데이터 공유에 적합

파일 권한 관리 미지원 (Unix 방식 권한 없음)

파일 크기 제한 : 4GB

사용 예

● USB 드라이브, 외장 저장장치, EFI 시스템 파티션 등

 

3-5.NTFS (New Technology File System)

개요

● Windows에서 사용하는 대표적인 파일 시스템

● 리눅스에서도 ntfs-3g 패키지를 통해 마운트 및 읽기/쓰기 가능

특징

● 파일 권한 및 ACL 지원

● 대용량 파일, 압축, 암호화 지원

퍼포먼스는 ext4보다 떨어질 수 있음

사용 예

● 듀얼 부팅 환경에서 Windows 파티션 마운트할 때

 

요약 비교

파일 시스템  특징 쓰임새
ext4 안정성 높음, 범용적 대부분의 리눅스 시스템
xfs 고성능, 대용량 지원 RHEL/CentOS 기반 시스템
btrfs 스냅샷/압축/무결성 지원 실험적, 일부 서버/개발환경
vfat 간단, 윈도우 호환 USB, 외장장치
ntfs 윈도우 전용, 권한 지원 윈도우와 데이터 공유 시 사용

 

4. 파일 시스템의 구성 요소

Superblock: 전체 파일 시스템 정보를 담고 있는 메타 데이터

inode: 파일 자체의 정보(소유자, 크기, 퍼미션 등)를 저장

데이터 블록: 실제 파일 내용이 저장되는 공간

디렉터리 엔트리: 파일 이름과 inode 번호를 연결

 

5. 실습으로 알아보는 파일 시스템 명령어

현재 사용 중인 파일 시스템 확인하기

df -T
# -T 옵션은 마운트된 디렉터리의 파일 시스템 종류를 보여줍니다.

 

디스크 사용량 보기

df -h
# -h는 "human-readable"로, MB/GB 단위로 보기 좋게 출력합니다.

 

디스크/파티션 구조 보기

lsblk

 

파일 시스템 마운트 상태 확인

mount | grep "^/dev"
# 현재 마운트된 파일 시스템 목록 출력

 

특정 장치 수동 마운트하기

sudo mount /dev/sdb1 /mnt
# /dev/sb1 파티션은 /mnt 디렉터리에 연결 / 연결을 해제하려면 umount /mnt

 

마무리

파일 시스템은 단순한 저장공간이 아니라, 운영체제가 파일을 이해하는 방식 그 자체입니다. 

리눅스를 다루는 입장에서 꼬 이해하고 넘어가야 할 개념입니다.

마운트와 inode와 같은 주요 개념들은 이후 글에 포스팅하겠습니다. 감사합니다.

 

Part 1 : logrotate - 로그 파일을 자동으로 관리하자 

logrotate란?

리눅스 시스템의 로그 파일은 시간이 지남에 따라 용량이 커지고, 관리가 어려워질 수 있습니다.

logrotate는 이러한 로그 파일을 주기적으로 순환(rotate) 하여 압축하거나 삭제함으로써 디스크 용량을 효율적으로 관리해 주는 도구입니다.

 

동작 방식 요약

● 주기적으로 로그 파일을 새로운 파일로 교체하고,

● 이전 로그는 압축(.gz)하거나 일정 개수 이상이면 삭제합니다.

● 설정 파일을 기반으로 동작합니다.

 

설정 파일 경로

/etc/logrotate.conf
/etc/logrotate.d/

 

예시 설정 (/etc/logrotate.d/nginx)

nginx 로그파일의 logrotate 설정 파일

상세 옵션 설명

항목 설명
daily 로그를 매일 회전합니다.
missingok 로그 파일이 없어도 에러 없이 넘어갑니다.
rotate 14 로그 파일을 최대 14개 보관하고, 그 이상은 삭제됩니다.
compress 회전된 오래된 로그 파일을 gzip으로 압축합니다 (예: .log.1.gz)
delaycompress 바로 압축하지 않고 다음 회전 때 압축합니다.
notifempty 로그 파일이 비어있다면 회전하지 않습니다.
create 0640 www-data adm 새 로그 파일을 생성할 때 권한 0640, 소유자 www-data, 그룹 adm 으로 설정합니다.
sharedscripts 여러 로그 파일에 대해 하나의 prerotate 및 postrotate 스크립트만 실행되도록 합니다.

 

prerotate 블록

prerotate
    if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
        run-parts /etc/logrotate.d/httpd-prerotate; \
    fi \
endscript

● 로그 회전 전에 실행되는 스크립트입니다.

● /etc/logrotate.d/httpd-prerotate 디렉터리가 있다면, 그 안에 있는 스크립트를 run-parts로 실행합니다.

● 일반적으로 Apache용 설정인데, 환경에 따라 공통 처리 스크립트를 두는 용도로 쓰일 수 있습니다.

 

postrotate 블록

postrotate
    invoke-rc.d nginx rotate >/dev/null 2>&1
endscript

● 로그 회전 후에 실행되는 명령입니다.

● invoke-rc.d nginx rotate는 nginx 프로세스에 로그 파일을 다시 열도록 명령합니다. 그렇지 않으면 nginx는 여전히 삭제된 이전 로그에 계속 로그를 쓰게 됩니다.

● 출력은 모두 숨김 처리 (>/dev/null 2>&1).

 

요약

● nginx 로그 파일을 매일 회전하고, 

14개까지 백업을 보관하며, 

압축 및 권한 설정, 비어있을 경우 생략 등을 자동 처리합니다.

● 회전 전과 후에 스크립트를 실행하여 nginx가 새 로그를 제대로 인식하도록 돕습니다.

 

수동 테스트

sudo logrotate -d /etc/logrotate.conf	# 디버그 모드 (동작 예측)	
sudo logrotate -f /etc/logrotate.conf	# 강제적 실행

 

Part 2 : journalctl과의 차이점

journalctl이란?

journalctl은 systemd에서 제공하는 이진(binary) 형식의 로그 시스템입니다.

로그가 /var/log/*.log 처럼 파일에 저장되는 대신, 바이너리 형식으로 /var/log/journal 디렉터리에 저장되며 다양한 필터링 기능을 제공합니다.

 

주요 차이점 비교

항목 logrotate journalctl
로그 저장 방식 텍스트 파일  바이너리 형식 (systemd-journald)
저장 위치 /var/log/*.log /var/log/journal/
관리 방식  주기적 순환, 압축, 삭제 journald.conf 로 보존 기간/크기 설정
필터링 기능  grep, awk 등 수동 처리 journalctl에서 강력한 필터링 지원
대상 시스템 SysVinit, 전통적인 서비스 구조 systemd 기반 시스템
예시 명령어 tail -f /var/log/syslog journalctl -u nginx.service

 

journal 로그 보존 설정 (/etc/systemd/journald.conf)

/etc/systemd/journald.conf

저장 관련 옵션

항목 설명
#Storage-auto 로그 저장 방식:
- auto: /var/log/journal 디렉토리 있으면 디스크, 없으면 메모리 저장
- persistent : 항상 디스크에 저장
- volatile : 항상 메모리에 저장
- none : 저장하지 않음
#Compress=yes 오래된 로그 파일을 압축하여 저장할지 여부 (yes/no)
#Seal=yes 로그 파일에 "무결설 서명(seal)"을 할지 여부 (보안 강화)
#SplitMode=uid 사용자 UID별로 로그를 분할할지 설정:
- uid : 사용자별로 분할
- none : 분할 안 함
#SyncIntervalSec=5m 로그를 디스크에 "동기화(쓰기 flush)" 하는 주기
#RateLimitIntervalSec=30s 로그 속도 제한 간격 : 30초 동안
#RateLimitBurst=10000 로그 최대 burst 수 : 설정한 시간 내 최대 10.000건까지만 허용

 

디스크 사용량 제어

항목 설명
#SystemMaxUse= /var/log/journal 전체에서 사용 가능한 최대 용량
#SystemKeepFree= 로그 저장 후 남겨야 할 최소 디스크 공간
#SystemMaxFileSize= 하나의 로그 파일의 최대 크기
#SystemMaxFiles=100 시스템 로그 파일 최대 개수
#RuntimeMaxUse= /run/log/journal (RAM)에서 사용 가능한 최대 용량
#RuntimeKeepFree= 메모리 로그 저장 후 남겨야 할 최소 메모리
#RuntimeMaxFileSize= 메모리 로그 파일의 최대 크기
#RuntimeMaxFiles=100 메모리 로그 파일 최대 개수

 

보존 기간 관련 옵션

항목 설명
#MaxRetentionSec= 최대 보관 기간 설정 (초 단위)
#MaxFileSec=1month 하나의 로그 파일이 유지될 최대 기간 (예: 1개월)

 

외부 로그 전달 설정

항목 설명
#ForwartToSyslog=yes 로그를 /dev/log로 포워딩하여 rsyslog 등에서 수집 가능
#ForwardToKMsg=no 커널 메시지 버퍼(/dev/kmsg)로 로그 포워딩 여부
#ForwardToConsole=no 시스템 콘솔(/dev/console)에 로그를 출력할지 여부
#ForwardToWall=yes wall 명령어를 통해 사용자에게 브로드캐스트할지 여부

 

콘솔 및 출력 레벨 설정

항목 설명
#TTYPath=/dev/console 콘솔 장치 경로
#MaxLevelStore=debug 저장할 최대 로그 레벨 (가장 자세한 레벨까지 저장 가능)
#MaxLevelSyslog=debug syslog로 포워딩할 최대 로그 레벨
#MaxLevelKMsg=notice 커널 메시지로 보낼 최대 로그 레벨
#MaxLevelConsole=info 콘솔에 출력할 최대 로그 레벨
#MaxLevelWall=emerg wall로 브로트캐스트할 최대 로그 레벨

 

기타 옵션

항목 설명
#LineMax=48K 한 줄의 최대 길이 (기본값은 48KB)
#ReadKMsg=yes 커널 메시지를 읽을지 여부 (/dev/kmsg에서 읽기)

 

예시 명령어 비교

목적 logrotate journalctl
최근 로그 보기 tail -f /var/log/syslog journalctl -f
서비스 로그 보기 cat /var/log/nginx/error.log journalctl -u nginx
날짜별 필터링  grep 'May' /var/log/syslog journalctl --since "2024-05-01"
부팅 이후 로그 (불가) journalctl -b

 

마무리

logrotate텍스트 기반 로그 파일을 관리하는 전통적인 방식입니다.

● journalctl은 systemd가 도입되면서 함께 등장한 현대적인 로그 시스템입니다.

● 이 둘은 공존 가능하며, 실제로 많은 시스템이 둘을 함게 사용하고 있습니다.

로그가 중요한 이유

리눅스 시스템을 운영하거나 서버 문제를 해결할 때, 가장 먼저 확인하는 것이 바로 로그 파일입니다.

로그를 통해 우리는 다음과 같은 정보를 알 수 있죠.

● 서비스가 정상적으로 실행되고 있는지

● 시스템에 이상 징후가 있는지

● 누가, 언제, 어디서 로그인했는지

● 하드웨어/커널에서 문제가 발생했는지

 

/var/log 디렉토리란

● 시스템 전반의 로그가 저장되는 중앙 저장소

● 시스템 로그 데몬(예 : rsyslog, journald)이 로그를 이곳에 기록합니다.

cd /var/log
ls -lh

/var/log

다양한 로그 파일들을 확인할 수 있습니다.

 

주요 로그 파일 살펴보기

1. /var/log/syslog (or /var/log/messages)

● 시스템 전반의 일반적인 이벤트 로그입니다.

● 서비스 시작, 네트워크 상태, 커널 메시지 등 다양한 정보가 포함됩니다.

● Ubuntu 계열은 syslog, CentOS/Red Hat 계열은 messages를 사용합니다.

sudo tail -f /var/log/syslog

 

2. /var/log/auth.log (or /var/log/secure)

● 사용자 인증 관련 로그입니다.

● 예: sudo, ssh 접속, 로그인 실패 등

sudo grep "Failed" /var/log/auth.log

auth.log

 

3. /var/log/dmesg

● 커널 초기화/부팅 메시지를 확인할 수 있습니다.

● 하드웨어 인식 문제나 커널 오류 추적에 유용합니다.

dmesg | less

 

4. /var/log/boot.log

● 시스템 부팅 시 어떤 서비스가 실행됐는지, 실패했는지 등을 기록합니다.

cat /var/log/boot.log

 

5. /var/log/faillog, /var/log/wtmp, /var/log/btmp

● 로그인 실패 정보, 접속 이력 확인

last	# /var/log/wtmp 참조
sudo lastb	# /var/log/btmp 참조
sudo faillog	# /var/log/faillog 참조

lastb는 /var/log/btmp는 보안상 민감한 정보를 포함하므로 일반 사용자에게 읽기 권한이 없습니다.

root만 읽을 수 있는 권한이므로, 반드시 sudo로 실행해야 합니다.

 

파일명 저장 위치  내용 관련 명령어 권한 필요
wtmp /var/log/wtmp 정상 로그인/로그아웃 기록 last sudo 없이 가능
btmp /var/log/btmp 실패한 로그인 시도 기록 lastb sudo 필요
faillog /var/log/faillog 계정별 누적 실패 로그인 횟수, 잠금 등 faillog sudo 필요

 

로그를 다룰 때 유용한 명령어

# 로그 실시간 보기
tail -f /var/log/syslog

# 특정 키워드로 로그 검색
grep "error" /var/log/syslog

# 가장 최근의 커널 메시지 보기
dmesg | tail

# ssh 접속 실패 확인
grep "Failed password" /var/log/auth.log

 

마무리 및 요약

시스템 관리자나 DevOps 엔지니어는 /var/log에 어떤 로그가 있고, 언제 로그를 확인해야 하는지를 꼭 알아야하기 때문에 중요한 내용입니다!

로그파일 설명
/var/log/syslog 대부분의 시스템 메시지를 포함하는 일반 로그 (Ubuntu 등에서 사용)
/var/log/messages Red Hat 계열에서 시스템 메시지를 저장하는 로그 (syslog와 유사)
/var/log/auth.log 사용자 로그인, 인증 관련 로그 (sudo, SSH 접속 등)
/var/log/secure Red Hat 계열에서 인증/보안 관련 이벤트 기록 (auth.log 와 유사)
/var/log/dmesg 커널 부팅 메시지 (하드웨어 장치 상태 등)
/var/log/boot.log 부팅 시 서비스 시작 순서 및 성공/실패 로그
/var/log/kern.log 커널 메시지 전용 로그 (오류, 경고 등)
/var/log/faillog 로그인 실패 기록
/var/log/lastlog 마지막 로그인 정보 기록
/var/log/wtmp, btmp 로그인/로그아웃 기록, 실패한 로그인 시도 기록 (last, lastb 명령으로 조회)

지난 글에서 crontab 개념에 대해 공부했습니다 이번에는 crontab 실습을 통해 사용방법을 알아보겠습니다.

실습 1: "Hello Cron!" 메시지를 1분마다 출력하는 스크립트

1. 스크립트 작성

mkdir -p ~/cron-test
vi ~/cron-test/hello.sh
#!/bin/bash
echo "[$(date)] Hello from cron!" >> ~/cron-test/hello.log

 

2. 실행 권한 부여

chmod +x ~/cron-test/hello.sh

 

3. crontab 등록

crontab -e
* * * * * /home/your_username/cron-test/hello.sh

◎ your_username은 본인 홈 디렉터리에 맞게 변경

◎ 절대 경로를 사용해야 정상 작동

 

4. 실행 결과 확인

tail -f ~/cron-test/hello.log

→ 매 분마다 hello.log에 로그가 쌓임

 

실습 2: 시스템 로그를 백업하는 스크립트

1. 스크립트 작성

vi ~/cron-test/backup_syslog.sh
#!/bin/bash
DATE=$(date +%F_%H-%M)
cp /var/log/syslog ~/cron-test/syslog_$DATE

 

2. 권한 부여

chmod +x ~/cron-test/backup_syslog.sh

 

3. contab 등록 (매일 자정 실행)

crontab -e
0 0 * * * /home/your_username/cron-test/backup_syslog.sh

 

4. 실행 여부 확인

ls ~/cron-test/

→ 날짜별로 백업된 로그 파일이 생성되어 있어야 함

 

실습 3 : 5분마다 네트워크 상태 확인

1. 스크립트 작성

vi ~/cron-test/net_check.sh
#!/bin/bash
echo "[$(date)]" >> ~/cron-test/netstat.log
ss -tuln >> ~/cron-test/netstat.log
echo "" >> ~/cron-test/netstat.log

 

2. 권한 부여

chmod +x ~/cron-test/net_check.sh

 

3. crontab 등록

crontab -e
*/5 * * * * /home/your_username/cron-test/net_check.sh

 

4. 결과 확인

tail -f ~/cron-test/netstat.log

 

실습 팁

- cron의 실행 환경은 로그인 쉘과 다르므로, 경로 문제를 줄이기 위해 스크립트 내부에 절대 경로를 사용하세요.

- 로그를 확인하기 위해 >> 와 2>&1을 활용하면 디버깅이 쉬워집니다.

- 시스템 로그에서 cron 실행 결과를 확인하고 싶다면

journalctl -u cron -f

이렇게 실행된 시간과 실행 결과를 알 수 있습니다.

grep CRON /var/log/syslog

 

crontab이란?

crontab은 리눅스에서 주기적으로 실행할 명령어나 스크립트를 예약하는 데 사용하는 도구입니다.

백업, 로그 정리, 시스템 모니터링, 자동 업데이트 등 반복 작업을 자동화할 때 사용됩니다.

- cron은 데몬이며(cround), crontab은 이를 설정하기 위한 명령어 및 파일입니다.

- 사용자는 각자 자신의 crontab 파일을 가질 수 있고, 시스템 전체에 영향을 주는 root crontab도 존재합니다.

 

crontab 기본 문법

*  *  *  *  *  명령어
│  │  │  │  │
│  │  │  │  └─ 요일 (0~7) [일요일=0 또는 7]
│  │  │  └──── 월 (1~12)
│  │  └─────── 일 (1~31)
│  └────────── 시 (0~23)
└───────────── 분 (0~59)

 

예시:

주기  예시 crontab 설명
매일 2시 0 2 * * * 
/home/user/backup.sh
매일 새벽 2시에 백업 스크립트 실행
매일 5분 */5 * * * * /usr/bin/sync 5분마다 동기화 명령 실행
매주 월요일 1시 0 1 * * 1
/home.user/clean_logs.sh
매주 월요일 로그 정리

 

crontab 사용 방법

1. crontab 파일 열기

crontab -e

 

2. 현재 사용자 crontab 보기

crontab -l

 

3. crontab 삭제

crontab -r

 

4. 특정 시간대 작업 예시

# 매일 자정 로그 파일 백업
0 0 * * * cp /var/log/syslog /home/user/syslog_backup_$(date +\%F).log

 

팁 : 로그 남기기

cron은 출력을 /dev/null로 무시하거나 로그를 저장할 수 있습니다.

0 0 * * * /home/user/script.sh >> /home/user/cron.log 2>&1
# >> : 표준 출력(성공 메시지) 로그 저장
# 2>&1 : 표준 에러도 같은 로그 파일로 저장

 

cron에서 자주 발생하는 실수

문제 원인
명령이 실행되지 않음 환경변수(PATH 등)가 부족함
date 명령이 안됨 변수 확장을 위해 \로 이스케이프 필요
경로 오류  절대 경로를 써야 함 (예: ./script.sh -> /home/usr/script.sh)

 

crontab의 환경과 PATH

cron은 사용자 로그인 없는 상태에서 실행되기 때문에, ~/.bashrc 등의 설정이 적용되지 않습니다.

따라서 스크립트 상단에 필요한 환경 변수를 직접 선언해주어야 할 수 있습니다.

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

 

crontab 접근 제어

- /etc/cron.allow > 해당 파일에 있는 사용자만 사용 가능

- /etc/cron.deny > 해당 파일에 있는 사용자는 사용 불가

(두 파일 모두 없다면 모든 사용자가 사용 가능)

 

마무리 

crontab은 리눅스 시스템을 운영할 때 필수적인 도구 중 하나입니다.

주기적인 작업을 자동화하면 생산성이 향상되고, 수동 작업에서 발생할 수 있는 실수를 줄일 수 있습니다.

개요

시스템의 상태를 진단하고 문제를 해결하는 데 가장 먼저 확인하는 것이 "로그(log)"입니다.

systemd 기반 리눅스 시스템에서는 journalctl 명령어를 통해 다양한 로그 정보를 효율적으로 조회할 수 있습니다.

이번 글에서는 journalctl의 기본 개념부터 실전 명령어까지 정리해보겠습니다.

 

리눅스 로그란?

로그(Log)의 정의

로그는 시스템, 서비스, 애플리케이션 등이 실행되는 동안 발생하는 이벤트 기록입니다.

시스템의 정상 동작 여부, 에러 발생 상황, 접속 이력, 자원 사용 상태 등을 추적할 수 있습니다.

 

로그가 왜 중요한가?

상황  로그를 보는 이유
시스템 다운  어떤 서비스에서 오류가 발생했는지 확인
보안 문제 누가, 언제, 어디서 접속했는지 추적
성능 저하 CPU나 메모리 과다 사용 원인 파악
서비스 장애 데몬(service)의 비정상 종료 확인

운영/관리/보안 모두에서 로그는 첫 번째 진단 도구 입니다.

 

로그 구조 개념

요소 설명
로그 소스 systemd 서비스, 커널, 사용자, syslog 등
저장 위치 기본적으로 /run/log/journal (RAM), /var/log/journal(디스크 영구저장)
로그 단위 각 로그는 시간, 유닛, 메시지, PID,UID 등 다양한 메타데이터를 가짐

 

리눅스 로그의 종류

로그 종류 설명 예시 파일
커널 로그 시스템 부팅, 하드웨어 상태 dmesg 또는 journalctl -k
시스템 로그 서비스 동작, 사용자 로그인 등 /var/log/syslog,
/var/log/messeges
인증 로그 로그인/로그아웃, sudo 사용 /var/log/auth.log
서비스 로그 nginx, sshd, cround 등 데몬의 상태 journalctl -u ssh.service
사용자 정의 로그 애플리케이션 로그  /var/log/myapp.log 등

요즘은 대부분이 systemd 환경이기 때문에 /var/log/*.log 대신 journalctl 명령어로 통합 조회합니다.

journalctl 기본 개념

- journalctl은 systemd에서 사용하는 로그 뷰어입니다.

- 시스템 서비스, 커널, 사용자 프로세스 등 다양한 로그가 journald에 통합 저장됩니다.

- 로그는 /var/log/journal/ (영구 저장) 또는 /run/log/journal/ (메모리 임시 저장)에 위치합니다.

 

로그 구조 

요소 설명
로그 소스 systemd 서비스, 커널, 사용자, syslog 등
저장 위치 기본적으로 /run/log/journal (RAM), /var/log/journal(디스크 영구저장)
로그 단위 각 로그는 시간, 유닛, 메시지, PID,UID 등 다양한 메타데이터를 가짐

 

 

journald 로그 항목 구조(Metadata 포함)

systemd는 로그를 이벤트 기반으로 수집하고, 각각의 로그 항목은 다양한 메타데이터를 포함합니다.

필드 설명
_PID 로그를 남긴 프로세스 ID
_UID 사용자 ID
_COMM 명령어 이름
_SYSTEMD _UNIT 관련된 systemd 서비스 이름
MESSAGE 실제 로그 메시지
PRIORITY 로그 심각도 (0=emerg, 7=debug)
_SOURCE _REALTIME _TIMESTAMP 실제 발생 시각
journalctl -o verbose -n 1	# 메타데이터 전체를 출력합니다.

 

 

실전 사용 예제

1. 전체 로그 보기

journalctl

 

2. 현재 부팅 이후의 로그

journalctl -b

 

3. 특정 서비스 로그 보기 (예 : ssh)

journalctl -u ssh.service

 

4. 실시간 로그 보기

journalctl -f

 

5. 에러 중심으로 보기

journalctl -xe

 

6. 날짜 기준으로 필터링

journalctl --since "2024-05-01"
journalctl --since yesterday --until today

 

로그 심각도 (Priority) 필터

숫자 레벨 이름 설명
0 emerg 시스템 사용 불가
1 alert 즉시 조치 필요
2 crit 심각한 문제
3 err 일반적인 에러
4 warning 경고
5 notice 중요 정보
6 info 일반 정보
7 debug 디버깅 정보
journalctl -p err..alert	# 에러부터 알림 수준까지 필터링 가능

 

로그 파일 영구 저장하려면???

 로그를 RAM이 아닌 디스크에 영구 저장하려면 아래 설정을 확인하세요 

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald

설정이 완료되면 재부팅해도 로그가 유지됩니다.

 

마무리..

journalctl은 systemd 기반 시스템의 표준 로그 분석 도구입니다.

로그에는 다양한 메타데이터가 포함되어 있어 필터링과 분석이 편리합니다.

실시간 모니터링부터 특정 기반, 서비스, 우선순위까지 정밀한 로그 조회가 가능합니다.

로그를 영구 저장하도록 설정하면, 재부팅 후에도 문제 추적이 쉬워집니다.

리눅스에서 데몬(서비스)을 관리하는 방식은 예전에는 init.d를 사용했지만, 최근 대부분 리눅스 배포판(Ubuntu, CentOS, Rocky 등)은 systemd 기반으로 전환되었습니다. systemd를 알아보기 전에 예전에 사용했던 init.d를 먼저 알아보겠습니다.

init.d란 무엇인가?

init.d는 리눅스에서 부팅 시 실행되는 서비스(데몬)를 관리하기 위한 디렉터리이며, SysV Init (System V initialzaion)방식의 일환입니다. init 시스템은 가장 먼저 실행되는 프로세스 (PID 1)로, 시스템을 초기화하고 서비스들을 단계별로 실행하는 역할을 합니다.

즉, init.d는 리눅스 시스템이 부팅될 때 어떤 서비스를 어떤 순서로 실행할지 정의하는 구조 중 하나입니다.

 

위치와 구조

- init.d 스크립트는 보통 /etc/init.d/ 디렉터리에 위치합니다.

- 이 안에는 서비스마다 하나씩 쉘 스크립트 파일이 있습니다.

모두 쉘 스크립트 파일로 구성되어 cat 명령어를 치면 스크립트 파일의 내용을 볼 수 있습니다.

예시

sudo /etc/init.d/apache2 start
sudo /etc/init.d/apache2 stop

 

작동 방식

1. /etc/init.d/ 안의 스크립트들은 모두 실행 가능한 쉘 스크립트입니다.

2. /etc/rc.d 또는 /etc/rc{runlevel].d/ 디렉터리에서 각 런레벨에 따라 필요한 스크립트를 링크해 실행합니다.

3. 런레벨(runlevel)에 따라 어떤 서비스를 시작할지 결정합니다.

 

런레벨 예시 (SysV 기준)

Runlevel 의미
0 시스템 종료 (halt)
1 단일 사용자 모드
3 멀티유저 (CLI)
5 멀티유저 + GUI
6 재부팅 (reboot)

 

왜 systemd가 생기고 사용할까?

기존 init.d 방식은 다음과 같은 한계가 있습니다.

- 병령 처리 불가 : 서비스가 순차적으로 실행되어 부팅 시간이 느림

- 종속성 관리 미흡 : 서비스 간 의존성을 세밀하게 지정하기 어려움

- 상태 추적 부족 : 서비스의 상태 확인이 제한적

이러한 문제를 개선하기 위해 systemd가 등장하였고, 이제는 대부분의 리눅스 배포판에서 init.d 대신 systemd를 사용합니다.

 

systemd를 사용하는데도 init.d가 왜 있을까??

/etc/init.d/ 디렉토리가 존재하는 이유는 하위 호환성(Backward Compatiblity) 때문입니다.

init.d는 legacy 방식이지만, 아직도 일부 스크립트나 패키지들이 이를 기반으로 동작하기 때문에 systemd에서도 계속 지원하고 있는 것입니다.

 

1. 하위 호환성이란??

 예전 리눅스에서 개발된 많은 서비스나 소프트웨어는 init.d 방식의 스크립트를 제공합니다. 이런 서비스들을 systemd 환경에서도 그대로 실행할 수 있도록 systemd는 /etc/init.d/를 인식할 수 있게 유지합니다.

 

2. 이식성과 표준화 부족

 모든 패키지나 개발자가 .service 유닛 파일을 제공하는 건 아닙니다. 특히 오래된 소프트웨어나 서버용 스크립트는 여전히 init 스크립트만 제공합니다.

 

3. 유지보수 및 마이그레이션 중인 시스템

 대규모 서버 환경에서는 전체를 systemd로 마이그레이션하는 데 시간이 걸립니다. 일부는 init.d와 systemd를 혼용하기도 하며, 완전히 대체하지 않고 공존시키는 전략을 택합니다.

 

systemd에서 init.d 스크립트 사용하는 방법

sudo /etc/init.d/apache2 start  # 직접 실행
# 또는
sudo systemctl start apache2    # systemd가 자동으로 init 스크립트를 감싸서 실행

 

systemd 기본 개념

- Unit(유닛) : systemd에서 관리하는 구성 요소 (서비스, 소켓, 마운트 등) (After=, Requires= 등)

- Service Unit : .service 확장자를 가지며, 데몬(서비스)을 관리하는 단위 (ExecStart=, Restart=, PIDFile= 등)

- Target Unit : runlevel 대체 개념으로, 부팅 상태를 지정 (WantedBy= )

 

systemctl 기본 명령어

systemctl status nginx	# 서비스 상태 확인
systemctl start nginx	# 서비스 시작
systemctl stop nginx	# 서비스 재시작
systemctl reload nginx	# 서비스 재로드 (설정 변경 반영)

 

부팅 시 자동 시작 설정

systemctl enable nginx	# 부팅 시 자동 시작
systemctl disable nginx	# 부팅 시 자동 시작 해제
systemctl is-enabled nginx # 현재 상태 확인

 

일시적으로 자동 시작 비활성화 

systemctl mask nginx	# 수동으로도 시작 못하게 막음
systemctl umask nginx 	# 다시 허용

 

서비스 유닛 파일 구조

서비스 유닛 파일은 보통 아래 위치에 있습니다.

- /etc/systemd/system/  사용자 정의 서비스

- /lib/systemcd/system/  시스템 서비스

sshd.service 파일

 

유닛 추가 시 명령어

sudo systemctl daemon-reexec      # systemd 자체 재시작
sudo systemctl daemon-reload      # 유닛 파일 변경 사항 반영
sudo systemctl start myapp
sudo systemctl enable myapp

 

명령어 정리 !! 

명령어 설명
systemctl start [서비스명] 서비스 시작
systemctl stop [서비스명] 서비스 중지
systemctl restart [서비스명] 서비스 재시작
systemctl reload [서비스명] 설정만 다시 읽기
systemctl enable [서비스명] 부팅 시 자동 실행 설정
systemctl status [서비스명] 서비스 상태 확인
systemctl list-units --type=service 현재 실행 중인 서비스 목록
journalctl -u [서비스명] 서비스 로그 확인

 

마지막으로..

systemd는 단순한 서비스 매니저가 아니라 리눅스의 핵심 컴포넌트입니다.

systemctl 명령어를 익히면 서비스 관리, 디버깅, 자동화 작업에 있어 큰 도움이 됩니다.

4. 시스템 정보 & 리소스

명령어 설명 예시
top, htop 실시간 프로세스 top, htop (설치 필요)
ps 프로세스 목록 ps aux, ps -ef
df -h  디스크 사용량 df -h
du -sh *  디렉토리 용량  du -sh /home/*
free -h 메모리 사용량  free -h
uptime 부팅 이후 경과 시간 uptime
uname -a  시스템 커널 정보 uname -a
hostname 호스트 이름 확인 hostname

 

top 명령어

top # 현재 시스템의 전체적인 상태를 실시간으로 보여준다.

# 예시
top -u ubuntu # 특정 사용자 프로세스만 보기

주요 화면 정보

상단 요약 정보 :

 uptime, load average (시스템 부하), tasks, CPU memory 사용량

하단 프로세스 목록 :

PID : 프로세스 ID

USER : 사용자

%CPU : CPU 사용률

%MEM : 메모리 사용률

COMMAND : 실행 중인 명령

 

자주 사용하는 단축키

기능
q 종료
k 프로세스 강제 종료 (PID 입력 필요)
P CPU 사용률 순 정력
M 메모리 사용률 순 정렬
h 도움말

 

htop 명령어

sudo apt install htop # Ubuntu/Debian 계열
sudo yum install htop # CentOS/RHEL 계열

htop

장점

- 컬러로 표시되어 가독성 뛰어남

- 마우스 지원 (스크롤, 종료 클릭 가능)

- 직관적인 UI : CPU 코어별 사용량, 메모리/스왑 상태 등을 막대 그래프로 표시

- 실시간 필터 및 검색 기능

 

주요 키보드 기능 

기능
F3 검색
F4 필터링
F5 트리 보기
F6 정렬 기준 선택
F9 프로세스 종료
F10 종료

 

ps -ef (System V 스타일)

ps -ef

# 출력 예시
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 09:00 ?        00:00:02 /sbin/init
ubuntu    1234     1  0 09:05 ?        00:00:00 /usr/bin/python3 app.py

옵션 의미 :

-e : 모든 프로세스를 표시 (-A와 동일)

-f : 풀 포맷(full-format)으로 상세 정보 출력

각 칼럼 의미:

UID : 실행한 사용자

PID : 프로세스 ID

PPID : 부모 프로세스 ID

C :CPU 사용율

STIME : 프로세스 시작 시간

TTY : 터미널

TIME : 누적 CPU 시간

CMD : 실행된 명령어

 

ps aux (BSD 스타일)

ps aux

# 출력 예시
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu    1234  0.0  0.2 123456  5678 ?        S    09:05   0:00 /usr/bin/python3 app.py

옵션 의미 :

a : 터미널에 관계없이 모든 사용자 프로세스 표시

u : 사용자 중심(user-oriented) 포맷

x : 터미널이 없는 프로세스도 표시

주요 컬럼:

USER : 사용자 이름

%CPU : CPU 사용률

%MEM : 메모리 사용률

VSZ : 가상 메모리 크기 (KB)

RSS : 실제 메모리 크기 (KB)

STAT : 프로세스 상태 (예: S = 슬립)

START : 시작 시간

TIME : 누적 CPU 시간

COMMAND : 실행된 명령어

 

 

5. 패키지 관리 (Ubuntu/Debian)

명령어 설명 예시
apt update 패키지 목록 갱신 sudo apt update
apt upgrade  설치된 패키지 업데이트 sudo apt upgrade
apt install  패키지 설치 sudo apt install nginx
apt remove 패키지 제거 sudo apt remove nginx

 

6. 네트워크 관련

명령어 설명 예시
ip a  IP 주소 보기 ip a
ping 네트워크 연결 확인 ping google.com
netstat -tuln 열려있는 포트 보기 sudo netstat -tuln
ss 소켓 상태 확인  ss -tuln
curl 웹 요청 테스트  curl ifconfig.me
wget 파일 다운로드  wget http://example.com/file.txt

 

netstat -tuln 또는 ss -tuln 옵션 해석

옵션 의미
-t TCP 포로토콜만 보기 (tcp)
-u UDP 프로토콜만 보기 (udp)
-l Listening 중인 소켓만 보기 (서버 역할 포트)
-n DNS 변환 없이 숫자로 출력 (빠르고 정확하게)

즉, Listening 상태인 TCP/UDP 포트를 숫자 IP와 포트 형식으로 보여준다.

netstat -tuln

ss -tuln

# 출력 예시
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:68              0.0.0.0:*

 

 

7. 압축 & 백업

명령어 설명 예시
tar 압축/해제 tar -czvf backup.tar.gz folder/,
tar -xzcf bacokup.tar.gz
zip, unzip 압축 zip -r archive.zip folder/, unzip archive.zip

 

tar 명령어

tar [옵션] [파일명] [대상 파일/디렉터리]

# 디렉터리를 tar.gz로 압축
tar -czvf archive.tar.gz myfolder/

# tar.gz 압축 해제
tar -xzvf archive.tar.gz

# 다른 디렉토리에 압축 해제
tar -xzvf archive.tar.gz -C /target/path/

 

주요 옵션

옵션 의미
-c 새 tar 파일 생성 (create)
-x 압축 해제 (extract)
-v 처리 과정을 출력 (verbose)
-f 파일 이름 지정 (file)
-z  gzip으로 압축 (.tar.gz)
-j bzip2 압축 사용 (.tar.bz2)
-J xz 압축 사용 (.tar.xz)
-C 압축 해제 위치 지정 (directory)

 

zip,unzip 명령어

zip [옵션] [압축할_파일명.zip] [대상_파일들]

# 디렉터리 압축 (재귀적)
zip -r archive.zip myfolder/

# 암호 설정하여 압축
zip -re secure.zip myfolder/

unzip [옵션] [파일명.zip]

# 현재 위치에 압축 해제
unzip archive.zip

# 지정한 폴더에 압축 해제
unzip archive.zip -d ./target-folder/

# 목록만 확인
unzip -l archive.zip

 

주요 옵션

옵션 의미
-d [경로] 특정 디렉토리에 압축 해제
-l 압축 파일 안의 목록 보기
-q 출력 최소화
-o 기존 파일 덮어쓰기 허용

 

8. 기타 유용한 명령어

명령어 설명 예시
history 명령어 기록 history
alias 명령어 별칭 alias ll='ls -alF'
man 매뉴얼 페이지  man ls
which 실행 파일 경로 which bash
echo 문자열 출력 echo "Hello"
date 날짜 출력 date +%Y-%m-%d

 

1. 디렉토리 탐색 및 파일 관리

명령어 설명  예시
pwd 현재 위치 출력 pwd > /home/user
ls 파일 목록 보기 ls -l, ls -a
cd 디렉토리 이동 cd /var/log, cd ~
mkdir 새 폴더 생성 mkdir project
touch 새 파일 생성 touch index.html
cp 파일/폴더 복사 cp file1.txt file2.txt
mv 이동/이름 변경 mv old.txt new.txt
rm  파일 삭제  rm file.txt, rm -r folder
tree 디렉터리 구조 보기 tree . (설치 필요 : sudo apt install tree)

 

ls(List)

$ ls
file.txt

$ ls -a # 숨긴 파일 포함 (all)
.  ..  .bashrc  .profile  file.txt


$ ls -l # 상세 정보 보기
-rw-r--r--  1 user user  4096 May  7 11:30 file.txt

의미:

-rw-r--r-- : 파일 권한

1 : 하드 링크 수

user : 소유자

user : 그룹

4096 : 파일 크기 (바이트)

May 7 11:30 : 마지막 수정 시각

file.txt : 파일 이름

 

rm (Remove)

$ rm file.txt     # 일반 파일 삭제
$ rm file1.txt file2.txt  # 여러 파일 삭제  디렉토리는 삭제하지 못함 (오류 발생)

$ rm -r folder/ # 디렉토리와 그 안의 모든 파일/하위 디렉토리까지 재귀적으로 삭제 -r = recursive(재귀적)

$ rm -rf folder/ # (Recursive + Force) , 경고 없이 모든 내용을 삭제하므로 가장 위험한 조합

$ rm -rf /

 

2. 사용자 & 권한

명령어 설명 예시
whoami 현재 사용자  whoami > ubuntu
id 사용자 UID, 그룹 확인 id
adduser 사용자 추가 sudo adduser devops
passwd 비밀번호 설정 passwd user1
chown 소유권 변경 chown user:group file
chmod 권한 변경 chmod 755 script.sh

 

chown (파일/디렉토리의 소유자(owner)와 그룹(group) 변경

# 문법
chown [옵션] [소유자][:그룹] 파일명

# 예시
# 파일의 소유자를 ubuntu로 변경
chown ubuntu file.txt

# 파일의 소유자와 그룹을 ubuntu로 변경
chown ubuntu:ubuntu file.txt

# 그룹만 변경
chown :developers file.txt

# 디렉토리 및 내부 파일까지 소유자 변경
chown -R ubuntu:ubuntu /home/ubuntu/myfolder

 

chmod (파일/디렉토리의 권한(permission) 변경

chmod [옵션] [권한] 파일명

 

- 권한은 숫자 또는 기호로 지정

- 일반적으로 숫자 방식(755, 644 등)을 많이 사용

 

숫자 방식 권한 설명

권한 의미 숫자
r 읽기(Read) 4
w 쓰기(Write) 2
x 실행(Execute) 1

 

# 예시

# 소유자: rwx(7), 그룹: rx(5), 기타: rx(5)
chmod 755 script.sh

# 소유자: rw-(6), 그룹: r--(4), 기타: r--(4)
chmod 644 file.txt

# 모든 사용자에게 실행 권한 추가
chmod +x run.sh

# 그룹과 기타 사용자에게 쓰기 권한 제거
chmod go-w file.txt

 

3. 파일 내용 보기

명령어 설명 예시
cat  파일 전체 출력 cat readme.txt
more, less  페이지 단위 보기 less log.txt
head, tail 앞/뒤 일부 출력 tail -n 100 /var/log/syslog
grep 문자열 검색 grep "error" log.txt
wc 줄/단어/문자 수  wc -l file txt

 

head (파일의 "처음" N줄 보기)

# 기본 문법
head [옵션] 파일명

# 예시
head file.txt           # 앞 10줄 출력
head -n 5 file.txt      # 앞 5줄 출력
head -n 20 /var/log/syslog   # 시스템 로그의 앞 20줄 출력

 

tail (파일의 :마지막" N줄 보기)

# 기본 문법
tail [옵션] 파일명

# 예시
tail file.txt           # 뒤 10줄 출력
tail -n 15 file.txt     # 뒤 15줄 출력
tail -f /var/log/syslog # 실시간 로그 감시

-n [줄 수] : 마지막에서부터 몇 줄 출려할지 지정 (기본값 : 10줄)

-f : 실시간으로 파일 변경을 계속 출력 > 고르 모니터링에 매우 유용

'linux' 카테고리의 다른 글

systemd와 systemctl을 활용한 서비스 관리  (0) 2025.05.14
리눅스에서 자주 사용하는 명령어 & 문법 정리 -2  (2) 2025.05.08
리눅스 쉘이란?  (0) 2025.05.07
리눅스 커널이란?  (0) 2025.04.30
Linux란 무엇인가.?  (0) 2025.04.29

+ Recent posts