10강 / 20강

파이프 — 작은 도구를 이어 붙이기

리눅스가 강력한 진짜 이유

파이프 — 작은 도구를 이어 붙이기
작은 도구들을 파이프로 이어 큰 일을 합니다.

여기서부터 리눅스가 재미있어집니다.

리눅스 명령들은 하나같이 단순합니다. grep 은 글자를 찾기만 하고, sort 는 정렬만 하고, wc 는 세기만 해요. 각각으로는 별것 없습니다.

그런데 이것들을 이어 붙이면 이야기가 달라집니다.

cat access.log|grep 404|wc -l
"접속 기록에서 · 404 인 줄만 골라 · 몇 줄인지 세라"

이 한 줄이 "우리 사이트에서 없는 페이지를 찾은 요청이 몇 건인가"를 알려 줍니다. 프로그램 한 줄도 짜지 않고요.

먼저 세 개의 통로를 알아야 합니다

모든 명령에는 입구 하나와 출구 둘이 달려 있습니다.

stdin (0)표준 입력들어오는 것 — 보통 키보드
stdout (1)표준 출력정상 결과 — 보통 화면
stderr (2)표준 오류오류 메시지 — 역시 화면

출구가 둘인 게 핵심입니다. 결과와 오류가 따로 나오기 때문에, 결과만 파일로 저장하고 오류는 화면에 남길 수 있어요.

🎮 파이프라인 조립기

블록을 이어 붙여 파이프라인을 만들어 보세요. 만든 것을 바로 실행해 볼 수 있습니다.

파이프라인 조립기 — 블록을 이어 붙이고 실행해 보세요
불러오는 중…

리다이렉션 — 출구를 파일로 돌리기

> 는 덮어쓰기, >> 는 이어 붙이기
bash 내 가상 Ubuntu 서버에서 실행
오류는 stdout 이 아니라서 파일에 담기지 않고 화면에 남습니다
bash 내 가상 Ubuntu 서버에서 실행

| — 앞의 출력을 뒤의 입력으로

이제 진짜 파이프입니다. 우리 쇼핑몰의 접속 기록을 분석해 봅시다.

먼저 원본을 봅니다 — 이걸 사람이 눈으로 세긴 어렵죠
bash 내 가상 Ubuntu 서버에서 실행
① 전체 몇 줄인가
bash 내 가상 Ubuntu 서버에서 실행
② 404 오류가 몇 건인가
bash 내 가상 Ubuntu 서버에서 실행
③ 어느 IP가 가장 많이 들어왔는가 — 파이프 다섯 개!
bash 내 가상 Ubuntu 서버에서 실행

③번 한 줄을 뜯어봅시다. 각 단계가 앞의 결과를 받아 조금씩 다듬습니다.

cat 파일기록 전체를 흘려보낸다
awk '{print $1}'각 줄의 첫 칸(IP)만 뽑는다
sort같은 IP끼리 붙게 정렬
uniq -c연속된 같은 줄을 세어서 하나로
sort -rn숫자 기준 큰 것부터

결과 맨 위에 45.148.10.72 가 보이나요? /admin.php, /wp-login.php, /.env 를 찍어 대던 그 IP입니다. 공격 시도예요. 17강과 20강에서 다시 만납니다.

🤔 확인 문제
ls -l | grep .py | wc -l 은 무엇을 하는가?
🤔 확인 문제
> 와 | 의 차이는?
🤔 확인 문제
… | sort | uniq -c 에서 sort 를 빼면 왜 결과가 이상해지는가?