ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Общие сведения о конфигурации оболочки Bash при запуске

Bash Heredoc

В течение многих лет оболочка Bash была неотъемлемой частью многих дистрибутивов Linux. Вначале Bash был выбран в качестве официальной оболочки GNU, потому что он был хорошо известен, достаточно стабилен и предлагал приличный набор функций.

Сегодня ситуация несколько иная – Bash по-прежнему присутствует повсюду как программный пакет, но его заменили альтернативы в стандартной установке. К ним относятся, например, оболочка Debian Almquist (Dash) (для Debian GNU/Linux) или Zsh (для GRML). В хорошо известных дистрибутивах Ubuntu, Fedora, Arch Linux и Linux Mint Bash до сих пор оставался стандартной оболочкой.

Очень полезно понимать запуск Bash и знать, как его правильно настроить. Это включает настройку среды оболочки, например, установку переменной $PATH, настройку внешнего вида приглашения оболочки и создание псевдонимов. Также мы рассмотрим два файла .bashrc и .bash_profile, которые читаются при запуске. Соответствующие знания проверяются на Экзамене 1 Сертификации профессионального института Linux.

 

Сравнение интерактивного входа в систему и неинтерактивной пакетной оболочки

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

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

 

Интерактивная оболочка входа

Этот режим относится к входу в ваш компьютер на локальном компьютере с использованием терминала от tty1 до tty4 (в зависимости от вашей установки – терминалов может быть больше или меньше). Кроме того, этот режим охватывает удаленный вход в компьютер, например, через Secure Shell (ssh) следующим образом:

$ ssh user@remote-system

$ ssh user@remote-system remote-command

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

$ ssh localhost uptime

user@localhost's password:

11:58:49 up 23 days, 11:41,  6 users,  load average: 0,10, 0,14, 0,20

$

Чтобы узнать, вошли ли вы в свой компьютер с помощью оболочки входа, введите следующую команду echo в своем терминале:

$ echo $0

-bash

$

Для оболочки входа в систему вывод начинается со знака «-», за которым следует имя оболочки, что в нашем случае дает «-bash». Для оболочки без входа в систему выводом является просто имя оболочки. В приведенном ниже примере это показано для двух команд echo $0, а время работы передается ssh в виде строкового параметра:

$ ssh localhost "echo $0; uptime"

user@localhost's password:

bash

11:58:49 up 23 days, 11:41,  6 users,  load average: 0,10, 0,14, 0,20

$

В качестве альтернативы используйте встроенную команду shopt следующим образом:

$ shopt login_shell

login_shell off

$

Для оболочки без входа в систему команда возвращает «off», а для оболочки входа – «on».

Что касается конфигурации для этого типа оболочки, учитываются три файла. Это /etc/profile, ~/.profile и ~/.bash_profile.

 

Интерактивная оболочка без входа в систему

Этот режим описывает открытие нового терминала, например xterm или Gnome Terminal, и выполнение в нем оболочки. В этом режиме читаются два файла /etc/bashrc и ~/.bashrc.

 

Неинтерактивная оболочка без входа в систему

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

. /local-script.sh

Неинтерактивная оболочка входа

Этот режим охватывает вход в компьютер с удаленного компьютера, например, через Secure Shell (ssh). Сценарий оболочки local-script.sh сначала запускается локально, а его выходные данные используются как входные данные для ssh.

./local-script.sh | ssh user@remote-system

Запуск ssh без дополнительных команд запускает оболочку входа в систему в удаленной системе. Если устройство ввода (stdin) ssh не является терминальным, ssh запускает неинтерактивную оболочку и интерпретирует вывод сценария как команды, которые должны выполняться в удаленной системе. В приведенном ниже примере выполняется команда uptime в удаленной системе:

$ echo "uptime" | ssh localhost

Pseudo-terminal will not be allocated because stdin is not a terminal.

frank@localhost's password:

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

You have new mail.

11:58:49 up 23 days, 11:41,  6 users,  load average: 0,10, 0,14, 0,20

$

Интересно, что ssh жалуется на то, что stdin не является терминалом, и показывает сообщение дня (motd), которое хранится в глобальном файле конфигурации /etc/motd. Чтобы сократить вывод терминала, добавьте параметр «sh» в качестве параметра команды ssh, как показано ниже. В результате сначала открывается оболочка, и сначала выполняются две команды без отображения motd.

$ echo "uptime" | ssh localhost sh

frank@localhost's password:

12:03:39 up 23 days, 11:46,  6 users,  load average: 0,07, 0,09, 0,16

$$

Далее мы рассмотрим различные файлы конфигурации для Bash.

 

Файлы запуска Bash

Различные режимы Bash определяют, какие файлы конфигурации читаются при запуске:

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

Общие сведения о конфигурации оболочки Bash при запуске

изображение : config-path.png
текст: Процесс оценки конфигурации Bash

 

Объяснение различных файлов конфигурации

Для файлов, описанных ниже, не существует общего набора правил, определяющего, какой параметр хранить в каком файле (кроме глобальных параметров и локальных параметров). Более того, порядок чтения файлов конфигурации разработан с учетом гибкости, так что смена используемой оболочки гарантирует, что вы все еще можете использовать свою систему Linux. Вот почему используются несколько файлов, которые настраивают одно и то же.

 

/etc/profile

Этот файл используется оболочкой Bourne (sh), а также оболочками, совместимыми с Bourne, такими как Bash, Ash и Ksh. Он содержит записи по умолчанию для переменных среды для всех пользователей, которые входят в систему в интерактивном режиме. Например, это влияет на $PATH и дизайн приглашения для обычных пользователей, а также пользователя с именем «root». В приведенном ниже примере показана часть /etc/profile из Debian GNU/Linux.

setuserpath(){

# Общие каталоги для исполняемых файлов для всех пользователей

PATH="/usr/local/bin:/usr/bin:/bin"

# Тест для корневого пользователя для добавления в программы системного администрирования

if [ "`id -u`" -eq 0 ]; then

PATH="/usr/local/sbin:/usr/sbin:/sbin:$PATH"

else

PATH="/usr/local/games:/usr/games:$PATH"

fi

export PATH

}

setuserpath()

# PS1-это основная строка командной строки

if [ "$PS1" ]; then

if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then

# Файл bash.bashrc уже устанавливает PS1 по умолчанию.

# PS1='\h:\w\$ '

if [ -f /etc/bash.bashrc ]; then

. /etc/bash.bashrc

fi

else

if [ "`id -u`" -eq 0 ]; then

PS1='# '

else

PS1='$ '

fi

fi

fi

Другие файлы конфигурации можно сохранить в каталоге /etc/profile.d. Они загружаются в конфигурацию Bash, как только читается /etc/profile.

 

~/.bash_profile

Этот локальный файл конфигурации считывается и выполняется, когда Bash вызывается как интерактивная оболочка входа. Он содержит команды, которые следует запускать только один раз, например настройку переменной среды $PATH.

Очень часто ~/.bash_profile заполняют строками, как показано ниже, которые являются источником файла .bashrc. Это означает, что каждый раз, когда вы входите в терминал, читается содержимое вашей локальной конфигурации Bash.

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

Если файл ~/.bash_profile существует, то Bash пропустит чтение из ~/.bash_login (или ~/.profile).

~/.bash_login

 

Два файла ~/.bash_profile и ~/.bash_login аналогичны.

~/.profile

 

Большинство дистрибутивов Linux используют этот файл вместо ~/.bash_profile. Он используется для поиска локального файла .bashrc и расширения переменной $PATH.

# при запуске bash

if [ -n "$BASH_VERSION" ]; then

# include .bashrc, если он существует

if [ -f "$HOME/.bashrc" ]; then

. "$HOME/.bashrc"

fi

fi

# установить PATH, чтобы он включал личную корзину пользователя, если она существует

if [ -d "$HOME/bin" ] ; then

PATH="$HOME/bin:$PATH"

fi

Как правило, ~/.profile читается всеми оболочками. Если существует ~/.bash_profile или ~/.bash_login, Bash не будет читать этот файл.

 

/etc/bash.bashrc и ~/.bashrc

Этот файл содержит конфигурацию Bash и обрабатывает локальные псевдонимы, ограничения истории, хранящиеся в .bash_history (см. Ниже), и завершение Bash.

# не помещайте в историю повторяющиеся строки или строки, начинающиеся с пробела.

# Дополнительные параметры см. В bash (1)

HISTCONTROL=ignoreboth

# добавьте к файлу истории, не перезаписывайте его

shopt -s histappend

# для установки длины истории см. HISTSIZE и HISTFILESIZE в bash(1)

HISTSIZE=1000

HISTFILESIZE=2000

Что настраивать в каком файле

Как вы уже узнали, для настройки Bash существует не один файл, а группа файлов. Эти файлы существуют просто по историческим причинам – особенно из-за того, как разные оболочки развивались и заимствовали полезные функции друг у друга. Кроме того, нет никаких строгих правил, которые

определить, какой файл предназначен для хранения определенной части настройки. Вот рекомендации, которые у нас есть для вас (на основе TLDP):

Также имейте в виду, что Linux спроектирован таким образом, чтобы быть очень гибким: если какой-либо из файлов запуска, упомянутых выше, отсутствует в вашей системе, вы можете его создать.

Exit mobile version