우분투 실전 명령어 | head tail sed로 로그 구간 빠르게 추출
언제 쓰는가
로그 파일이 너무 커서 전체를 열기 어렵고, 특정 시간대나 줄 범위만 빠르게 보고 싶을 때 쓴다. 장애 직후 구간만 잘라 확인하거나, 배치 작업 실패 지점 전후를 좁혀 볼 때 특히 유용하다.
바로 쓰는 명령어
# 마지막 200줄만 확인
sudo tail -n 200 /var/log/nginx/error.log
# 처음 120줄만 확인
head -n 120 /var/log/syslog
# 500~620번째 줄만 추출
sed -n '500,620p' /var/log/syslog
# 패턴 시작~종료 구간만 추출
sed -n '/ERROR START/,/ERROR END/p' app.log
핵심 옵션/패턴
tail -n N: 파일 끝에서 N줄 확인tail -f: 파일이 갱신될 때 실시간으로 이어서 보기head -n N: 파일 앞부분 N줄 확인sed -n 'A,Bp': A~B 줄 범위 출력sed -n '/start/,/end/p': 특정 패턴 사이 구간만 출력
명령 출력 예시
$ tail -n 5 /var/log/nginx/error.log
2026/02/18 23:41:02 [error] 8123#8123: *12021 upstream timed out
2026/02/18 23:41:03 [error] 8123#8123: *12021 recv() failed (104: Connection reset by peer)
2026/02/18 23:41:04 [warn] 8123#8123: *12022 a client request body is buffered
2026/02/18 23:41:06 [error] 8123#8123: *12023 connect() failed (111: Connection refused)
2026/02/18 23:41:07 [info] 8123#8123: *12024 client closed connection while waiting
$ sed -n '120,126p' app.log
[2026-02-18 23:40:58] worker-3 started
[2026-02-18 23:41:00] fetch begin
[2026-02-18 23:41:02] API timeout after 3000ms
[2026-02-18 23:41:02] retry 1/3
[2026-02-18 23:41:05] fetch success
[2026-02-18 23:41:06] persist complete
[2026-02-18 23:41:06] worker-3 done
자주 하는 실수
tail -f를 오래 켜 둔 채 다른 점검을 놓치는 경우가 많다. 필요한 구간 확인 후 종료 습관을 두는 게 좋다.sed -n없이sed '500,620p'를 실행하면 전체 줄이 함께 출력돼서 로그가 더 지저분해진다.- 로그가 로테이션된 상태인데 현재 파일만 보고 원인 없다고 결론내리는 실수가 잦다.
*.1,*.gz까지 같이 확인해야 한다.
검증 방법
# 파일 줄 수 먼저 확인
wc -l /var/log/syslog
# 같은 구간을 두 방식으로 교차 확인
sed -n '500,510p' /var/log/syslog
head -n 510 /var/log/syslog | tail -n 11
# 최근 10분 로그만 별도 점검 (journalctl 기반)
sudo journalctl --since '10 minutes ago' -u nginx --no-pager
운영 팁
장애 분석 중에는 원본 로그를 직접 수정하지 말고, 필요한 구간을 tee로 별도 파일에 저장해서 팀과 공유하는 방식이 안전하다. 반복 점검이 필요하면 자주 보는 범위를 셸 함수로 만들어 두면 대응 속도가 확실히 빨라진다.
출처
- GNU Project
- Ubuntu Manpages
- systemd