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

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

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

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

Сейчас терминалы и консоли реализованы программно: это могут быть виртуальные консоли при непосредственной работе за сервером (например, через монитор и клавиатуру) или эмуляторы терминала при удаленном подключении по 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, то внутри этой сессии может быть использована другая оболочка — та, которая настроена на сервере.