리눅스 파이프와 리다이렉션 — | > >> 2>
리눅스가 "작은 도구를 조립해 큰 일을 한다"고 했죠. 그 조립을 가능하게 하는 게 이 기호 몇 개입니다 — 이걸 알면 명령줄이 갑자기 강력해져요.
7편에서 sort fruits.txt | uniq -c 한 줄로 "과일별 개수"가 나오는 걸 봤죠. "작은 도구를 파이프로 조립한다" — 그게 리눅스의 철학이라고도 했고요. 이번 편은 그 조립 기호들을 제대로 정리합니다: 파이프 |, 리다이렉션 >·>>·<, 그리고 에러를 따로 다루는 2>·2>&1·/dev/null.
먼저 머릿속에 그림 하나 — 모든 명령에는 입구 하나, 출구 둘이 있습니다. 들어오는 곳(stdin), 정상 결과가 나가는 곳(stdout), 에러 메시지가 나가는 곳(stderr). 평소엔 stdin=키보드, stdout·stderr=화면. 리다이렉션과 파이프는 그 입구·출구를 다른 데로 돌리는 장치예요 — 출구를 파일로(>), 또는 다음 명령의 입구로(|). 26편 입문 시리즈 12편, 여기까지가 "기초" 묶음입니다.
~/linux-practice에서 실습하세요. 다 안전한 명령입니다.
입구 하나, 출구 둘 — stdin · stdout · stderr
리눅스에서 모든 명령은 이 세 개의 "통로"를 가집니다. 번호가 붙어 있어요 — 이 번호가 나중에 2> 같은 데서 쓰입니다.
| 통로 (번호) | 뭔가 / 평소 연결 대상 |
|---|---|
| stdin (0) | 표준 입력 — 명령이 데이터를 받는 곳. 평소엔 키보드. 파이프 |로 앞 명령의 출력을 여기로 흘려보냄. |
| stdout (1) | 표준 출력 — 명령의 정상 결과가 나가는 곳. 평소엔 화면. >·>>로 파일에 담을 수 있음. |
| stderr (2) | 표준 에러 — 에러·경고 메시지만 따로 나가는 곳. 평소엔 화면(그래서 stdout과 섞여 보임). 2>로 따로 뺄 수 있음. |
왜 정상 결과(1)와 에러(2)를 따로 둘까요? — 그래야 "결과만 파일에 저장하고, 에러는 화면에서 따로 보기" 같은 게 됩니다. 평소 화면에선 둘이 섞여 나와서 구분이 안 가지만, 리다이렉션을 쓰면 각각 다른 데로 보낼 수 있어요. 이게 핵심 아이디어입니다.
리다이렉션 — > · >> · <
"출구(또는 입구)를 화면/키보드 대신 파일로." 세 가지면 충분합니다.
> 는 묻지 않고 덮어씁니다 — 되돌리기 없음. 중요한 파일 이름으로 명령 > 중요파일.txt 하면 그 파일 내용이 그 명령의 출력으로 통째로 바뀝니다. 이어 붙이고 싶을 땐 반드시 >>. 그리고 cat a > a 처럼 같은 파일을 입력이자 출력으로 쓰면 내용이 날아가요 — 하지 마세요.에러 따로 다루기 — 2> · 2>&1 · /dev/null
여기가 처음 보면 헷갈리는데, 패턴 몇 개만 외우면 됩니다.
제일 많이 쓰는 둘만 기억하세요 — 2> /dev/null("에러는 조용히 무시") 과 > 파일 2>&1("정상+에러 전부 이 파일에 로그"). 나머지는 필요할 때 위 표 보고 조합하면 됩니다. (참고로 cron 작업 줄 끝에 흔히 붙는 >/dev/null 2>&1이 바로 "이 작업은 출력 메일 보내지 마"라는 뜻이에요 — 시리즈 20편 cron에서 다시.)
파이프 | — 명령 조립의 핵심
리다이렉션이 "출구를 파일로"라면, 파이프 |는 "앞 명령의 출구(stdout)를 뒤 명령의 입구(stdin)로 직접 연결"입니다. 파일을 거치지 않고 바로 흘려보내는 거죠. 7편에서 맛봤지만 이제 본격적으로.
파이프는 몇 개든 이을 수 있어요 — A | B | C | D. 각 도구는 한 가지만 잘하고, 조립으로 복잡한 일을 합니다. grep(거르기)·sort(정렬)·uniq(중복제거)·wc(세기)·head/tail(앞뒤 자르기) — 7편의 이 도구들이 파이프의 단골 부품입니다. (한 단계 더 나아간 xargs·awk·sed는 23편에서.)
실전 조합 5선 + 정리
"이런 걸 한 줄로?" 싶은 실전 예시들 — 다 위에서 배운 부품 조합입니다.
>(덮어쓰기)·>>(이어쓰기)·<(파일을 입력으로). 에러: 2> 파일(에러 따로)·2>&1(에러를 출력에 합치기)·&> 파일(둘 다)·/dev/null(버림). 파이프 |: 앞 출력 → 뒤 입력 직접 연결, 몇 개든 이음. 외울 둘: 2>/dev/null("에러 무시")·> 파일 2>&1("전부 로그"). >는 묻지 않고 덮어쓴다 — 중요 파일 조심.시리즈 흐름
- 1~5편 입문 묶음 ✔ 6편 파일 ✔ 7편 텍스트 ✔ 8편 nano ✔ 9편 권한 ✔ 10편 사용자·그룹 ✔ 11편 apt ✔
- 12편 — 파이프와 리다이렉션 (이 글) ✔ — "기초" 묶음 완료
- 13편 — vim 기초 (nano 다음 단계, 또는 서버에 nano 없을 때) — "중급" 묶음 시작
- 14편~ — 프로세스 관리 / 디스크 / 네트워크 명령어 / ufw 방화벽 / SSH 키 / systemd 서비스 / cron …
오늘 할 일: ~/linux-practice에서 ls ~ > list.txt → cat list.txt → echo 추가 >> list.txt → ls /usr/bin | wc -l → history | awk '{print $2}' | sort | uniq -c | sort -rn | head 한 바퀴. 마지막 한 줄에서 "내가 제일 많이 친 명령" 이 뜨면, 파이프 조립의 감이 옵니다. 13편에서 만나요. (셸 리다이렉션 전체는 bash 매뉴얼 Redirections에.)
우분투·리눅스 입문 시리즈
"기초" 묶음 완주 — 파일·텍스트·편집·권한·계정·패키지·파이프까지. 13편 "vim 기초"로 "중급" 묶음을 시작합니다.
다음 편은 JUNAI 블로그에서 이어 보세요.