CS 지식

[CS 지식16.] stdin(표준입력) vs stdout(표준출력) vs stderr(표준에러)

Somaz 2024. 11. 9. 14:56
728x90
반응형

Overview

Linux에서 stdin, stdout 및 stderr은 터미널 또는 명령줄 인터페이스에서 입력 및 출력을 관리하는 데 사용되는 표준 데이터 스트림이다. 다음은 이러한 작동 방식과 상호 작용할 수 있는 방법에 대한 자세한 내용이다.

 

출처 : https://ko.wikipedia.org/wiki/%ED%91%9C%EC%A4%80_%EC%8A%A4%ED%8A%B8%EB%A6%BC

 

 


표준입력(stdin)이란?

`stdin` 은 표준입력 또는 파일 디스크립터 0으로 표현된다.

파일이나 다른 명령과 같은 사용자 또는 다른 소스의 입력을 읽는다. 기본적으로 `stdin` 은 키보드에 연결되어 있지만 파일이나 다른 소스에서 리디렉션할 수 있다.

 

예시는 다음과 같다.

cat
  • 인수 없이 `cat` 을 입력하면 `stdin(입력 대기)` 에서 읽는다.
  • 어떤 텍스트라도 입력할 수 있으며, `cat` 은 해당 내용을 한 줄씩 다시 표시한다.

 

 

파일에서 `stdin` 을 리디렉션할 수도 있다.

cat < file.txt
  • 여기서 `cat` 은 `stdin` 을 통해 `file.txt` 의 내용을 읽어 `stdout(화면)` 에 출력한다.

 

 


 

 

표준출력(stdout)이란?

`stdout` 은 표준출력 또는 파일 디스크립터 1로 표현된다.

결과나 메시지를 터미널 화면으로 보내기 위한 기본 출력 스트림이다. 대부분의 명령은 결과를 `stdout` 으로 출력한다.

 

예시는 다음과 같다.

echo "Hello, World!"
  • `echo` 는 `stdout(화면)` 에 "Hello World"를 출력한다.

 

 

`stdout` 을 파일로 리디렉션 할 수 있다.

echo "Hello, World!" > output.txt
  • 여기서 `stdout` 은 `output.txt` 로 리디렉션된다. "Hello, World!"라는 텍스트 화면에 표시되지 않고 파일에 저장된다.

 

 


 

 

 

표준오류(stderr)이란?

`stderr` 는 표준오류 또는 파일 디스크립터 2로 표현된다.

오류 메시지의 기본 스트림이다. 기본적으로 stderr은 stdout과 마찬가지로 터미널 화면에 표시되지만 별도로 리디렉션될 수 있다.

 

실행중인 `sterr` 의 예는 다음과 같다.

ls /nonexistent-directory
  • 이 명령은 존재하지 않는 디렉터리를 나열하려고 시도한다. 오류 메시지(e.g., "ls: cannot access '/nonexistent-directory': No such file or directory”)가 `stderr` 로 전송된다.

 

 

`stderr` 을 파일로 리디렉션 해본다.

ls /nonexistent-directory 2> error.log
  • 여기서 `2>` 는 `stderr(표준오류)` 을 `error.log` 로 리디렉션하는 데 사용된다.

 

 


 

 

 

stdout 과 stderr 활용

다음 구문을 사용하면 `stdout` 과 `stderr` 을 모두 동일한 파일로 리디렉션할 수 있다.

ls /nonexistent-directory /etc  > all_output.log 2>&1
  • `2>&1` 은 `stderr` 을 `stdout` 과 같은 위치로 보내도록 쉘에 지시하므로 표준 출력과 오류 메시지가 모두 `all_output.log`에 기록된다.

 

 

출력을 인쇄하고 오류를 생성하는 스크립트 `(myscript.sh)` 가 있다고 가정한다. `stdout` 과 `stderr` 을 다음과 같이 두 개의 파일로 분리할 수 있다.

./myscript.sh > output.log 2> error.log
  • `output.log` 에는 표준 출력만 포함되고 `error.log` 에는 오류 메시지만 포함된다.

 

 

`tee` 명령을 사용하여 화면에 출력을 표시하면서 출력을 파일로 저장할 수 있다.

ls /etc | tee output.log
  • `tee` 는 `stdout` 을 화면과 `output.log` 모두에 보낸다.

 

 

Summary of Common Redirection Operations

Operation Explanation
command > file Redirect stdout to file.
command 2> file Redirect stderr to file.
command > file 2>&1 Redirect both stdout and stderr to file.
command < file Use file as stdin for command.
command >> file Append stdout to file instead of overwriting.
command 2>> file Append stderr to file.
command > file1 2> file2 Redirect stdout to file1 and stderr to file2.

 

 

 

요약

  • stdin (0): 일반적으로 키보드에서 입력을 읽지만 리디렉션될 수 있다.
  • stdout (1): 일반적으로 화면으로 출력을 보내지만 리디렉션될 수 있다.
  • stderr (2): 일반적으로 화면에 오류 메시지를 보내지만 stdout과 별도로 리디렉션될 수 있다.

 

이러한 스트림과 리디렉션을 이해하면 특히 스크립트와 자동화된 프로세스에서 입력과 출력을 보다 효과적으로 제어하는 데 도움이 된다.

 

 


Reference

https://ko.wikipedia.org/wiki/%ED%91%9C%EC%A4%80_%EC%8A%A4%ED%8A%B8%EB%A6%BC

 

 

 

728x90
반응형