Перейти к основному содержимому
Терминал и командная оболочка

Терминал и командная оболочка

Терминал — это интерфейс, обеспечивающий ввод текста с клавиатуры и вывод его на экран. Иногда его называют консолью, когда речь идет о прямом физическом доступе к серверу (клавиатура и монитор сервера). Исторически это термины означали разные устройства:

  • консоль была частью условного мейфрейма, обеспечивающей прямой доступ к управлению оборудованием;
  • терминал был отдельным подсоединяемым устройством для удаленного управления сервером.

Сейчас терминалы и консоли реализованы программно: это могут быть виртуальные консоли при непосредственной работе за сервером (например, через монитор и клавиатуру) или эмуляторы терминала при удаленном подключении по SSH.

В современных серверных ОС и то, и другое в конечном счете работает через механизм TTY.

TTY

TTY (сокращение от Teletypewriter) — это подсистема ядра операционной системы, обеспечивающая интерфейс для обмена текстовой информацией между пользователем и программами.

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

Основная задача TTY — организовать канал передачи символов между устройством ввода пользователя и процессами в системе. Устройствами ввода могут быть, например клавиатура, мышь или сетевое соединение.

Функции TTY

Построчный ввод и редактирование

TTY поддерживает базовые операции редактирования строки (удаление символа, очистка строки) до того, как данные будут переданы приложению. Современные интерактивные программы (Bash, Nano) часто обрабатывают ввод самостоятельно, но эта функциональность присутствует и в ядре.

Управление сигналами

Специальные последовательности клавиш преобразуются в сигналы, которые ядро отправляет процессу, взаимодействующему с данным терминалом.

Примеры таких сигналов в справке ниже.

Виртуальные консоли

При физическом доступе к серверу, то есть непосредственно через подключённые монитор и клавиатуру, используются виртуальные консоли, обозначаемые как /dev/tty1, /dev/tty2 и т. д. Этот способ доступа применяется преимущественно при начальной настройке сервера или когда сетевое подключение недоступно.

Удаленное подключение по SSH

SSH (Secure Shell) — это сетевой протокол прикладного уровня, который позволяет удаленно управлять операционной системой и передавать файлы по зашифрованному каналу посредством утилит ssh.d на сервере и ssh на клиенте.

При установке SSH-соединения система создает для сессии псевдотерминал (PTY). Псевдотерминалы отображаются в каталоге /dev/pts/ и имеют имена вида /dev/pts/0, /dev/pts/1 и т. д. Нумерация динамическая: каждое новое подключение получает следующий свободный номер.

Псевдотерминалы функционально эквивалентны виртуальным консолям: они также поддерживают все возможности терминального ввода‑вывода, управление сигналами, редактирование строки и т. д. Однако, в отличие от виртуальных консолей, они не привязаны к физическому переключению экранов и существуют только на время SSH-сессии.

Справка по управлению терминалами

Определить, какой терминал используется в данный момент, можно командой tty.

Переключение между ними осуществляется комбинациями Alt+F1, Alt+F2 и т. д. (иногда совместно с Ctrl, в зависимости от настроек).

Примеры сигналов

КомбинацияСигналОписание
Ctrl+CSIGINTпрервать процесс
Ctrl+ZSIGTSTPотправить процесс в фоновый режим, не завершая работы
Ctrl+\SIGQUITзавершить запущенный процесс принудительно
Ctrl+SXOFFприостановить вывод
Ctrl+QXONвозобновить вывод

Командная оболочка

Командная оболочка (shell) — это программа-интерпретатор, обеспечивающая интерфейс для взаимодействия пользователя с операционной системой. Она принимает команды, введенные с клавиатуры или из файла сценария, интерпретирует их и инициирует выполнение соответствующих программ. Оболочка выступает промежуточным звеном между пользователем и ядром ОС.

В SELECTOS по умолчанию установлена оболочка Bash, обеспечивающая баланс между функциональностью, производительностью и совместимостью со сценариями для серверных операционных систем.

Функции командой оболочки

Исполнение команд

Запуск встроенных команд оболочки и внешних исполняемых файлов, доступных в системе.

Управление процессами

Запуск программ в фоновом режиме (&), перемещение задач между передним и задним планом (fg, bg).

Перенаправление ввода-вывода

Перенаправление стандартных потоков (stdin, stdout, stderr) в файлы или из файлов с помощью символов >, >>, <, 2> и др.

Конвейеры (pipes)

Объединение нескольких команд в цепочку, где вывод одной команды передается на ввод следующей через символ |.

Автоматизация

Поддержка переменных, условных операторов (if, case), циклов (for, while), функций и других конструкций, что позволяет создавать сложные сценарии для автоматизации задач.

Подстановка и автодополнение

Автоматическое дополнение имен команд, файлов и переменных при нажатии клавиши Tab, а также подстановка результатов выполнения команд ($(command))

История команд

Сохранение ранее введенных команд и возможность их повторного вызова (обычно через history и клавиши стрелок).

Переменные окружения

Оболочка управляет переменными окружения (PATH, HOME, USER и др.), которые могут быть использованы командами и программами. Просмотреть текущие переменные можно командой env или printenv.

Инициализация

При входе в систему оболочка выполняет файлы инициализации (например, .bashrc, .profile, .bash_profile), в которых пользователь может задать собственные настройки, сокращения для команд и функции.

Эти функции реализованы с помощью встроенных команд, о которых можно узнать подробнее в справке или в разделе «SHELL BUILTIN COMMANDS» руководства man bash.

примечание

Где заканчивается TTY и начинается командная оболочка

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

То, какая именно командная оболочка запустится (Bash, Zsh, Sh, Fish) — зависит от настроек пользователя внутри конкретной операционной системы.

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