
리눅스 명령 결과를 파일에 저장하거나 다음 명령으로 넘길 때는 리다이렉션과 파이프를 사용합니다. 하지만 >와 >>를 바꾸어 쓰거나 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단계
- Super 키를 누르고 Terminal을 검색해 터미널을 엽니다.
mkdir -p ~/bash-redirection-lab && cd ~/bash-redirection-lab로 연습 폴더를 만듭니다.printf '첫 줄 ' > output.txt를 실행하고cat output.txt로 확인합니다.printf '둘째 줄 ' >> output.txt를 실행해 기존 내용 뒤에 붙는지 봅니다.ls "$HOME" /definitely-missing > all.log 2>&1로 정상 출력과 오류를 한 파일에 저장합니다.printf 'alpha beta ' | tee result.txt로 화면과 파일에 함께 출력합니다. 추가하려면tee -a를 씁니다.false | true뒤echo $?를 확인하고,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 pipefail과PIPESTATUS를 확인합니다. - 파일명에 공백이 있으면
> "$file"처럼 따옴표로 묶습니다.
파일·권한 기초는 chmod·chown·umask 사용법과 touch·cat·nano·sed·rm 사용법을 먼저 보고, 프로세스 로그 명령은 리눅스 프로세스·시스템 모니터링 명령어에서 이어서 확인하세요.
FAQ
Q1. >와 >>는 언제 사용하나요?
>는 내용을 새로 만들 때, >>는 기존 내용 뒤에 추가할 때 사용합니다. 중요한 파일에는 먼저 복사본을 만드세요.
Q2. 2>&1 > file과 > file 2>&1은 왜 다른가요?
리디렉션을 왼쪽에서 오른쪽으로 처리하기 때문입니다. 정상 출력과 오류를 모두 파일에 넣으려면 보통 > file 2>&1 순서입니다.
Q3. 스크립트에서 pipefail이 필요한 이유는 무엇인가요?
파이프 중간 명령의 실패가 마지막 명령의 성공에 가려지는 것을 줄입니다. 다만 기존 스크립트 동작이 달라질 수 있어 테스트 후 적용합니다.
댓글