Команда tty (скор. від англ. “teletypewriter”) виводить ім’я використовуваного вами терміналу в Linux. Але яка передісторія стоїть за назвою цієї команди і чим вона може бути корисною? Зараз розберемося.
Телепринтери з 1800-х років
У 1830-х та 1840-х роках були розроблені машини, відомі як телепринтери. Телепринтер дозволяв відправнику за допомогою спеціального пристрою, що нагадує клавіатуру, набирати повідомлення та відправляти їх “проводами” у віддалені місця. Після прийому отриманий текст роздруковували на папері. Це було еволюційним кроком у телеграфії, яка досі використовувала лише абетку Морзе та подібні коди.
Перед відправкою повідомлення кодувалося, потім передавалося одержувачу, на місці отримання воно декодувалося та роздруковувалося. Для кодування та декодування повідомлень використовувалося кілька методів. Найвідомішим і найпопулярнішим був метод, запатентований у 1874 році Емілем Бодо, на честь якого була названа одиниця виміру символьної швидкості передачі даних (бод). До речі, його схема кодування символів на 89 років випередила появу стандарту ASCII.
Кодування Бодо в кінцевому підсумку стало найближчим до стандарту кодування телепринтерів, у зв’язку з чим воно було прийнято більшістю виробників. Оригінальна конструкція обладнання Бодо складалася лише з п’яти клавіш, схожих на клавіші піаніно. Оператор мав вивчити певну комбінацію для кожної букви. Згодом система кодування Бодо була поєднана з традиційною розкладкою клавіатури.
В ознаменування цього прогресу машини були названі “телетайпними машинами” або просто “телетайпами” (англ. “teletypes”, скор. від “teletypewriters»). Надалі назву урізали до TTY. Але яке відношення телеграф має до обчислювальної техніки?

Телетайп часів Другої світової війни
ASCII та Telex
1963 рік ознаменувався виходом стандарту ASCII, який був прийнятий виробниками телетайпів. Незважаючи на винахід та широке використання телефону, популярність телетайпів все ще була високою.
Телекс (англ. “Telex”, скор. від “telegraph exchange”) — це всесвітня мережа телетайпів, яка дозволяла відправляти письмові повідомлення по всьому світу. Вони були основним засобом передачі письмових повідомлень у період після Другої світової війни і аж до буму факсимільного зв’язку (факсів) у 1980-х роках.

Радянський факсимільний апарат “ФТА-П”, 1960 рік
У той же час розвивалися і комп’ютери. Вони ставали здатними взаємодіяти з користувачами в режимі реального часу та підтримувати роботу відразу з декількома з них. При цьому старий пакетний метод роботи зі застарілими апаратами дедалі більше нервував своїми недоліками. Люди не хотіли витрачати цілу добу (а то й більше) на очікування результатів виконання програм, які вони запускали. Робити стопки перфокарт і чекати на результати всю ніч було вже неприйнятно: потрібен був пристрій, який дозволяв би вводити інструкції і відразу отримувати результат. Потрібна була ефективність. І телетайп став ідеальним кандидатом для використання в якості пристрою вводу-виводу.
Апаратно-емульовані телетайпи
Телетайпи стали стандартним засобом взаємодії з міні-комп’ютерами та великими мейнфреймами тієї епохи.
З часом телетайпи були замінені на електронні пристрої, які імітували електромеханічну будову телетайпів. Але при цьому в даних пристроях замість рулонів паперу використовувалися електронно-променеві трубки (ЕПТ), вони не трусилися при доставці відповідей з комп’ютера і допускали досі неможливі функції такі, як переміщення курсору по екрану, очищення екрану, виділення тексту жирним шрифтом і так далі.
Відеотермінал DEC VT05 був раннім прикладом віртуального телетайпу та предком знаменитого DEC VT100. Продаж DEC VT100 обчислювався мільйонами штук.
Програмно-емульовані телетайпи
У Linux та інших UNIX-подібних операційних системах (наприклад, macOS) вікно терміналу та додатки типу xterm і Konsole є прикладами віртуальних телетайпів, робота яких повністю емулюється за допомогою програмного забезпечення. Через цю особливість термінали отримали назву псевдо-телетайп (скор. “PTS”, від англ. “pseudo-teletypes»).
Команда tty
У Linux існує мультиплексор псевдо-телетайпів, який обробляє з’єднання з усіх терміналів псевдо-телетайпів (PTS). Мультиплексор є провідним пристроєм, а PTS — підлеглими. Мультиплексор спілкується з ядром через файл пристрою, розташований у /dev/ptmx.
Команда tty виводить ім’я спеціального файлу пристрою, який ваш псевдо-телетайп використовує для взаємодії з провідним пристроєм. І це, насправді, номер вашого вікна терміналу.
Погляньмо, яку інформацію виведе команда tty для нашого вікна терміналу:
tty

Як бачите, ми підключені до спеціального файлу пристрою /dev/pts/1.
Наше вікно терміналу, що є програмною емуляцією телетайпа (TTY), підключено до мультиплексора псевдо-телетайпа як псевдо-телетайп (PTS) під номером 1.
Тихий режим
Опція -s (silent) призводить до того, що команда tty перестає генерувати вихідні дані:
tty -s

Ось деякі службові значення, які може повертати команда tty:
0 — якщо стандартний ввід надходить з пристрою TTY (емульованого або фізичного).
1 — якщо стандартний ввід не надходить з пристрою TTY.
2 — синтаксична помилка, використовувалися некоректні параметри командного рядку.
3 — відбулася помилка запису.
Дані значення будуть найбільш корисними при написанні bash-скриптів. Але навіть у командному рядку ми можемо продемонструвати, як виконати команду за умови, що ви працюєте у вікні терміналу (сеанс TTY або PTS).
tty -s && echo "In a tty"

Примітка: Оператор && є логічним оператором І. Якщо у командному рядку знаходитьсяcommand1 && command2, то command2 виконається тільки в тому випадку, якщо статус виходу з команди command1 дорівнює 0, що повідомляє про її успішне завершення.
Оскільки ми працюємо в сеансі TTY, наш код виходу дорівнює 0 (успіх), і виконується друга команда.
Команда who
Також є інші команди, які можуть відобразити ваш номер TTY. Команда who виведе інформацію про всіх користувачів, що ввійшли в систему, включаючи вас.
На наступному скріншоті видно, що до комп’ютера з Linux підключений користувач diego. Частиною :0 є екран і клавіатура, фізично під’єднані до комп’ютера. Незважаючи на те, що екран та клавіатура є апаратними пристроями, вони однаково з’єднані з мультиплексором через файл пристрою /dev/pts/1.
Доступ до TTY
Ви можете отримати доступ до повноекранного сеансу TTY, утримуючи натиснутими клавіші Ctrl+Alt і натискаючи одну з функціональних клавіш.
Натискання комбінації клавіш Ctrl+Alt+F3 викличе запрошення для входу в систему tty3.

Якщо ви увійдете в систему і виконаєте команду tty, то побачите, що підключені до /dev/tty3.
Це не псевдо-телетайп (емульований програмним забезпеченням); це віртуальний телетайп (емульований апаратним забезпеченням). Він використовує екран та клавіатуру, підключені до вашого комп’ютера, для емуляції віртуального телетайпу, як це робив DEC VT100.
Ви можете використовувати комбінацію клавіш Ctrl+Alt з функціональними клавішами F3-F6 для відкриття відповідних сеансів TTY. Наприклад, ви можете увійти до tty3 і натиснути Ctrl+Alt+F6, щоб перейти до tty6.

Щоб повернутися до графічного середовища робочого столу, натисніть Ctrl+Alt+F2. Натискання Ctrl+Alt+F1 поверне вас на екран входу до сеансу графічного робочого столу.
Наступні комбінації клавіш були протестовані на поточних версіях дистрибутивів Debian, Manjaro, Ubuntu та Fedora:
Ctrl+Alt+F1 — повертає вас на екран входу в графічне середовище робочого столу.
Ctrl+Alt+F2 — повертає вас у графічне середовище робочого столу.
Ctrl+Alt+F3 — відкриває tty3.
Ctrl+Alt+F4 — відкриває tty4.
Ctrl+Alt+F5 — відкриває tty5.
Ctrl+Alt+F6 — відкриває tty6.
Наявність доступу до повноекранних консолей дозволяє користувачам, які використовують мінімальне налаштування Linux (а багато серверів Linux налаштовані саме таким чином), мати кілька доступних консолей.
Чи траплялися у вас ситуації, коли під час роботи в Linux щось змусило ваш сеанс зависнути? Тепер можна перейти до одного з сеансів консолі TTY, щоб спробувати виправити ситуацію. Ви можете використати команду top або ps, щоб спробувати ідентифікувати програму, що вийшла з ладу, потім ввести команду kill, щоб завершити процес, або просто використати shutdown, щоб спробувати коректно завершити роботу системи.
Висновки
Команда tty, що отримала свою назву від пристрою кінця 1800-х років, з’явилася в UNIX в 1971 році. З подальшим розвитком обчислювальних машин телетайпи, а потім і відеотермінали відійшли в минуле. Однак підсистеми для роботи з ними хоч і зазнали суттєвих змін, все ж залишилися в ядрах операційних систем.


