표준 입력(STDIN), 표준 출력(STDOUT), 표준 에러(STDERR)란
개요
리눅스나 유닉스를 사용하다 보면 표준 입력(stdin; standard input), 표준 출력(stdout; standard output), 표준 에러(standard error)란 단어를 많이 들어봤을 겁니다.
이 3가지는 표준 스트림(standard stream)이라고 하며 운영 체제에서 기본적으로 제공하는 추상화된 입출력 장치를 의미합니다.
일반적으로 입출력은 시스템에 연결된 키보드와 모니터를 통해서 일어나며 표준 스트림은 이를 추상화했으므로 기본 입출력 장치는 다음처럼 설정됩니다.
- 표준입력(STDIN): 표준 입력 장치의 ID 는 숫자로는 0 이며 일반적으로는 키보드가 됩니다.
- 표준출력(STDOUT): 출력을 위한 스트림으로 표준 출력 장치의 ID 는 1이며 일반적으로는 현재 쉘을 실행한 콘솔(console)이나 터미널(terminal)이 됩니다.
- 표준에러(STDERR): 에러를 위한 스트림으로 표준 에러 장치의 ID 는 2이며 일반적으로는 표준 출력과 동일합니다.
tty 란
tty 는 전신타자기를 의미하는 TeleTYpewriter 의 약자로 TelePrinter 라고도 합니다.
전신타자기에는 입력과 출력 장치가 붙어 있었고 컴퓨터가 발명되고 입력 장치는 키보드가, 출력장치는 CRT 모니터가 되었습니다.
초기 컴퓨터는 매우 비쌌기때문에 사용할 수 있는 인원이 한정되어 있었고 시분할(time sharing) 방식이 개발된 후로 위와 같은 dummy terminal 을 사용해서 메인프레임에 연결해서 사용했습니다.
리눅스도 유닉스 계열이므로 위와 같은 구조를 갖고 있으며 tty 는 pseudo-teletype multiplexor 로 SW 적으로 TeleTYpewriter 를 에뮬레이션 해줍니다.
tty 는 현재 표준 입력과 연결된 터미널이 무엇인지 출력해 주는 명령어이기도 합니다.
$ tty /dev/pts/0
pty 란
pty는 Pseudo terminal 의 의미로 리눅스나 유닉스를 연결된 콘솔에서만 사용한다면 동시에 한 명밖에 사용할수 없으므로 SSH 나 Telnet, X-Windows Terminal 등 다양한 방식으로 사용하기 위한 가상 tty 입니다.
리눅스에서 pty 디바이스는 /dev/pts 아래에 있습니다.
$ ls -l /dev/pts/ total 0 crw--w----. 1 lesstif tty 136, 0 Jul 7 04:18 0 c---------. 1 root root 5, 2 Jul 5 20:50 ptmx