Що саме виконує команда tty? Її функція полягає у виведенні на екран назви терміналу, який ви в даний момент використовуєте. Аббревіатура TTY розшифровується як “телетайп”. Звідки ж походить ця назва для команди? Щоб це зрозуміти, потрібен невеликий екскурс в історію.
Історія телетайпів 19 століття
У період з 1830-х по 1840-і роки були розроблені пристрої, відомі як телепринтери. Ці апарати мали здатність передавати текстові повідомлення на відстань “по дротах”. Відправник набирав текст на клавіатурі, а в місці призначення повідомлення роздруковувалось на папері. Це був значний крок вперед у розвитку телеграфії, яка до того часу використовувала код Морзе та інші подібні методи.
Повідомлення кодувалися, передавалися, приймалися, декодувалися та роздруковувалися. Для кодування та декодування використовувалися різні методи. Одним з найвідоміших та найпоширеніших був метод, запатентований у 1874 році Емілем Бодо, на честь якого названа швидкість передачі даних. Його система кодування символів стала попередником стандарту ASCII майже за 90 років.
Згодом кодування Бодо стало фактичним стандартом для телепринтерів, і його взяли на озброєння більшість виробників. Оригінальна конструкція Бодо мала лише п’ять клавіш, схожих на клавіші фортепіано. Оператор мав вивчити певну комбінацію клавіш для кожної літери. Пізніше систему Бодо інтегрували зі звичайною клавіатурою.
На знак цього прогресу, апарати почали називати телетайпами. З часом ця назва скоротилася до “телетайпів”, а потім і до TTY. Отже, саме звідси походить абревіатура TTY. Але який зв’язок телеграфії з комп’ютерами?
ASCII та Телекс
Після появи стандарту ASCII у 1963 році, його почали використовувати виробники телетайпів. Попри винахід та широке розповсюдження телефонів, телетайпи залишалися актуальними.
Телекс являв собою глобальну мережу телетайпів, що забезпечувала передачу текстових повідомлень по всьому світу. Вони були основним засобом передачі письмових повідомлень після Другої світової війни аж до розквіту факсів у 1980-х роках.
Комп’ютери також не стояли на місці. Вони почали підтримувати інтерактивну взаємодію з користувачами в реальному часі та одночасну роботу декількох користувачів. Старий пакетний режим роботи вже не задовольняв потреб. Люди не хотіли чекати на результати по 24 години або довше. Завантажувати стоси перфокарт і чекати на результати протягом ночі було неприйнятно.
Людям потрібен був пристрій, який дозволяв би вводити інструкції та отримувати результати в режимі реального часу. Потрібна була ефективність.
Перепрофілювання телетайпів
Телетайп виявився ідеальним кандидатом на роль пристрою введення/виведення. Адже він був розроблений саме для того, щоб повідомлення можна було набирати, кодувати, передавати, приймати, декодувати та роздруковувати.
Яке значення мав телетайп, якщо на іншому кінці з’єднання не був інший телетайп? До тих пір, поки пристрій розумів мову кодування і був здатний приймати та відправляти повідомлення, телетайп був задоволений.
До того ж, він використовував більш-менш стандартну клавіатуру.
Апаратні емулятори телетайпів
Телетайпи стали стандартним засобом взаємодії з великими міні-комп’ютерами та мейнфреймами того часу.
Згодом їх замінили пристрої, які імітували ці електромеханічні машини за допомогою електроніки. Замість рулонів паперу вони використовували електронно-променеві трубки (ЕПТ). Вони не дрижали під час отримання відповідей від комп’ютера. Нові пристрої забезпечували неможливі раніше функції, такі як переміщення курсору по екрану, очищення екрану, відображення тексту напівжирним шрифтом тощо.
DEC VT05 був одним з перших прикладів віртуального телетайпу та попередником відомого DEC VT100. DEC VT100 було продано мільйони.
Програмні емулятори телетайпів
В операційних системах Linux та інших Unix-подібних системах, таких як macOS, вікна терміналу та програми, як xterm і Konsole, є прикладами віртуальних телетайпів. Але вони повністю емулюються програмно. Їх називають псевдотелетайпами, або скорочено PTS.
І саме тут нам стає у нагоді команда tty.
Яку інформацію вона нам надає?
У Linux існує мультиплексор псевдотелетайпів, який керує з’єднаннями з усіх псевдотелетайпів вікна терміналу (PTS). Мультиплексор є головним пристроєм, а PTS — підлеглими. Мультиплексор звертається до ядра через файл пристрою, розташований за адресою /dev/ptmx.
Команда tty виводить на екран ім’я файлу пристрою, який ваш псевдотелетайп використовує для взаємодії з головним. Це фактично і є номер вікна вашого терміналу.
Давайте подивимося, що покаже tty для нашого вікна терміналу:
tty
З цього висновку видно, що ми підключені до файлу пристрою за адресою /dev/pts/0.
Наше вікно терміналу, яке є програмною емуляцією телетайпу (TTY), підключено до мультиплексора псевдотелетайпів як псевдотелетайп (PTS). І його номер — нуль.
Мовчазний режим
Параметр -s (silent – безшумний) змушує tty не виводити жодної інформації.
tty -s
Проте, ця команда повертає код виходу:
0: якщо стандартний вхід надходить з пристрою TTY, як емульованого, так і фізичного.
1: якщо стандартний вхід не надходить від пристрою TTY.
2: синтаксична помилка, використані невірні параметри командного рядка.
3: сталася помилка запису.
Це може стати у пригоді в Bash-скриптах. Але навіть у командному рядку ми можемо продемонструвати, як виконати команду лише в тому випадку, якщо ви працюєте у вікні терміналу (сесія TTY або PTS).
tty -s && echo "In a tty"
Оскільки ми працюємо в сесії TTY, код виходу дорівнює 0, і виконується друга команда.
Команда who
Інші команди також можуть надати інформацію про ваш номер TTY. Команда who відображає інформацію про всіх користувачів, які увійшли до системи, включаючи вас.
Алек і Мері підключені до комп’ютера Linux віддалено. Вони використовують PTS під номерами один і два.
Користувач dave підключений до “:0”.
Це вказує на екран і клавіатуру, фізично підключені до комп’ютера. Хоча екран і клавіатура є апаратними пристроями, вони також підключені до мультиплексора через файл пристрою. tty показує, що це /dev/pts/2.
who
tty
Доступ до 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, ви повернетеся до підказки входу в графічній сесії робочого столу.
У минулому комбінації клавіш від 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 отримала свою назву від пристрою кінця 19 століття, з’явилася в Unix у 1971 році та досі є частиною Linux та Unix-подібних операційних систем.
Ця маленька команда має за собою велику історію.