Что делает команда 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-подобных операционных систем.
За этим названием целая история.
Связанные статьи:
- Как пользоваться tmux для создания нескольких терминалов внутри одной консоли (85.4%)
- Terminator: эмулятор терминала для управления несколькими окнами терминала на Linux (85.4%)
- Как в Linux узнать даты выключения и перезагрузки компьютера (62%)
- Как закрыть терминал без убийства запущенной в нём команды (53.4%)
- Как пользоваться screen для управления терминалами Linux и отсоединения процессов от терминала (53.4%)
- Bluetooth при включении постоянно просит ввести пароль (РЕШЕНО) (RANDOM - 50%)
Благодарю за столь увлекательную и полезную статью! При чтении книг по Linux долго не мог понять, в чём же основная разница между tty и pts, и откуда вообще ноги растут… Приятно было найти наполненный материал в последовательном изложении.
Нихрена - в Дебиане если вы нажмёте на что-то никуда вы не попадёте - из коробки ничего это не работает.
Должно работать. Вы или подключаетесь к удалённому компьютеру по SSH, или у вас ОС без графического интерфейса или что-то подобное очень необычное.
В статье мои скриншоты из Kali Linux — там это работает, а этот дистрибутив основан на Debian.