Что такое оболочка Linux и что такое уровни оболочки?

click fraud protection

Переменная $ SHLVL сообщает вам, сколько у вас раковин. Если вас это смущает, стоит начать с самого начала.

Снимок экрана используемой команды Linux $ SHLVL

Что такое ракушка?

А оболочка принимает команды и передает эти команды базовой операционной системе для выполнения. В большинстве систем Linux программа оболочки называется БАШ (The Bourne Again Shell), но есть и другие, в том числе C Shell (tcsh) и KORN оболочка (кш).

Как получить доступ к оболочке Linux

Обычно, как пользователь, вы взаимодействуете с программой оболочки через эмуляция терминала программа, такая как XTerm, консоль, или gnome-terminal.

Если вы запустите диспетчер окон, например Открытая коробка или окружение рабочего стола, такое как GNOME или KDE, вы найдете эмулятор терминала либо из меню, либо через тире. Во многих системах ярлык CTRL + ALT + T открывает окно терминала.

Кроме того, вы можете переключиться на другой TTY (телетайп), который обеспечивает прямой доступ к оболочке командной строки. Вы можете сделать это, нажав CTRL + ALT + F1 или CTRL + ALT + F2.

Что такое уровень оболочки?

Когда вы запускаете команду в оболочке, она выполняется на уровне оболочки. Внутри оболочки вы можете открыть другую оболочку, что делает ее подоболочкой той оболочки, которая ее открыла. Следовательно, родительская оболочка считается оболочкой уровня 1, а дочерняя оболочка - оболочкой уровня 2.

Как отобразить уровень оболочки

Способ узнать, на каком уровне оболочки вы работаете, - использовать переменную $ SHLVL. Чтобы увидеть текущий уровень оболочки, введите следующее:

echo $ SHLVL. 

Когда вы запускаете указанную выше команду в окне терминала, возвращается результат 2. Однако, если вы запустите ту же команду, используя tty, результат будет 1. Терминал tty не запускает среду рабочего стола и является оболочкой уровня 1.

Почему это так? Среда рабочего стола, в которой вы работаете, запускается поверх оболочки. Эта оболочка первого уровня. Любое окно терминала, которое вы открываете из этой среды рабочего стола, является дочерним по отношению к оболочке, открывшей среду рабочего стола. Следовательно, уровень оболочки не может начинаться с любого номера, кроме 2.

Как создать подоболочки

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

echo $ SHLVL. 

Когда вы запускаете эту команду из окна терминала, минимальный уровень оболочки равен 2.

Введите в окне терминала следующее:

ш. 

Команда sh запускает интерактивную оболочку. Это означает, что вы используете оболочку внутри оболочки или подоболочки.

Если вы наберете это снова:

echo $ SHLVL. 

Вы видите, что уровень оболочки установлен на 3. Выполнение команды sh из подоболочки открывает подоболочку подоболочки, поэтому уровень оболочки находится на уровне 4.

Почему так важен уровень раковины?

Уровень оболочки важен, когда вы думаете об объеме переменных в ваших сценариях. Для простого примера:

собака = Мэйси
эхо $ собака.

Если вы запустите указанную выше команду в оболочке, слово Мэйси отображается в окне терминала.

Чтобы открыть новую оболочку, введите следующее:

ш. 

Когда вы запустите эту команду, вы увидите, что ничего не возвращается:

эхо $ собака. 

Это потому, что переменная $ dog доступна только на уровне оболочки 2. Если вы наберете exit, чтобы выйти из подоболочки и запустить эхо $ собака снова слово Мэйси снова отображается.

Также стоит подумать о поведении глобальных переменных в оболочке.

Откройте новое окно терминала и введите следующее:

экспорт собака = Мэйси
эхо $ собака.

Как и ожидалось, слово Мэйси отображает. Затем откройте подоболочку и введите эхо $ собака опять таки. На этот раз слово Мэйси отображается, даже если вы находитесь в подоболочке. Причина в том, что команда экспорта сделала переменную $ dog глобальной. Изменение переменной $ dog в подоболочке, даже если вы используете команду экспорта, не влияет на ее родительские оболочки.

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