앞선 글에서 **표준 출력(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만 리다이렉션한다!
'개발 환경 및 프로젝트 관리 > Linux 개념' 카테고리의 다른 글
| 표준 출력(stdout)과 표준 에러(stderr) 기존 파일에 저장하기 (0) | 2026.01.08 |
|---|---|
| stdout과 stderr를 하나의 파일로 저장 (0) | 2026.01.07 |
| 표준 출력 리다이렉션(Redirection) (0) | 2026.01.07 |
| ls 명령어 내부와 표준 출력(stdout) 개념 (0) | 2026.01.07 |
| 텍스트가 많은 파일을 빠르게 읽는 방법 (vim) (0) | 2026.01.07 |