Что такое TTY в Linux?
Обновл. 9 Сен 2021 |
Команда tty (сокр. от англ. «teletypewriter») выводит имя используемого вами терминала в Linux. Но какая предыстория стоит за названием этой команды и чем она может быть нам полезна? Сейчас разберемся.
Телепринтеры из 1800-х годов
В 1830-х и 1840-х годах были разработаны машины, известные как телепринтеры. Телепринтер позволял отправителю с помощью специального устройства, напоминающего клавиатуру, набирать сообщения и отправлять их «по проводам» в отдаленные места. По приему, полученный текст распечатывали на бумаге. Это было эволюционным шагом в телеграфии, которая до сих пор использовала только азбуку Морзе и подобные коды.
Перед отправкой сообщение кодировалось, затем передавалось получателю, на месте получения оно декодировалось и распечатывалось. Для кодирования и декодирования сообщений использовалось несколько методов. Самым известным и популярным являлся метод, запатентованный в 1874 году Эмилем Бодо, в честь которого была названа единица измерения символьной скорости передачи данных (бод). К слову сказать, его схема кодирования символов на 89 лет опередила появление стандарта ASCII.
Кодировка Бодо в конечном итоге стала наиболее близкой к стандарту кодирования телепринтеров, в связи с чем, она была принята большинством производителей. Оригинальная конструкция оборудования Бодо состояла всего лишь из пяти клавиш, похожих на клавиши пианино. Оператор должен был выучить определенную комбинацию для каждой буквы. Со временем, система кодирования Бодо была объединена с традиционной раскладкой клавиатуры.
В ознаменование этого прогресса машины были названы «телетайпными пишущими машинами» или просто «телетайпами» (англ. «teletypes», сокр. от «teletypewriters»). В дальнейшем название урезали до TTY. Вот откуда появилась аббревиатура TTY. Но какое отношение телеграф имеет к вычислительной технике?
Телетайп времен Второй мировой войны
ASCII и Telex
1963 год ознаменовался выходом стандарта ASCII, который был принят производителями телетайпов. Несмотря на изобретение и широкое использование телефона, популярность телетайпов все еще была высока.
Телекс (англ. «Telex», сокр. от «telegraph exchange») — это всемирная сеть телетайпов, которая позволяла отправлять письменные сообщения по всему миру. Они были основным средством передачи письменных сообщений в период после Второй мировой войны вплоть до бума факсимильной связи (факсов) в 1980-х годах.
Советский факсимильный аппарат «ФТА-П», 1960 год
В тоже время развивались и компьютеры. Они становились способными взаимодействовать с пользователями в режиме реального времени и поддерживать работу сразу с несколькими из них. При этом старый пакетный метод работы с устаревшими аппаратами все сильнее обнажал свои недостатки. Люди не хотели тратить целые сутки (а то и больше) на ожидание результатов выполнения вводимых ими программ. Делать стопки перфокарт и ждать результатов всю ночь было уже неприемлемо: требовалось устройство, которое позволяло бы вводить инструкции и сразу получать результат. Нужна была эффективность. И телетайп стал идеальным кандидатом для использования в качестве устройства ввода-вывода.
Аппаратно-эмулированные телетайпы
Телетайпы стали стандартным средством взаимодействия с мини-компьютерами и большими мейнфреймами той эпохи.
С течением времени телетайпы были заменены на электронные устройства, которые имитировали электромеханическое строение телетайпов. Но при этом, в этих устройствах вместо рулонов бумаги использовались электронно-лучевые трубки (ЭЛТ), они не тряслись при доставке ответов с компьютера и допускали доселе невозможные функции, такие как: перемещение курсора по экрану, очистка экрана, выделение текста жирным шрифтом и так далее.
Видеотерминал DEC VT05 был ранним примером виртуального телетайпа и предком знаменитого DEC VT100. Продажи DEC VT100 исчислялись миллионами штук.
Программно-эмулированные телетайпы
В Linux и других UNIX-подобных операционных системах (например, macOS), окно терминала и приложения по типу x-term и Konsole являются примерами виртуальных телетайпов, работа которых полностью эмулируется при помощи программного обеспечения. Из-за этой особенности терминалы получили название псевдо-телетайп (сокр. «PTS», от англ. «pseudo-teletypes»).
Команда tty
В Linux существует мультиплексор псевдо-телетайпов, который обрабатывает соединения со всех терминалов псевдо-телетайпов (PTS). Мультиплексор является ведущим устройством, а PTS — подчиненными. Мультиплексор общается с ядром через файл устройства, расположенный в /dev/ptmx.
Команда tty выводит имя специального файла устройства, который ваш ведомый псевдо-телетайп использует для взаимодействия с ведущим устройством. И это, по сути, номер вашего окна терминала.
Давайте посмотрим, какую информацию выведет команда tty для нашего окна терминала:
Как видите, мы подключены к специальному файлу устройства /dev/pts/1.
Наше окно терминала, представляющее собой программную эмуляцию телетайпа (TTY), подключено к мультиплексору псевдо-телетайпа как псевдо-телетайп (PTS) под номером 1.
Тихий режим
Опция -s (silent) приводит к тому, что команда tty перестает генерировать выходные данные:
Некоторые служебные значения, возвращаемые командой 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 году. С дальнейшим развитием вычислительных машин телетайпы, а затем и видеотерминалы отошли в прошлое. Однако подсистемы для работы с ними хоть и претерпели существенные изменения, остались в ядрах операционных систем.
Источник
Как проверить, какой tty я сейчас использую?
В нашей системе можно использовать 7 терминалов. tty7 основан на графическом интерфейсе.
Как я могу узнать, какой tty я сейчас использую?
как, tty1, tty2 . tty6?
Есть несколько способов узнать это. Я бы пошел с who am i (не who ) командой:
Когда я в графическом терминале, он будет возвращать что-то вроде:
В сеансе ssh с использованием графического терминала результат тот же, но вместо (: 0) я получу IP-адрес моей машины (192.168.xx). другие команды типа w , who , pgrep , ps и т.д. полезны тоже.
Например, чтобы узнать, на каком компьютере работает tty мой графический интерфейс:
Что в моем случае, потому что я не использую диспетчера дисплеев, как gdm или slim, он выдаст:
использование tty команду.
Если я прав, это ссылка:
Давайте сделаем шаг назад и начнем с путаницы: что такое tty? Первоначально tty был аббревиатурой телетайпа, который стал стеклянным телетайпом, который стал любым терминалом или соединением с ним, в частности, с последовательным портом (они все еще существуют, чаще всего / dev / ttyS0, / dev / ttyUSB0 и иногда / dev / ttyacm0). Тогда вы получили псевдо-тты и виртуальные тты. Старые руки Unix знакомы с псевдо-тисами, которые используются для удаленных терминалов (ssh и telnet), виртуальных терминалов (xterm и т. п.) и терминальных мультиплексоров (screen и tmux). У псевдотишей со временем были разные схемы именования, но текущая использует такие имена, как / dev / pts / 0. Виртуальные ttys, с другой стороны, связаны с виртуальными консолями, в частности, когда вы используете функциональные клавиши control и alt, вы переключаете виртуальные консоли, каждая из которых связана с виртуальным tty.
Так что, если вам нужно найти свой псевдотерминал (или виртуальный телетайп при использовании текстового режима), существуют всевозможные решения, например, who am i или ps ax|grep $$ это относительно легко сделать, так как существует несколько способов узнать это, так как псевдотерминал открывается на стандартном io. в большинстве случаев существуют и другие методы, которые работают даже при перенаправлении io. это также имеет то преимущество, что при использовании последовательных портов и виртуальных ttys все происходит правильно, если вы не используете графические эмуляторы терминала или терминальные мультиплексоры.
Но что, если вы хотите идентифицировать виртуальную консоль? sudo fgconsole может быть полезно для интерактивных случаев. Или то, что я делаю, это просто хожу по консолям, так как переключение обычно достаточно быстрое. Я не знаю ни о каком программном методе, который надежно работает в неинтерактивных или непрофильных случаях.
Давайте рассмотрим пример, который гарантированно не сможет ответить на виртуальную консоль когда-либо. На компьютере, с которым я сижу (альфа), есть Xserver, работающий на tty2 (: 1), у меня три открытых окна, два xterms и vncviewer (подключен к bravo: 2). На одном xterm работает экран, на другом — ssh charley. Экран имеет два открытых окна, ssh delta и who (кто правильно идентифицирует псевдотекст во втором столбце и предоставляет подсказку (:1:S0) в пятом столбце, который говорит нам, что псевдотетти подключен к первому сеансу экрана, который подключен ко второму X-серверу, но не дает никакой информации виртуальной консоли). Запуск, кто в течение любого сеанса SSH дает подсказку (alpha) который идентифицирует машину, с которой пришел ssh-сеанс, и который сравнительно хорош для удаленных сессий. Хотя имеется мало информации о том, что связано с псевдотерминалом (и абсолютно отсутствует виртуальная консоль или даже информация об удаленном tty), по крайней мере, удаленный хост идентифицирован. информация об экране может быть неправильной, поскольку сеансы экрана являются отсоединяемыми, а vnc вообще не предоставляет полезной информации, поскольку единственное различие между сеансом vnc и локальным сеансом — это номер дисплея. Во многих случаях вы можете предположить, что: 0 находится на tty7, но не всегда, и никогда на моем, так как у bravo вообще нет видеокарты, а: 0 — это сеанс vnc (который сбивает с толку, кто, так как считает, что это локальная консоль) и ни одна из машин не использует tty7 в качестве графического сеанса, потому что я (не просто для того, чтобы быть противоположным) сбрасываю журналы в tty7 (и tty5, tty6 и tty8 также) религиозные графические сессии в других местах. Но экран ожидания также может выступать в роли терминальной программы, позволяющей установить сеанс по последовательному кабелю. О чем сообщает такая сессия, когда кто запускается? Почему бы ничего, кроме последовательного порта, будь то через VNC, XTERM, SSH, экран и USB-последовательный адаптер все сразу или подключен к моему televideo.
Когда вы вошли в tty, он автоматически показывает, какой tty вы используете в первой строке.
Если при нажатии комбинации клавиш Ctrl + Alt + F3 отображается только черный экран, как вы написали в комментарии, существует альтернативный способ получить доступ к корневой оболочке при загрузке компьютера без нажатия Ctrl + Alt + F3 для вызова tty.
Сразу после появления заставки BIOS / UEFI во время загрузки с BIOS быстро нажмите и удерживайте Shift клавишу, которая вызовет меню GNU GRUB. (Если вы видите логотип Ubuntu, вы пропустили точку, в которой вы можете войти в меню GRUB.) С помощью UEFI нажмите (возможно, несколько раз) Esc клавишу, чтобы перейти в меню GRUB. Иногда заставка производителя является частью загрузчика Windows, поэтому, когда вы включаете компьютер, он переходит прямо к экрану GRUB, а затем нажимать Shift не нужно.
На первом фиолетовом экране GNU GRUB выберите Дополнительные параметры для Ubuntu с помощью клавиш ↑ и ↓ и нажмите Enter . Затем вам будет предложено другое фиолетовое меню меню GNU GRUB, в котором есть список параметров ядра.
Нажимайте клавишу со стрелкой вниз, пока не выберите вторую запись сверху (ту, в которой указан режим восстановления в описании), а затем нажмите Enter .
Теперь вы должны увидеть это меню восстановления:
С помощью клавиш со стрелками прокрутите вниз до корня и нажмите Enter .
Теперь вы должны увидеть приглашение root, что-то вроде этого:
На этом этапе у вас должна быть файловая система только для чтения. Вы должны перемонтировать его с разрешениями на запись:
Теперь вы можете запускать команды так же, как в терминале.
Источник