터미널에서 `tty` 명령어는 어떤 기능을 수행할까요? 이 명령어는 현재 사용 중인 터미널의 이름을 출력합니다. 여기서 ‘TTY’는 ‘텔레타이프라이터’의 약자입니다. 명령어 이름 뒤에 숨겨진 이야기는 단순하지 않습니다. 좀 더 자세히 알아볼 필요가 있습니다.
19세기 텔레프린터의 등장
1830년대와 1840년대에는 텔레프린터가 개발되었습니다. 이 기계들은 입력된 메시지를 ‘전선을 따라’ 먼 거리로 전송하는 것이 가능했습니다. 메시지는 보내는 사람이 키보드와 유사한 장치로 입력했고, 받는 쪽에서는 종이에 인쇄되었습니다. 이는 이전의 전신 방식에서 사용하던 모스 부호와 같은 코드 체계에서 발전된 형태였습니다.
메시지는 암호화되어 전송된 후, 수신, 해독, 그리고 인쇄되었습니다. 메시지 암호화 및 해독에는 여러 기술이 사용되었는데, 그 중 가장 유명한 것은 1874년에 특허를 받은 에밀 보도의 방식입니다. 그의 이름을 따서 전송 속도 단위가 정해졌습니다. 보도의 문자 인코딩 체계는 ASCII보다 89년이나 앞섰습니다.
보도의 인코딩 방식은 결국 텔레프린터 인코딩의 표준에 가장 가까워졌고, 대부분의 제조업체에서 채택되었습니다. 원래 보도의 하드웨어 디자인에는 피아노 건반과 유사한 5개의 키만 있었습니다. 사용자는 각 문자에 대한 특정 키 조합을 익혀야 했습니다. 하지만 시간이 지나면서 보도의 인코딩 시스템은 전통적인 키보드 레이아웃과 결합되었습니다.
이러한 발전 단계를 거치면서 기계는 전신 타자기라고 불리게 되었고, 이는 텔레타이프로 줄여졌으며, 최종적으로 TTY로 축약되었습니다. 이것이 바로 약어 TTY의 기원입니다. 그렇다면 전신이 컴퓨팅과 무슨 관련이 있을까요?
ASCII와 텔렉스
1963년에 ASCII가 등장했을 때, 텔레타이프 제조업체들은 이를 채택했습니다. 전화기가 발명되어 널리 보급되었음에도 불구하고, 텔레타이프는 여전히 중요한 역할을 했습니다.
텔렉스는 전 세계적으로 서면 메시지를 전송할 수 있는 글로벌 텔레타이프 네트워크였습니다. 이것은 제2차 세계 대전 이후부터 1980년대 팩스 기계가 널리 보급되기 전까지 서면 메시지 전송의 주요 수단이었습니다.
한편, 컴퓨터도 발전을 거듭했습니다. 컴퓨터는 실시간으로 사용자와 상호작용하고 여러 사용자를 동시에 지원할 수 있게 되었습니다. 기존의 일괄 작업 방식은 점점 불필요해졌습니다. 사용자들은 24시간 이상 결과를 기다리는 것을 더 이상 원하지 않았습니다. 천공 카드 뭉치를 만들고 결과를 밤새도록 기다리는 방식은 더 이상 허용되지 않았습니다.
사람들은 지시를 입력하고 결과를 즉시 받아볼 수 있는 장치를 원했고, 효율성을 중요하게 생각했습니다.
텔레타이프의 새로운 용도
텔레타이프는 입력/출력 장치로서 완벽한 조건을 갖추고 있었습니다. 결국 텔레타이프는 메시지를 입력하고, 암호화하고, 전송하고, 수신하고, 해독하고, 인쇄하도록 설계된 장치였기 때문입니다.
만약 연결의 다른 쪽 끝에 있는 장치가 다른 텔레타이프가 아니라면 무슨 상관이 있겠습니까? 동일한 인코딩 언어를 사용하고 메시지를 수신하고 다시 메시지를 보낼 수만 있다면 텔레타이프는 만족스러웠습니다.
또한 텔레타이프는 거의 표준화된 키보드를 사용했습니다.
하드웨어로 에뮬레이트된 텔레타이프
텔레타이프는 당시의 대형 미니 컴퓨터 및 메인프레임 컴퓨터와 상호 작용하는 기본 수단이 되었습니다.
텔레타이프는 결국 전기 기계를 에뮬레이트하는 전자 장치로 대체되었습니다. 이러한 장치들은 종이 대신 음극선관 (CRT) 화면을 사용했습니다. 화면에는 커서 이동, 화면 지우기, 텍스트 굵게 표시와 같이 이전에는 불가능했던 다양한 기능이 가능했습니다.
초기 가상 텔레타이프의 대표적인 예는 DEC VT05였고, 그 뒤를 이어 유명한 DEC VT100이 등장했습니다. 수백만 대의 DEC VT100이 판매되었습니다.
소프트웨어로 에뮬레이트된 텔레타이프
Linux 및 macOS와 같은 Unix 계열 운영 체제의 데스크톱 환경에서 볼 수 있는 터미널 창과 x-term 및 Konsole과 같은 애플리케이션은 가상 텔레타이프의 소프트웨어 에뮬레이션입니다. 이들은 의사 텔레타이프라고도 불리며, PTS로 축약됩니다.
그리고 바로 여기서 `tty` 명령어가 사용됩니다.
tty 명령어가 알려주는 정보
Linux에는 모든 터미널 창의 PTS(의사 텔레타이프) 연결을 처리하는 의사 텔레타이프 멀티플렉서가 있습니다. 멀티플렉서는 마스터 역할을 하고, PTS는 슬레이브 역할을 합니다. 멀티플렉서는 `/dev/ptmx`에 있는 장치 파일을 통해 커널에서 주소를 지정합니다.
`tty` 명령어는 의사 텔레타이프 슬레이브가 마스터와 인터페이스하기 위해 사용하는 장치 파일의 이름을 출력합니다. 이것이 사실상 터미널 창의 번호입니다.
`tty` 명령어가 터미널 창에 대해 보고하는 내용을 살펴보겠습니다.
tty
응답 결과는 `/dev/pts/0` 장치 파일에 연결되어 있음을 보여줍니다.
텔레타이프(TTY)의 소프트웨어 에뮬레이션인 터미널 창은 의사 텔레타이프(PTS)로서 의사 텔레타이프 멀티플렉서와 인터페이스합니다. 그리고 이는 숫자 `0`으로 표시됩니다.
자동 옵션
`-s` (자동) 옵션을 사용하면 `tty` 명령어는 출력을 생성하지 않습니다.
tty -s
하지만 종료 값을 생성합니다.
0: 표준 입력이 TTY 장치(에뮬레이트된 또는 물리적)에서 오는 경우.
1: 표준 입력이 TTY 장치에서 오지 않는 경우.
2: 구문 오류, 잘못된 명령줄 매개변수가 사용된 경우.
3: 쓰기 오류가 발생한 경우.
이 기능은 특히 Bash 스크립트에서 유용하게 사용될 수 있습니다. 또한 명령줄에서 터미널 창(TTY 또는 PTS 세션)에서 실행 중인 경우에만 명령을 실행하는 방법을 보여줄 수 있습니다.
tty -s && echo "In a tty"
TTY 세션에서 실행 중이므로 종료 코드는 0이고, 두 번째 명령이 실행됩니다.
`who` 명령어
다른 명령어들도 TTY 번호를 표시할 수 있습니다. `who` 명령어는 자신을 포함하여 로그인한 모든 사용자에 대한 정보를 나열합니다.
Alec과 Mary는 Linux 컴퓨터에 원격으로 접속 중이며, PTS 1과 2에 연결되어 있습니다.
사용자 Dave는 `:0`에 연결된 것으로 표시됩니다.
이는 컴퓨터에 물리적으로 연결된 화면과 키보드를 나타냅니다. 화면과 키보드는 하드웨어 장치이지만, 여전히 장치 파일을 통해 멀티플렉서와 연결되어 있습니다. `tty` 명령어의 출력은 `/dev/pts/2`임을 보여줍니다.
who
tty
TTY에 접속하기
Ctrl+Alt 키를 누른 상태에서 기능 키 중 하나를 눌러 전체 화면 TTY 세션에 접속할 수 있습니다.
Ctrl+Alt+F3을 누르면 tty3의 로그인 프롬프트가 나타납니다.
로그인하고 `tty` 명령을 실행하면 `/dev/tty3`에 연결된 것을 확인할 수 있습니다.
이는 의사 텔레타이프(소프트웨어 에뮬레이션)가 아니라, 가상 텔레타이프(하드웨어 에뮬레이션)입니다. 컴퓨터에 연결된 화면과 키보드를 사용하여 DEC VT100과 같은 가상 텔레타이프를 에뮬레이트합니다.
기능 키 Ctrl+Alt를 기능 키 F3 ~ F6과 함께 사용하여 4개의 TTY 세션을 동시에 열 수 있습니다. 예를 들어, tty3에 로그인한 후 Ctrl+Alt+F6을 눌러 tty6으로 이동할 수 있습니다.
그래픽 데스크톱 환경으로 돌아가려면 Ctrl+Alt+F2를 누릅니다.
Ctrl+Alt+F1을 누르면 그래픽 데스크톱 세션의 로그인 프롬프트로 돌아갑니다.
Ctrl+Alt+F1에서 Ctrl+Alt+F6까지의 기능 키를 누르면 전체 화면 TTY 콘솔이 열리고, Ctrl+Alt+F7은 그래픽 데스크톱 환경으로 돌아갑니다. 이전 버전의 Linux 배포에서는 시스템이 이렇게 작동했을 수 있습니다.
이 내용은 Manjaro, Ubuntu 및 Fedora의 현재 릴리스에서 테스트되었으며, 모두 동일하게 작동했습니다.
Ctrl+Alt+F1: 그래픽 데스크톱 환경 로그인 화면으로 돌아갑니다.
Ctrl+Alt+F2: 그래픽 데스크톱 환경으로 돌아갑니다.
Ctrl+Alt+F3: TTY 3을 엽니다.
Ctrl+Alt+F4: TTY 4를 엽니다.
Ctrl+Alt+F5: TTY 5를 엽니다.
Ctrl+Alt+F6: TTY 6을 엽니다.
이러한 전체 화면 콘솔에 접근할 수 있기 때문에, Linux의 명령줄 설치만 사용하는 사용자(많은 Linux 서버가 이런 방식으로 구성됨)는 여러 콘솔을 동시에 활용할 수 있습니다.
그래픽 데스크톱 환경을 사용하는 Linux 시스템에서 작업하다가 세션이 정지되는 문제를 겪은 적이 있습니까? 이제는 TTY 콘솔 세션 중 하나로 이동하여 문제를 해결할 수 있습니다.
`top` 및 `ps` 명령어를 사용하여 문제가 있는 응용 프로그램을 식별하고, `kill` 명령어를 사용하여 종료하거나, `shutdown` 명령어를 사용하여 컴퓨터 상태가 허용하는 한 정상적으로 종료를 시도할 수 있습니다.
긴 역사를 가진 세 개의 작은 글자
`tty` 명령어는 1800년대 후반에 등장한 장치에서 이름을 따왔으며, 1971년에 Unix에 등장한 이후로 현재까지 Linux 및 Unix 계열 운영 체제에서 계속 사용되고 있습니다.
이 세 글자에는 꽤나 많은 이야기가 담겨 있습니다.