본문으로 건너뛰기
Linux · CLI 기초집LESSON 08

표준 입출력, 파이프(|), 리다이렉션(>, >>)

난이도입문 → 초급
예상 시간30분
선수지식이전 강의

8강. 표준 입출력, 파이프(|), 리다이렉션(>, >>)

1. 이번 강의에서 해결할 문제​

파이프와 리다이렉션은 강력하지만 >는 기존 파일을 즉시 덮어씁니다. 출력 흐름을 먼저 터미널에서 확인하고 새 결과 파일로 보냅니다.

2. 학습 목표​

3. 핵심 개념​

프로세스는 표준 입력(0), 표준 출력(1), 표준 오류(2)를 기본 채널로 사용합니다. |는 앞 명령의 stdout을 다음 명령의 stdin으로 연결합니다. >는 대상 파일을 새로 쓰고 >>는 뒤에 추가합니다. 기존 결과를 보호하려면 새 파일 이름을 사용하고 test -e로 존재 여부를 확인합니다.

채널·연산자의미화면·파일에 미치는 영향
stdin 0프로그램이 읽는 기본 입력키보드 또는 <·파이프에서 들어옵니다.
stdout 1정상 결과기본은 화면, >나 파이프로 보낼 수 있습니다.
stderr 2오류·진단 메시지기본 파이프에는 섞이지 않고 화면에 남습니다.
>stdout으로 새로 쓰기기존 대상 내용을 덮어씁니다.
>>stdout 뒤에 추가기존 내용은 유지하고 마지막에 붙입니다.

파이프는 임시 파일 없이 작은 명령의 책임을 연결할 때 사용합니다. 하지만 앞 명령이 실패해도 뒤 명령이 빈 입력으로 실행될 수 있으므로 실제 자동화에서는 종료 상태와 pipefail 정책도 함께 검토합니다.

GNU Bash 리다이렉션 문서의 덮어쓰기 규칙을 기준으로 설명합니다.

4. 단계별 명령어와 예시​

1. Ubuntu Bash(WSL)​

실행 위치: 프로젝트 루트

대상: 승리 기록 요약과 별도 오류 로그

명령 목적: 전용 연습 CSV의 정상 출력을 정렬해 화면과 새 파일에 동시에 보내고, 로그의 새 쓰기와 추가 쓰기를 비교합니다.

실행 전 상태: pwd가 ~/projects/game-log-analyzer인지 확인하고 reports 폴더가 있어야 합니다. 아래 명령은 pipe-practice.csv, wins.preview.txt, run.log가 없을 때만 처음 내용을 씁니다. 이미 있다면 삭제하지 말고 다른 연습 이름을 선택합니다.

Ubuntu Bash(WSL)
cd "$HOME/projects/game-log-analyzer"
if test -e data/pipe-practice.csv; then echo "data/pipe-practice.csv가 이미 있습니다."; else printf "Alice,golem,120,win\nBob,slime,80,lose\nCara,dragon,240,win\n" > data/pipe-practice.csv; fi
if test -e reports/wins.preview.txt; then echo "reports/wins.preview.txt가 이미 있습니다."; else grep "win" data/pipe-practice.csv | sort | tee reports/wins.preview.txt; fi
wc -l < reports/wins.preview.txt
if test -e reports/run.log; then echo "reports/run.log가 이미 있어 덮어쓰지 않습니다."; else printf "analysis started\n" > reports/run.log; fi
printf "analysis finished\n" >> reports/run.log
cat reports/run.log

예상 결과: 첫 실행에서는 Alice와 Cara의 승리 두 줄이 정렬되어 화면과 wins.preview.txt에 기록되고 wc -l은 2를 표시합니다. run.log에는 analysis started, analysis finished 두 줄이 보입니다. 같은 이름의 파일이 이미 있으면 덮어쓰지 않는 안내가 먼저 나옵니다.

5. 명령어가 동작하는 이유​

tee는 파이프 데이터를 화면과 파일로 동시에 보냅니다. 입력 리다이렉션 <은 파일 내용을 wc의 stdin으로 전달하고, 존재 검사 뒤 >를 사용해 기존 로그를 보호합니다.

데이터 흐름은 grep의 stdout → 파이프 → sort의 stdin → sort의 stdout → tee → 화면과 파일입니다. stderr는 이 흐름에 자동으로 들어가지 않습니다. wc -l < 파일에서는 셸이 파일을 열어 wc의 stdin으로 연결하므로 출력에는 파일명 없이 줄 수만 나타납니다.

6. 자주 하는 실수와 안전한 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

10. 다음 강의 연결​

표준 출력의 흐름을 안전하게 연결했습니다. 다음 강의에서는 파이프에 전달할 파일 집합이 경로·글로브·따옴표에 따라 어떻게 달라지는지 확인합니다.

MINI QUIZ

표준 입출력, 파이프(|), 리다이렉션(>, >>) 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“표준 입출력, 파이프(|), 리다이렉션(>, >>)”의 코드·명령이 의도대로 동작하는지 판단할 기준은 무엇인가요?
  2. 문제 2“표준 입출력, 파이프(|), 리다이렉션(>, >>)”의 작업 기준으로 ‘중요 파일에 바로 > 사용’을 진단하거나 바로잡은 선택은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

8강. 표준 입출력, 파이프(|), 리다이렉션(>, >>) 미완료 상태