표준 출력(stdout)과 표준 에러(stderr)를
같은 파일로 저장하고 싶을 때 주의해야 할 점이 있다.
1. 잘못된 방식: 출력 충돌 가능성
다음 명령을 보자.
ls > all.txt 2> all.txt
겉보기에는
- stdout → all.txt
- stderr → all.txt
로 보이지만, 실제로는 출력 충돌이 발생할 수 있다.
이유는 다음과 같다.
- stdout과 stderr는 서로 다른 파일 디스크립터
- 동시에 같은 파일을 직접 가리키면
- 쓰기 순서가 보장되지 않음
결과적으로 메시지가 섞이거나 잘리는 문제가 생길 수 있다.
2. 올바른 방식: stderr를 stdout으로 합치기
정답은 다음과 같다.
ls > all.txt 2>&1
이 명령의 의미는:
- > : stdout을 all.txt로 리다이렉션
- 2>&1 : stderr를 stdout이 가리키는 곳으로 복사
즉,
stderr를 stdout에 합친 뒤,
stdout 하나만 파일로 보내는 구조
다.
3. 왜 2>&1이 안전한가?
- stderr → stdout → 파일
- 출력 경로가 하나로 통합
- 순서 보장
- 로그 수집에 적합
그래서 로그 파일을 남길 때는
항상 2>&1 방식을 사용한다.
4. 정리하면
stdout과 stderr를 같은 파일로 저장하려면
각각 파일로 보내지 말고, stderr를 stdout에 합쳐라.
정답은 2>&1이다.
'개발 환경 및 프로젝트 관리 > Linux 개념' 카테고리의 다른 글
| Bash $() 문법 이해: 명령어 실행 결과를 변수처럼 사용하는 방법 (0) | 2026.02.16 |
|---|---|
| 표준 출력(stdout)과 표준 에러(stderr) 기존 파일에 저장하기 (0) | 2026.01.08 |
| 표준 에러 출력(stderr)이란? (0) | 2026.01.07 |
| 표준 출력 리다이렉션(Redirection) (0) | 2026.01.07 |
| ls 명령어 내부와 표준 출력(stdout) 개념 (0) | 2026.01.07 |