Что такое 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 для нашего окна терминала:
Ответ показывает, что мы подключены к файлу устройства по адресу /dev/pts/2.
Наше окно терминала, которое представляет собой программную эмуляцию телетайпа (TTY), взаимодействует с мультиплексором псевдотелетайпа как псевдотелетайп (PTS). И его номер два.
Тихий вариант
Параметр -s (без вывода сообщений) заставляет tty не генерировать вывода.
Однако он даёт выходное значение:
- 0: если стандартный ввод поступает с устройства TTY, эмулируемого или физического.
- 1: если стандартный ввод не поступает с устройства TTY.
- 2: Синтаксическая ошибка, использовались неверные параметры командной строки.
- 3: Произошла ошибка записи.
Это, вероятно, будет наиболее полезно в сценариях Bash. Но даже в командной строке мы можем продемонстрировать, как выполнить команду, только если вы работаете в окне терминала (TTY или сеанс PTS).
Поскольку мы работаем в сеансе TTY, наш код выхода равен 0, и выполняется вторая команда.
Команда who
Другие команды могут показать ваш номер TTY. Команда who отобразит информацию обо всех вошедших в систему пользователях, включая вас.
Алек и Мэри удаленно подключены к компьютеру с Linux. Они подключены к PTS один и два.
Пользователь dave показан как подключенный к «:0». Это экран и клавиатура, физически подключённые к компьютеру.
Несмотря на то, что экран и клавиатура являются аппаратными устройствами, они всё равно подключены к мультиплексору через файл устройства. tty показывает, что это /dev/pts/2.
Доступ к телетайпу
Вы можете получить доступ к полноэкранному сеансу 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-подобных операционных систем.
Работа в терминале Linux для начинающих
Все новички Linux уже, наверное, слышали про терминал, или как его еще называют командную строку. Ведь присутствие и сложность терминала — это один из основных аргументов оппонентов Linux. Возможно, вы уже сталкивались с командной строкой в Windows на практике и уже знаете что это такое.
Действительно, в операционной системе Linux есть терминал, где вы можете выполнять нужные вам команды, чтобы очень эффективно управлять своей системой. Но это вовсе не обязательно, многим вполне достаточно графического интерфейса. Сейчас использование терминала отошло на второй план, но он остается основным средством для доступа к удаленным серверам и инструментом для профессионалов.
Терминал Linux намного интереснее, чем командная строка Windows и в этой статье будет подробно рассмотрена работа в терминале Linux для начинающих, а также что такое терминал Linux и собственно, что он из себя представляет.
Что такое терминал Linux?
Применение терминала началось очень давно. Еще до того как была создана DOS и не существовало никакого графического интерфейса. В далеких восьмидесятых годах операционная система Unix только начинала развиваться. Пользователям нужно каким-то образом взаимодействовать с системой и самый простой способ — это использование команд. Вы вводите команду, система вам возвращает ответ.
С тех пор, такой способ ввода использовался во многих системах, в том числе DOS и OS/2 от Apple, пока не был придуман графический интерфейс. Затем текстовый режим терминала был успешно вытеснен, но его до сих пор продолжают использовать там, где это нужно.
Выше, под терминалом мы понимали то место, где можно вводить команды и получать на них ответ от компьютера. Это может быть текстовый режим Linux или же открытое в графическом режиме окно терминала. В Linux часто встречаются слова: консоль, терминал, командная строка, командная оболочка, tty, эмулятор терминала. Все они относятся к терминалу, но означают немного разные вещи. Перед тем как перейти дальше давайте разберемся с терминами, чтобы называть все своими именами.
Под терминалом принято понимать окружение, где можно вводить команды и получать на них ответ, это может быть физический терминал или терминал на компьютере.
Консоль — это физическое оборудование для управления сервером. Когда к серверу нет доступа из сети, для управления им можно использовать только консоль.
TTY — это файл устройства, который создается ядром и предоставляет доступ к терминалу для программ. Это могут быть файлы /dev/tty для постоянных текстовых терминалов и /dev/pts/* для эмуляторов терминалов. Вы можете выполнить команду или отправить сообщение просто записав данные в этот файл, и также получить результат, прочитав данные из этого файла.
Эмулятор терминала — это графическая программа, которая предоставляет вам доступ к tty или pts терминалу. Например, Gnome Terminal, Konsole, Terminix, Xterm и многие другие.
Командная оболочка — устройство tty занимается только передачей и приемом данных, но все эти данные должен еще кто-то обрабатывать, выполнять команды, интерпретировать их синтаксис. Командных оболочек достаточно много, это bash, sh, zsh, ksh и другие, но чаще всего применяется Bash.
Ну и командная строка — это то место куда вы будете вводить свои команды, приглашение терминала для ввода.
Теперь, когда мы разобрались что такое терминал Linux и знаем все основные принципы, перейдем к практике работы с ним.
Как открыть терминал Linux?
Есть несколько способов получить доступ к терминалу. Ваша система инициализации по умолчанию создает 12 виртуальных терминалов. В одном из них — обычно седьмом, запущена ваша графическая оболочка, но все другие могут быть свободно использованы. Для переключения между терминалами можно использовать сочетания Ctrl+Alt+F1-F12. Для авторизации нужно будет ввести логин и пароль.
Это текстовые терминалы без графического интерфейса, в них может быть не совсем удобно работать, но, зато такие терминалы будут полезны, если графический интерфейс не работает.
Второй способ позволяет открыть виртуальный терминал прямо в графическом интерфейсе с помощью эмулятора терминала. Эмулятор терминала linux работает с файлами в каталоге /dev/pts/* и еще называется псевдотерминалом, потому что не использует tty.
В Ubuntu вы можете запустить терминал linux нажав сочетание клавиш Ctrl+Alt+T:
Также его можно найти в меню приложений Dash:
Как видите, открыть командную строку в linux очень просто.
Выполнение команд в терминале
Рассмотрим более подробно терминал Linux для начинающих. Как я уже говорил, терминал и файлы устройств tty отвечают только за передачу данных. За обработку команд отвечает командная оболочка, которой и передаются полученные от пользователя данные.
Вы можете набрать что-либо и убедиться, что это работает:
Чтобы выполнить команду достаточно написать ее и нажать Enter.
Более того, командная оболочка Bash поддерживает автодополнение, поэтому вы можете написать половину команды, нажать TAB и если на такие символы начинается только одна команда, то она будет автоматически дополнена, если же нет, то вы можете нажать два раза TAB, чтобы посмотреть возможные варианты.
Точно такая же схема работает для путей к файлам и параметров команд:
В Windows вы о таком и мечтать не могли. Чтобы выполнить команду можно указать имя ее исполняемого файла или полный путь к нему, относительно корневой или любой другой папки. Важно заметить, что командная оболочка Linux, в отличие от Windows, чувствительна к регистру, а поэтому будьте внимательны при вводе команд и их параметров.
По умолчанию работа в командной строке linux может выполняться с помощью большого количества команд, многие из них, например, для перемещения по каталогам, просмотра содержимого, установки ПО поставляются вместе с системой.
Экземпляр запущенной команды называется процесс. Когда в терминале Linux выполняется одна команда нам нужно подождать ее завершения, чтобы выполнить следующую.
Команды могут выполняться без параметров, что мы видели выше, или же с параметрами, которые позволяют указать данные, с которыми будет работать программа, также есть опции, с помощью которых можно настроить поведение. Большинство стандартных утилит придерживаются такого синтаксиса:
$ команда опции параметр1 параметр2.
Опции часто необязательны и уточняют тот или иной аспект работы программы. Они записываются в форме черточка и символ или двойная черточка и слово. Например -o или —output. Приведем пример для команды ls. Без опций и параметров:
С параметром, указывающим какую папку посмотреть:
С опцией -l, вывести в виде списка:
В с опцией и параметром:
Можно комбинировать две опции:
В основном, это все, что нужно знать про команды, чтобы продуктивно их использовать. Еще можно было бы рассказать про объединение команд и перенаправление вывода одной команды в другую, но это уже отдельная тема.
Выводы
В этой статье была рассмотрена работа в терминале linux для начинающих. Командная строка Linux может показаться сначала очень сложной, но это совсем не так, она намного проще в использовании чем в Windows и позволяет управлять системой более эффективно. Надеюсь, эта статья пролила немного света на эту очень большую тему.