zaLinux.ru

Что такое TTY в Linux? (и как использовать команду tty)


Что делает команда tty? Она печатает имя терминала, который вы используете. TTY означает «телетайп» (teletypewriter). Какая история стоит за названием команды? Это требует немного большего объяснения.

Телепринтеры 1800-х годов

В 1830-х и 1840-х годах были разработаны машины, известные как телетайпы. Эти машины могли отправлять печатные сообщения «по проводам» в отдалённые места. Сообщения были набраны отправителем на своего рода клавиатуре. У получателя они печатались на бумажке. Они были эволюционным шагом в телеграфии, которая раньше полагалась на коды Морзе и подобные.

Сообщения кодировались и передавались, затем принимались, декодировались и печатались. Для кодирования и декодирования сообщений использовалось несколько методов. Самый известный и один из самых плодотворных был запатентован в 1874 году Эмилем Бодо, в честь которого названа скорость передачи. Его схема кодирования символов предшествовала ASCII на 89 лет.

Кодирование Бодо в конечном итоге стало наиболее близким к стандарту кодирования телетайпов, и его приняли большинство производителей. В оригинальной конструкции Бодо было всего пять кнопок, похожих на клавиши пианино. Оператор должен был выучить определённую комбинацию клавиш для каждой буквы. В конце концов, система кодирования Бодо была объединена с традиционной раскладкой клавиатуры.

Чтобы выделить это достижение, машины были названы teletypewriters. Это название сокращено до teletypes и, в конечном итоге, до TTY. Отсюда мы и получили аббревиатуру TTY, но какое отношение телеграфия имеет к компьютерам?

ASCII и Telex

Когда в 1963 году появился ASCII, он был принят производителями телетайпов. Несмотря на изобретение и широкое распространение телефона, телетайпы все ещё были популярны.

Телекс — это всемирная сеть телетайпов, позволяющая отправлять письменные сообщения по всему миру. Они были основным средством передачи письменных сообщений в период после Второй мировой войны до бума факсимильных аппаратов в 1980-х годах.

Компьютеры тоже развивались. Они стали способны взаимодействовать с пользователями в режиме реального времени и поддерживать нескольких пользователей. Старый пакетный метод работы стал недостаточным. Люди не хотели ждать результатов 24 часа или дольше. Изготовление стопок перфокарт и ожидание результатов в течение ночи было неприемлемо.

Людям требовалось устройство, которое позволяло бы вводить инструкции и получать результаты, отправленные им обратно. Людям нужна была эффективность.

Телетайп перепрофилирован

Телетайп был идеальным кандидатом в качестве устройства ввода/вывода. В конце концов, это было устройство, позволяющее печатать, кодировать, отправлять, получать, декодировать и распечатывать сообщения.

Какое дело телетайпу, если устройство на другом конце соединения не было другим телетайпом? Пока он говорил на одном языке кодирования и мог получать сообщения и отправлять сообщения обратно, телетайп был счастлив.

И, конечно же, использовалась более-менее стандартная клавиатура.

Аппаратно эмулированные телетайпы

Телетайпы стали стандартным средством взаимодействия с большими мини-компьютерами и мэйнфреймами той эпохи.

В конечном итоге они были заменены устройствами, имитирующими эти электромеханические машины с использованием электроники. У них были электронно-лучевые трубки (ЭЛТ) вместо бумажных рулонов. Они не дрожали при ответах с компьютера. Они допускали невозможные до сих пор функции, такие как перемещение курсора по экрану, очистка экрана, выделение текста жирным шрифтом и т. д.

DEC VT05 был ранним примером виртуального телетайпа и предком знаменитого DEC VT100. Были проданы миллионы DEC VT100.

Программно-эмулированные телетайпы

В среде рабочего стола Linux и других Unix-подобных операционных систем, таких как macOS, окно терминала и приложения, такие как x-term и Konsole, являются примерами виртуальных телетайпов. Но они полностью эмулируются программно. Их называют псевдотелетайпами. Это было сокращено до PTS.

И здесь на помощь приходит tty.

Что может нам сказать tty?

В Linux есть мультиплексор псевдотелетайпа, который обрабатывает соединения от всех псевдотелетипов окон терминала (PTS). Мультиплексор является ведущим, а PTS — ведомыми. Мультиплексор адресуется ядром через файл устройства, расположенный в /dev/ptmx.

Команда tty напечатает имя файла устройства, который ваш ведомый псевдотелетайп использует для взаимодействия с мастером. И это, по сути, номер вашего окна терминала.


Посмотрим, какие отчёты tty для нашего окна терминала:

tty

Ответ показывает, что мы подключены к файлу устройства по адресу /dev/pts/2.

Наше окно терминала, которое представляет собой программную эмуляцию телетайпа (TTY), взаимодействует с мультиплексором псевдотелетайпа как псевдотелетайп (PTS). И его номер два.


Тихий вариант

Параметр -s (без вывода сообщений) заставляет tty не генерировать вывода.

tty -s

Однако он даёт выходное значение:

  • 0: если стандартный ввод поступает с устройства TTY, эмулируемого или физического.
  • 1: если стандартный ввод не поступает с устройства TTY.
  • 2: Синтаксическая ошибка, использовались неверные параметры командной строки.
  • 3: Произошла ошибка записи.

Это, вероятно, будет наиболее полезно в сценариях Bash. Но даже в командной строке мы можем продемонстрировать, как выполнить команду, только если вы работаете в окне терминала (TTY или сеанс PTS).

tty -s && echo "Внутри tty"

Поскольку мы работаем в сеансе TTY, наш код выхода равен 0, и выполняется вторая команда.


Команда who

Другие команды могут показать ваш номер TTY. Команда who отобразит информацию обо всех вошедших в систему пользователях, включая вас.

Алек и Мэри удаленно подключены к компьютеру с Linux. Они подключены к PTS один и два.

Пользователь dave показан как подключенный к «:0». Это экран и клавиатура, физически подключённые к компьютеру.

Несмотря на то, что экран и клавиатура являются аппаратными устройствами, они всё равно подключены к мультиплексору через файл устройства. tty показывает, что это /dev/pts/2.

who
tty

Доступ к телетайпу

Вы можете получить доступ к полноэкранному сеансу TTY, удерживая клавиши Ctrl+Alt и нажав одну из функциональных клавиш.

Ctrl+Alt+F3 вызовет приглашение входа на tty3.

Если вы войдёте в систему и введёте команду tty, вы увидите, что подключены к /dev/tty3.

Это не псевдотелетайп (эмулируемый в программном обеспечении); это виртуальный телетайп (эмулируемый аппаратно). Он использует экран и клавиатуру, подключённые к вашему компьютеру, для имитации виртуального телетайпа, как это делал DEC VT100.

Вы можете использовать функциональные клавиши Ctrl+Alt с функциональными клавишами от F3 до F6 и при желании открыть четыре сеанса телетайпа. Например, вы можете войти в 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.

У Kali Linux графический интерфейс открывается при нажатии Ctrl+Alt+F7.

Наличие доступа к этим полноэкранным консолям позволяет людям, использующим установки Linux только из командной строки — а многие серверы Linux настроены таким образом — иметь несколько доступных консолей.

Вы когда-нибудь работали на Linux-машине с графической средой рабочего стола и что-то заставляло ваш сеанс зависать? Теперь вы можете перейти к одному из сеансов консоли TTY, чтобы попытаться исправить ситуацию.

Вы можете использовать top и ps, чтобы попытаться идентифицировать отказавшее приложение, затем используйте kill, чтобы завершить его, или просто используйте shutdown, чтобы попытаться завершить работу настолько изящно, насколько позволяет состояние компьютера.


Три маленьких буквы с большой историей

Команда tty получила своё название от устройства конца 1800-х годов, появилось в Unix в 1971 году и по сей день является частью Linux и Unix-подобных операционных систем.

За этим названием целая история.


Рекомендуемые статьи:

3 Комментарии

  1. Павел

    Благодарю за столь увлекательную и полезную статью! При чтении книг по Linux долго не мог понять, в чём же основная разница между tty и pts, и откуда вообще ноги растут… Приятно было найти наполненный материал в последовательном изложении.

  2. Виктор

    Нихрена - в Дебиане если вы нажмёте на что-то никуда вы не попадёте - из коробки ничего это не работает.

    1. Alexey (Автор записи)

      Должно работать. Вы или подключаетесь к удалённому компьютеру по SSH, или у вас ОС без графического интерфейса или что-то подобное очень необычное.

      В статье мои скриншоты из Kali Linux — там это работает, а этот дистрибутив основан на Debian.

Добавить комментарий для Павел Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *