우리가 키보드, 마우스같은 단말기를 통해 어떠한 데이터(문자, 파일)를 입력하게 되면 컴퓨터는 프로그램을 통해 그에 알맞는 데이터를 출력시켜준다.
이러한 상황에서 사용되는 것이 표준스트림이다.
표준스트림의 사전적 정의는 아래와 같다(출처 - 위키피디아)
표준스트림(standard stream)이란 유닉스(unix)와 유닉스계열의 OS(linux, mac ...)에서 컴퓨터 프로그램과 단말기 사이에 존재하는 통로를 의미한다.
즉, 표준스트림은 단말기와 프로그램 사이에서 일어나는 데이터 입출력을 추상화한 것이다
이러한 표준 스트림에는 아래의 3가지 스트림이 존재한다.

표준 입력 스트림이란 컴퓨터 프로그램에 입력되는 데이터 스트림(data stream)이다.
standard input(stdio), 표준입력이라고도 한다.
입력스트림은 기본적으로 키보드로 문자열을 입력을 받으나 리다이렉션(redirection)을 통해 파일을 입력받을 수 있다.
리다이렉션에 관한 내용은 따로 다루었다.
https://velog.io/@developer-daily/리다이렉션과-파이프처리
하지만 항상 입력이 존재해야되는 것은 아니다.
아래 ls 명령을 보면 인자(commad line argument)만 존재하고 따로 키보드나 파일을 통한 입력은 없는 것을 알 수 있다.
$ ls -l //인자는 l
표준 출력 스트림이란 컴퓨터 프로그램에서 출력되는 데이터 스트림이다.
기본적으로 텍스트 터미널을 통해 모니터에 출력 되지만, 리다이렉션을 통해 파일에 출력값을 저장 할 수 있다.
예를 들어 유닉스의 ls 명령을 수행하게 되면 결과 값으로 현재 디렉토리에 있는 파일들의 목록을 출력된다.
$ ls -l
//출력 결과
total 64
lrwxrwxrwx 1 root root 7 Jan 5 16:54 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Apr 15 2020 boot
drwxr-xr-x 5 root root 360 Jan 16 12:55 dev
drwxr-xr-x 1 root root 4096 Jan 16 08:28 etc
drwxr-xr-x 2 root root 4096 Apr 15 2020 home
lrwxrwxrwx 1 root root 7 Jan 5 16:54 lib -> usr/lib
.
.
.
하지만 항상 출력이 존재하는 것은 아니다.
아래와 같이 명령의 수행이 성공 했을 경우 아무런 출력이 나타나지 않는다.
$ rm -r newfolder
표준 오류 스트림은 프로그램이 오류메시지나 진단을 출력하기 위해 일반적으로 쓰이는 또다른 출력 스트림이다.
즉, 명령 수행에 실패하였을 때 출력되는 오류들을 말한다.
$ mv hello.txt
mv: missing destination file operand after 'hello' //오류 출력
Try 'mv --help' for more information.
파일 서술자(file descriptor, 파일 디스크립터)는 리눅스에서 프로세스가 파일을 사용할 때 다루는 고유한 값이다.
이 고유한 값은 각각의 스트림마다 하나씩 가지고 있다.
0은 표준 입력스트림, 1은 표준 출력스트림, 2는 표준 오류스트림이다.
파일에 사용되기 때문에 리다이렉션이 필요한 상황에서 사용된다.
참고자료