과거에는 컴퓨터가 가정에 보급되지 않은 고가의 장비였기에 사용할 수 있는 인원이 제한되었습니다.
이것을 극복하기 위해 tty를 사용했으며, 현대에 와서는 유닉스 계열의 시스템에서 터미널의 역할을 하게 되었죠.
즉, TTY는 가상 터미널 혹은 콘솔을 의미합니다.

리눅스에서 tty에 대한 장치 파일들을 살펴볼 수 있습니다.
커널이 관리하는 장치 드라이버와 상호작용을 해요.
tty1~tty6은 텍스트 기반 가상 콘솔입니다. 기본적으로 텍스트 기반 로그인 세션으로 설정됩니다.
tty7 이상은 gui 환경에서 사용가능하거나 예약 되어있습니다. 배포판의 설정에 따라서 달라요
Ctrl + Alt + F3 을 눌러서 TTY3으로 전환하면
/dev/tty3 이 활성화 할 수 있습니다.

직접 Ctrl + Alt + f1 ~ f6 까지 확인할 수 있습니다.
물리적인 직렬 포트를 나타내요.
현대에서는 거의 사용하지 않지만, 임베디드 장치나 서버 관리 환경에서는 유용합니다.
Psedo Terminal은 GNOME 터미널, SSH 접속 등 터미널 에뮬레이터에서 사용됩니다.
PTS는 개수 제한이 거의 없습니다.
예를 들면 /dev/pts/0, /dev/pts/1, /dev/pts/2 이런식으로 새로운 PTS를 동적으로 생성하게 됩니다.

현재 저는 /dev/pts/0을 사용하고 있어요.
우측 위를 보시면 이미 새탭을 열어놨는데, 거기에 접속하여 tty 명령어를 입력해볼까요.

/dev/pts/1을 사용하고 있네요.
그러면 ssh로 같은 서버에 접속하고 tty를 하면 어떻게 될까요?

/dev/pts/2를 사용하고 있네요.
즉 ssh 접근이나 gnmoe 터미널을 사용하고 있는 경우 PTS가 동적으로 생성되므로 몇 명이던 간에 동시에 접속이 가능합니다.

ll /dev/pts/ 를 살펴보면 0 1 2까지 생성되었네요.
위에서 PTS를 잠깐 언급하였는데
본격적으로 이해하기 위해 PTY를 살펴볼까요?
PTY (Pseudo-Terminal Master/Slave)
PTY는 가상 터미널을 제공하여, 실제 TTY 장치 없이도 터미널 입출력 동작이 가능합니다.
Master - Slave 구조로 동작합니다.

그렇다면 tty2에서 어떻게 동작하는지 과정을 그림으로 살펴볼까요?
gnome 터미널에서 ls -l 명령을 입력합니다.
Master가 전달받습니다.
Slave 에게 넘겨줍니다. (/dev/pts/x)
Slave와 쉘은 연결되어 있으므로 쉘에게 넘깁니다.
쉘은 ls -l 명령을 해석하여 시스템콜을 합니다.
해당 결과를 Slave 에 씁니다.
Slave에서 Master 에게 전달합니다.
Master는 터미널에게 마지막으로 전달합니다.
처음 위에서 한창 tty1~tty6 이야기를 하다가 어느순간 /dev/pts/0 이야기를 하고 있습니다.
문득 /dev/tty2 와 /dev/pts/0 은 같은건가? 라는 생각이 들 수 있습니다.
결론은 아닙니다.
정확하게는 tty2 터미널 안에서 gnome 세션에 의해서 gnome 터미널 프로그램(에뮬레이터)이 실행됩니다.
gnome 터미널이 실행될 때, gnome 터미널이 /dev/ptmx를 자동으로 열면, 커널은 요청을 받아서, PTM(master)를 생성합니다.
PTM이 생성되면, 커널은 이에 대응하는 PTS(slave)를 동적으로 생성합니다.
PTS는 쉘(bash) 와 연결되며, 사용자 명령을 쉘에 전달하는 역할을 합니다.