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

표준 에러 출력(stderr)이란?

Data Jun 2026. 1. 7. 18:12

앞선 글에서 **표준 출력(stdout)**은
명령어의 정상적인 실행 결과가 흘러가는 통로라고 설명했다.

 

이번에는 그와 완전히 분리된 또 하나의 출력 통로,
**표준 에러 출력(stderr)**에 대해 알아보자.

 

1. 표준 에러 출력(stderr)이란?

**표준 에러 출력(stderr)**은

명령어 실행 중 발생한 에러 메시지 전용 출력 통로이다.

예를 들어, 존재하지 않는 파일이나 디렉터리를 조회하면 다음과 같은 상황이 발생한다.

ls abc
ls: cannot access 'abc': No such file or directory

이 메시지는 **표준 출력(stdout)**이 아니라 **표준 에러 출력(stderr)**을 통해 출력된다.

 

2. 왜 >로 리다이렉션했는데 파일에 안 저장될까?

다음 명령을 실행해 보자.

ls abc > list2.txt

결과:

  • 터미널 화면에는 에러 메시지가 그대로 출력
  • list2.txt 파일에는 아무 내용도 없음

왜 이런 일이 발생할까?

 

이유는 간단하다.

>는 **표준 출력(stdout)**만 리다이렉션한다.
에러 메시지는 **표준 에러(stderr)**로 출력되기 때문이다.

 

즉,

  • ls abc
    • 정상 출력 ❌
    • 에러 출력 ⭕ (stderr)
  • >
    • stdout만 파일로 보냄
    • stderr는 여전히 터미널로 유지

 

3. ls 내부 동작으로 보면 더 명확해진다

ls 명령의 내부 동작을 단순화하면 다음과 같다.

printf("%s\n", entry->d_name);   // 표준 출력(stdout)
perror("cannot access");        // 표준 에러(stderr)
  • printf → stdout
  • perror → stderr

두 출력은 완전히 다른 통로이며,
기본적으로 둘 다 터미널 화면에 연결되어 있을 뿐이다.

 

4. 그럼 에러 메시지를 파일로 저장하려면?

표준 에러 출력(stderr)을 파일로 보내려면
>가 아니라 **2>**를 사용해야 한다.

ls abc 2> list3.txt

이제 결과는 다음과 같다.

  • 터미널 화면: 아무것도 출력되지 않음
  • list3.txt: 에러 메시지 저장됨

확인:

cat list3.txt

 

ls: cannot access 'abc': No such file or directory

 

 

5.  정리하면

표준 출력과 표준 에러 출력은 처음부터 분리된 통로이며,
>는 stdout만, 2>는 stderr만 리다이렉션한다!