Терминал и оболочка — разные вещи
Терминал и оболочка — не одно и то же, хотя в разговоре их почти всегда смешивают. Разница короткая:
- терминал — устройство ввода-вывода: принимает нажатия, показывает текст;
- оболочка (shell) — программа, которая читает строки, понимает их и запускает другие программы.
Оболочка ничего не показывает на экране напрямую: она пишет в терминал. Терминал ничего не понимает в командах: он передаёт нажатия оболочке. Одна без другой работать может — обе без терминала тоже.
Кто здесь кто
| Терминал | Оболочка | |
|---|---|---|
| Что это | Устройство или эмулятор | Обычная программа |
| Что делает | Ввод и вывод | Читает команды, запускает программы, следит за заданиями |
| Примеры | gnome-terminal, konsole, xterm, tmux |
bash, zsh, fish, sh |
| Где живёт | /dev/pts/0, /dev/tty1 |
/bin/bash — файл на диске |
| Знает ли о командах | Нет | Да |
Оболочка — такая же программа, как ls или vim. Она отличается не природой, а работой: читает строку, разбирает её на слова, подставляет подстановки и запускает то, что вы попросили.
Как увидеть разницу своими глазами
# это терминал — устройство
$ tty
/dev/pts/0
# это оболочка — программа, прямо сейчас
$ echo "$0"
/bin/bash
$ ps -o comm= -p $$
bash
# полный путь оболочки для входа в систему (не обязательно текущей)
$ echo "$SHELL"
/bin/bash
А так видно, что оболочке терминал не обязателен — она отлично работает и без него:
$ bash -c 'echo привет из оболочки без терминала'
привет из оболочки без терминала
И наоборот: терминал не обязан запускать оболочку. Если программа запущена как командная оболочка для входа, терминал будет отдавать нажатия ей, а не bash.
Почему их путают
Три причины, и все понятные:
- Оболочка стартует автоматически. Открывая окно, вы обычно видите уже готовое приглашение: терминал запустил оболочку, и границы между ними не видно.
- Одно окно, одно название. В быту «консоль», «терминал», «командная строка» — это «то чёрное окно», внутри которого всё и происходит.
- Настройки переплетены. Цвета и шрифт задаёт терминал,
PATHи приглашение — оболочка, а ищут и то и другое в одном месте настроек.
Есть и четвёртая, техническая: «консоль» в документации означает конкретную вещь — физический терминал машины (tty1), а в разговоре — что угодно. Из-за этого фраза «зайти в консоль» у разных людей означает разные действия.
Практическое следствие
Разделение видно, когда что-то не работает:
- оболочка не запускается, а приглашение есть:
chsh -s /bin/bash, проверить оболочку в/etc/passwd; - терминал не отвечает (не видно ввода, ерунда на экране): помогает
resetилиstty sane, потому что сбились настройки терминала, а оболочка тут ни при чём; - скрипт ведёт себя не так, как в окне: у него нет терминала, и оболочка работает в неинтерактивном режиме — это уже другой разговор.
Отсюда и полезная привычка: когда что-то «не работает в консоли», первым делом понять, что именно сломалось — терминал (вывод и ввод), оболочка (разбор строки) или сама запущенная программа.
Источники
man 1 bash— что такое оболочка, её режимы (интерактивный и нет) и запуск команд.man 4 tty,man 4 pts— терминал и псевдотерминал как устройства.man 5 passwd,man 1 chsh— откуда система берёт оболочку для пользователя.man 1 stty,man 1 reset— настройки терминала и восстановление после сбоя вывода.- Выводы
tty,echo $0,ps -o comm= -p $$— с рабочей системы (проверено 19.10.2026).
Что ещё не проверено
- Названия терминалов и оболочек в таблице — примеры, а не полный список:
zsh,fish,dash,kshвстречаются так же часто. - Про
resetиstty saneсказано по документации: намеренно ломать вывод терминала, чтобы проверить восстановление, я не стал — на рабочей машине это лишний риск.
Комментарии
Пока комментариев нет.