본문 바로가기
Linux

리눅스 리다이렉션·파이프 사용법: >, >>, |, 2>&1, tee, pipefail 정리 (Ubuntu 24.04)

by 바른정보블로그 2026. 9. 9.
Ubuntu 24.04 터미널에서 리다이렉션과 파이프로 출력을 연결하는 과정을 표현한 일러스트

리눅스 명령 결과를 파일에 저장하거나 다음 명령으로 넘길 때는 리다이렉션과 파이프를 사용합니다. 하지만 >>>를 바꾸어 쓰거나 2>&1 순서를 틀리면 기존 파일이 사라지거나 오류가 터미널에 남을 수 있습니다. Ubuntu 24.04의 Bash 5.2 계열과 GNU 공식 문서를 기준으로 안전한 실습 순서를 정리합니다.

빠른 결론

>는 새로 쓰기, >>는 이어쓰기입니다.
|는 앞 명령의 표준출력을 다음 명령의 표준입력으로 연결합니다.
③ 스크립트 파이프 실패를 놓치지 않으려면 set -o pipefail을 검토하세요.

확인 환경과 핵심 문법

2026년 9월 9일 확인, Ubuntu 24.04 LTS Noble·Bash 5.2.21 기준입니다. 다른 셸(zsh, fish 등)은 세부 동작과 옵션이 다를 수 있으므로 먼저 printf '%s ' "$BASH_VERSION"로 확인합니다.

기호 안전한 예제
> 표준출력을 새로 저장, 기존 파일은 비움 printf '첫 줄 ' > output.txt
>> 파일 끝에 이어쓰기 printf '둘째 줄 ' >> output.txt
2> 표준에러만 저장 ls /missing 2> errors.log
2>&1 표준에러를 현재 표준출력과 합침 ls "$HOME" /missing > all.log 2>&1
| 출력을 다음 명령 입력으로 연결 printf 'apple banana ' | grep banana
tee 화면과 파일에 동시에 출력 printf '기록 ' | tee copy.txt

초보자 실습 7단계

  1. Super 키를 누르고 Terminal을 검색해 터미널을 엽니다.
  2. mkdir -p ~/bash-redirection-lab && cd ~/bash-redirection-lab로 연습 폴더를 만듭니다.
  3. printf '첫 줄 ' > output.txt를 실행하고 cat output.txt로 확인합니다.
  4. printf '둘째 줄 ' >> output.txt를 실행해 기존 내용 뒤에 붙는지 봅니다.
  5. ls "$HOME" /definitely-missing > all.log 2>&1로 정상 출력과 오류를 한 파일에 저장합니다.
  6. printf 'alpha beta ' | tee result.txt로 화면과 파일에 함께 출력합니다. 추가하려면 tee -a를 씁니다.
  7. false | trueecho $?를 확인하고, set -o pipefail을 켠 뒤 다시 실행해 차이를 비교합니다.

2>&1은 순서가 중요합니다

Bash는 리디렉션을 왼쪽에서 오른쪽으로 처리합니다. command > all.log 2>&1은 먼저 표준출력을 파일로 보낸 다음 표준에러를 같은 대상으로 연결합니다. 반대로 command 2>&1 > all.log는 오류를 원래 터미널에 연결한 뒤 표준출력만 파일로 보내므로 결과가 다릅니다.

표준출력과 표준에러를 함께 파이프로 보내려면 ls "$HOME" /missing 2>&1 | tee both.log처럼 씁니다. Bash의 |&도 축약형이지만 처음에는 명시적인 형태가 처리 순서를 이해하기 쉽습니다.

pipefail과 PIPESTATUS

기본 Bash는 파이프라인의 마지막 명령 상태를 반환합니다. 그래서 false | true는 앞 명령이 실패해도 0으로 끝날 수 있습니다. set -o pipefail을 켜면 파이프 중 오른쪽에서 가장 마지막으로 실패한 명령의 상태를 반환합니다. 각 구성 요소는 실행 직후 printf '%s ' "${PIPESTATUS[*]}"로 확인하며, 다른 명령을 실행하면 값이 갱신됩니다.

주의사항

  • >는 기존 파일을 0바이트로 줄인 뒤 씁니다. 중요한 파일은 먼저 백업하세요.
  • tee도 기본은 덮어쓰기입니다. 이어쓰기는 반드시 tee -a입니다.
  • set -o noclobber는 일반 파일 덮어쓰기를 막지만 >|로 우회할 수 있습니다.
  • sudo command > file의 리디렉션은 sudo 전의 현재 셸이 처리합니다. 보호된 파일에는 command | sudo tee file > /dev/null 형태를 검토하세요.
  • 실제 시스템 설정 파일에 실습하지 말고 홈 디렉터리 연습 폴더를 사용하세요.

해결되지 않을 때 추가 점검

  • 파일이 비었다면 >> 대신 >를 썼는지 확인합니다.
  • 오류만 화면에 남으면 2> 또는 2>&1을 확인합니다.
  • 권한 오류면 대상 폴더 소유권과 쓰기 권한을 먼저 봅니다.
  • 앞 명령 실패가 가려지면 set -o pipefailPIPESTATUS를 확인합니다.
  • 파일명에 공백이 있으면 > "$file"처럼 따옴표로 묶습니다.

파일·권한 기초는 chmod·chown·umask 사용법touch·cat·nano·sed·rm 사용법을 먼저 보고, 프로세스 로그 명령은 리눅스 프로세스·시스템 모니터링 명령어에서 이어서 확인하세요.

FAQ

Q1. >와 >>는 언제 사용하나요?

>는 내용을 새로 만들 때, >>는 기존 내용 뒤에 추가할 때 사용합니다. 중요한 파일에는 먼저 복사본을 만드세요.

Q2. 2>&1 > file과 > file 2>&1은 왜 다른가요?

리디렉션을 왼쪽에서 오른쪽으로 처리하기 때문입니다. 정상 출력과 오류를 모두 파일에 넣으려면 보통 > file 2>&1 순서입니다.

Q3. 스크립트에서 pipefail이 필요한 이유는 무엇인가요?

파이프 중간 명령의 실패가 마지막 명령의 성공에 가려지는 것을 줄입니다. 다만 기존 스크립트 동작이 달라질 수 있어 테스트 후 적용합니다.

공식 출처

댓글