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 은 무엇을 하는가?해설
ls -l(목록) → grep .py(걸러내기) → wc -l(줄 세기). 파이프는 앞의 출력을 뒤의 입력으로 흘려보냅니다.🤔 확인 문제
> 와 | 의 차이는?해설
> 는 파일로, | 는 다음 명령으로 보냅니다. 둘을 같이 쓸 수도 있어요: cat log | grep 404 > 오류.txt🤔 확인 문제
… | sort | uniq -c 에서 sort 를 빼면 왜 결과가 이상해지는가?해설
uniq 는 바로 앞 줄과만 비교합니다. A B A B 순이면 A 가 두 번 따로 세어져요. 그래서 sort 로 같은 것끼리 모은 뒤에 uniq -c 를 씁니다. 이 짝은 거의 항상 붙어 다닙니다.