[OS-004][기초] 파이프로 로그를 걸러 요약 파일 만들기 > IT 기술 공유

본문 바로가기

사이트 내 전체검색

뒤로가기 IT 기술 공유

[OS-004][기초] 파이프로 로그를 걸러 요약 파일 만들기

페이지 정보

작성자 기술팀장 작성일 26-08-31 08:34 조회 252 댓글 0

본문

[이번 수업]
셸은 명령을 실행하고 입력과 출력을 연결하는 프로그램입니다. 파이프 `|`, 리다이렉션 `>`·`>>`, grep·sort·uniq를 조합해 가짜 로그에서 오류 종류별 개수를 셉니다. 작은 명령을 이어 붙이는 작업 흐름을 익힙니다.

[선수지식]
OS-001~003의 터미널, 경로, 파일·권한 기초를 알고 있으면 됩니다. macOS/Linux는 기본 터미널, Windows는 PowerShell을 사용합니다.

[학습목표]
1. 표준 입력, 표준 출력, 표준 오류를 구분한다.
2. 파이프와 리다이렉션으로 명령을 연결한다.
3. 로컬 로그를 필터링하고 빈도를 요약한다.

[핵심개념]
프로세스에는 표준 입력(stdin), 표준 출력(stdout), 표준 오류(stderr) 통로가 있습니다. 정상 결과는 stdout, 진단 메시지는 stderr로 나갑니다. `A | B`는 A의 stdout을 B의 입력으로 보내며 기본 파이프는 stderr를 합치지 않습니다.

`>`는 출력을 파일에 새로 써서 기존 내용을 덮어씁니다. `>>`는 파일 끝에 추가하고, `2>`는 stderr를 따로 저장합니다. `grep`은 맞는 행을 고르고 `cut`은 열을 뽑습니다. `sort`로 같은 값을 모은 뒤 `uniq -c`로 연속 중복을 셉니다. 마지막 `sort -nr`은 큰 개수를 먼저 보여줍니다.

[따라하기]
새 연습 폴더에서 아래를 demo.sh로 저장하세요. 직접 만든 네 줄만 사용합니다.

```sh
#!/bin/sh
printf '%s\n' \
  '2026-08-31 INFO api' \
  '2026-08-31 ERROR db' \
  '2026-08-31 ERROR api' \
  '2026-08-31 ERROR db' > access.log

grep ' ERROR ' access.log \
  | cut -d' ' -f3 \
  | sort \
  | uniq -c \
  | sort -nr > error-summary.txt

cat error-summary.txt
```

macOS/Linux에서 `sh demo.sh`를 실행하면 `2 db`, `1 api` 순서로 표시되고 error-summary.txt에도 저장됩니다. 숫자 앞 공백은 환경에 따라 다를 수 있습니다.

Windows PowerShell은 파이프에서 주로 텍스트가 아닌 객체를 전달합니다. 같은 흐름은 다음과 같습니다.

```powershell
@('2026-08-31 INFO api',
  '2026-08-31 ERROR db',
  '2026-08-31 ERROR api',
  '2026-08-31 ERROR db') | Set-Content access.log
Get-Content access.log |
  Where-Object { $_ -match ' ERROR ' } |
  ForEach-Object { ($_ -split ' ')[2] } |
  Group-Object | Sort-Object Count -Descending |
  Select-Object Count, Name | Tee-Object -FilePath error-summary.txt
```

Count 2/Name db, Count 1/Name api가 출력되며 파일에도 기록됩니다.

[흔한 실수]
`>`와 `>>`를 혼동해 파일을 덮어쓰거나, 따옴표 없이 공백·별표가 든 값을 사용해 셸이 먼저 해석하게 만들기 쉽습니다. `uniq -c`만 실행하면 떨어져 있는 같은 값은 합쳐지지 않습니다. 각 파이프 단계를 따로 확인하세요.

[보안 주의]
본인 소유의 로컬 연습 파일만 처리하세요. 운영 로그에는 토큰·이메일·IP가 있을 수 있으므로 외부에 올리지 말고 접근 권한과 보존 기간을 제한합니다. 외부 입력을 명령 문자열에 붙이거나 `sh`, `eval`로 실행하면 안 됩니다. 변수와 파일 경로는 따옴표로 감싸고 출력 대상 경로를 확인하세요.

[직접 해볼 과제]
1. `2026-08-31 ERROR cache` 두 줄을 추가하고 결과가 db 2, cache 2, api 1인지 확인하세요.
2. macOS/Linux에서는 `grep` 결과를 `errors-only.txt`에 저장하고, PowerShell에서는 `Select-String`과 `Set-Content`로 같은 파일을 만드세요.
3. `>`를 `>>`로 바꿔 두 번 실행했을 때 차이를 설명하세요.

[확인문제]
1. 파이프 `|`는 앞 명령의 어떤 출력을 다음 명령으로 보내나요?
2. `>`와 `>>`의 차이는 무엇인가요?
3. `uniq -c` 전에 `sort`를 실행하는 이유는 무엇인가요?

[다음 학습]
다음 순환은 NET-004 TCP·UDP·포트입니다. OS 트랙은 OS-005 프로세스·스레드·시그널로 이어집니다.

[공식 참고 자료]
https://www.gnu.org/software/bash/manual/html_node/Pipelines.html
https://www.gnu.org/software/bash/manual/html_node/Redirections.html
https://www.gnu.org/software/grep/manual/grep.html
https://www.gnu.org/software/coreutils/manual/html_node/uniq-invocation.html
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_pipelines?view=powershell-7.5
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-7.5

댓글목록 0

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

PC 버전으로 보기