개발 환경 및 프로젝트 관리/Linux 개념

stdout과 stderr를 하나의 파일로 저장

Data Jun 2026. 1. 7. 18:16

표준 출력(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이다.