Оболочка - не терминал: что это и зачем нужно?
До того как значки и окна заполонили экраны наших мониторов, для взаимодействия с системой использовался командный интерпретатор (оболочка).
Оболочка — это специальная программа, которая предоставляет пользователю интерфейс для взаимодействия с ядром ОС.
$ whereis bash
bash: /usr/bin/bash
Она принимает понятные человеку команды и выполняет их через обращения к ядру - на его языке - через набор системных вызовов:
fork(),
execve() и т.д.
Вот мы вводим команду "
ls -l". Грубо говоря, как оболочка ее выполняет: создает дочерний процесс через вызов
fork(), выполняет программу с заданными аргументами через
execve() и дожидается ее завершения через
wait().
Терминалом (эмулятором терминала) можно назвать более высокоуровневую программу, которая запускает оболочку и позволяет нам видеть ввод и вывод информации. Он, по сути, является оберткой для оболочки.
Никто же нам не мешает просто удалить исполняемые файлы оболочек (
bash,
sh,
zsh) и запустить терминал... Так, конечно же, делать НЕ СТОИТ, но приложение, вероятно, запустится и выведет следующее сообщение:
Warning: Could not find an interactive shell to start
При этом мы все еще сможем вводить текст и видеть его в окошке. Без оболочки терминал уже не так полезен - он понятия не имеет, как выполнить ту же команду "
ls -l".
Также у оболочек может быть набор встроенных команд, которые могут отличаться от типа к типу. Помните, мы тут
alias рассматривали? Так вот, это и есть та самая, встроенная в оболочку команда:
$ type alias
alias is a shell builtin
Команды оболочки - не отдельные программы. За их выполнением оболочка не пойдет по каталогам, прописанным в переменной
$PATH:
/usr/bin,
/usr/sbin... К встроенным командам еще можно отнести:
cd,
case,
export,
pwd и т.д.
Linux++ | IT-Образование