Стартовые файлы оболочки Bash

Программа оболочка /bin/bash (в дальнейшем называемая просто "оболочка") использует набор стартовых файлов для помощи создания окружения.Каждый файл имеет специфическое использование. Файлы в директории /etc обычно предоставляют глобальные установки. Если аналогичные файлы присутствуют в вашей домашней директории, то они могут заменить глобальные установки.

Интерактивнвя регистрация оболочки запускается после успешного входа, используя /bin/login, который читает файл /etc/passwd. Эта оболочка во время загрузки читает /etc/profile и его персональный эквивалент ~/.bash_profile.

Интерактивнвя нерегистрированная оболочка запускается из командной строки (т.е. [prompt]$/bin/bash) или командой /bin/su. Интерактивнвя нерегистрированная оболочка так же запускается вместе с программами терминалов, такими как xterm или konsole в графической среде. Этот тип оболочек копирует основное окружение и затем читает пользовательский файл ~/.bashrc для дополнительных инструкций конфигурации.

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

Файл ~/.bash_logout не используется для вызова оболочки. Он читается и выполняется при появлении пользователя после интерактивной регистрации.

К стандартным файлам относится /etc/bashrc, вызываемый из пользовательского ~/.bashrc для системной инициализации нерегистрированных оболочек.

Для большей информации смотрите info bash -- Ноды: Стартовые файлы Bash и интерактивные оболочки.

/etc/profile

Здесь приведен базовый /etc/profile. Этот файл запускается для установки некоторых помагающих функций и базовых параметров. Он описывает некоторые параметры истории команд bash и в целях безопасности убирает поддержку постоянного файла истории для пользователя roor. Он так же устанавливает вид системного приглашения. Затем он вызывает маленький скрипт в директории /etc/profile.d для предоставления большей инициализации.

Для большей информации по escape-последовательностям, которые вы можете использовать для вашего системного приглашения (т.е. переменной окружения PS1), обратитесь к info bash -- Нода: Печать системного приглашения.

cat > /etc/profile << "EOF" # Begin /etc/profile # Written for Beyond Linux From Scratch # by James Robertson <jameswrobertson@earthlink.net> # modifications by Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg> # Общесистемные переменные окружения и запускаемые программы. # Общесистемные псевдонимы и функции должны быть в /etc/bashrc. Личные # переменные окружения и запускаемые программы должны быть в # ~/.bash_profile. Личные псевдонимы и функции должны быть в # ~/.bashrc. # Функции, помагающие в управлении путями. Вторым агрументом является имя # переменной ПУТЬ для изменения (по умолчанию: PATH) pathremove () { local IFS=':' local NEWPATH local DIR local PATHVARIABLE=${2:-PATH} for DIR in ${!PATHVARIABLE} ; do if [ "$DIR" != "$1" ] ; then NEWPATH=${NEWPATH:+$NEWPATH:}$DIR fi done export $PATHVARIABLE="$NEWPATH" } pathprepend () { pathremove $1 $2 local PATHVARIABLE=${2:-PATH} export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}" } pathappend () { pathremove $1 $2 local PATHVARIABLE=${2:-PATH} export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1" } # Установка начального пути export PATH=/bin:/usr/bin if [ $EUID -eq 0 ] ; then pathappend /sbin:/usr/sbin unset HISTFILE fi # Установка некоторых переменных окружения. export HISTSIZE=1000 export HISTIGNORE="&:[bf]g:exit" #export PS1="[\u@\h \w]\\$ " export PS1='\u@\h:\w\$ ' for script in /etc/profile.d/*.sh ; do if [ -r $script ] ; then . $script fi done # Очистка unset pathremove pathprepend pathappend # End /etc/profile EOF

Директория /etc/profile.d

Теперь создадим директорию /etc/profile.d, в которой размещены индивидуальные скрипты инициализации.

install --directory --mode=0755 --owner=root --group=root /etc/profile.d

/etc/profile.d/dircolors.sh

Этот скрипт использует файлы ~/.dircolors и /etc/dircolors для управления цветом файлов в листинге директории. Они раскрашивают вывод таких команд, как ls --color. Разъяснение по инициализации этих файлов находится в конце этого раздела.

cat > /etc/profile.d/dircolors.sh << "EOF" # Настройки /bin/ls для поддержки цвета, псевдоним находится в /etc/bashrc. if [ -f "/etc/dircolors" ] ; then eval $(dircolors -b /etc/dircolors) if [ -f "$HOME/.dircolors" ] ; then eval $(dircolors -b $HOME/.dircolors) fi fi alias ls='ls --color=auto' EOF

/etc/profile.d/extrapaths.sh

Этот скрипт добавляет некоторые полезные пути к переменным окружения PATH и PKG_CONFIG_PATH. Если хотите, вы можете раскоментировать последний раздел для размещения точки в конце вашего пути. Это позволит исполняемым файлам в текущей рабочей директории запускаться без указания ./, хотя мы предупреждаем, что обычно это связано с риском для безопасности.

cat > /etc/profile.d/extrapaths.sh << "EOF" if [ -d /usr/local/lib/pkgconfig ] ; then pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH fi if [ -d /usr/local/bin ]; then pathprepend /usr/local/bin fi if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then pathprepend /usr/local/sbin fi for directory in $(find /opt/*/lib/pkgconfig -type d 2>/dev/null); do pathappend $directory PKG_CONFIG_PATH done for directory in $(find /opt/*/bin -type d 2>/dev/null); do pathappend $directory done if [ -d ~/bin ]; then pathprepend ~/bin fi #if [ $EUID -gt 99 ]; then # pathappend . #fi EOF

/etc/profile.d/readline.sh

Этот скрипт настраивает файл конфигурации inputrc. Если пользователь не имеет индивидуальных установок, он использует глобальный файл.

cat > /etc/profile.d/readline.sh << "EOF" # Настройка переменной окружения INPUTRC. if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then INPUTRC=/etc/inputrc fi export INPUTRC EOF

/etc/profile.d/tinker-term.sh

Некоторые приложения требуют описания установки TERM для поддержки цвета.

cat > /etc/profile.d/tinker-term.sh << "EOF" # Это поправляет значение TERM для удовлетворения некоторых # приложений и мы действительно можем отображать цвет в их окне. if [ -n "$COLORTERM" ]; then export TERM=xterm-color fi if [ "$TERM" = "xterm" ]; then export TERM=xterm-color fi EOF

/etc/profile.d/umask.sh

Установка значения umask важна для безопасности. Здесь права доступа для записи группы по умолчанию выключены для пользователей системы и когда имена пользователя и группы не совпадают.

cat > /etc/profile.d/umask.sh << "EOF" # По умолчанию мы хотим получить установленный umask. if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then umask 002 else umask 022 fi EOF

/etc/profile.d/X.sh

Если X установлены, переменные PATH и PKG_CONFIG_PATH так же обновляются.

cat > /etc/profile.d/X.sh << "EOF" if [ -x /usr/X11R6/bin/X ]; then pathappend /usr/X11R6/bin fi if [ -d /usr/X11R6/lib/pkgconfig ] ; then pathappend /usr/X11R6/lib/pkgconfig PKG_CONFIG_PATH fi EOF

/etc/profile.d/xterm-titlebars.sh

Этот скрипт показывает пример другого пути установки системного приглашения. Обычная переменная PS1 дополнена PROMPT_COMMAND. Если переменная установлена, значение PROMPT_COMMAND выполняется как команда перед выводом каждого первичного приглашения.

cat > /etc/profile.d/xterm-titlebars.sh << "EOF" # Подстрока подтверждает, что это работает для "xterm" и "xterm-xfree86". if [ "${TERM:0:5}" = "xterm" ]; then PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME} : ${PWD}\007"' export PROMPT_COMMAND fi EOF

/etc/profile.d/i18n.sh

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

  • вывод программ, транслированный на ваш язык

  • правильную классификацию символов в буквы, цифры и другие классы – это необходимо для Bash для работы в не английских локалях

  • правильный алфавитный порядок сортировки для для вашей страны

  • правильный размер бумажной страницы

  • правильный фомат денег, значения времени и даты

Замените [ll] ниже на двух-буквенный код для требуемого языка (т.е. “ru”) и [CC] на на двух-буквенный код страны (т.е. “RU”). Так же может быть необходимо указание (и это актуальная и предпочтительная форма) кодировки символов (т.е. “koi8-r”) после точки (так, что в результате будет “ru_RU.koi8-r”). Используйте следующую команду для большей информации:

man 3 setlocale

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

locale -a

Как только подходящие параметры локали будут определены, создайте файл /etc/profile.d/i18n.sh:

cat > /etc/profile.d/i18n.sh << "EOF" # Настройка переменных i18n export LC_ALL=[ll]_[CC] export LANG=[ll]_[CC] export G_FILENAME_ENCODING=@locale EOF

Переменная LC_ALL устанавливает одинаковое значение для всех категорий локализации. Для лучшего контроля вы можете предпочесть установку значений индивидуально для всех категорий, перечисленных в выводе команды locale.

Переменная G_FILENAME_ENCODING говорит таким приложениям, как Glib и GTK+, что имена файлов находятся по умолчанию в кодировке локали, а не в UTF-8, как предполагалось по умолчанию.

Другие значения инициализации

Другие инициализации могут быть легко добавлены в profile добавлением дополнительных скриптов в директорию /etc/profile.d.

/etc/bashrc

Это базовый /etc/bashrc. Коментарии в файле должны все вам объяснить.

cat > /etc/bashrc << "EOF" # Begin /etc/bashrc # Written for Beyond Linux From Scratch # by James Robertson <jameswrobertson@earthlink.net> # updated by Bruce Dubbs <bdubbs@linuxfromscratch.org> # Убедимся, что терминал настроен правильно для каждой оболочки if [ -f /etc/profile.d/tinker-term.sh ]; then source /etc/profile.d/tinker-term.sh fi if [ -f /etc/profile.d/xterm-titlebars.sh ]; then source /etc/profile.d/xterm-titlebars.sh fi # Общесистемные псевдонимы и функции. # Общесистемные переменные окружения и запускаемые программы должны быть в # /etc/profile. Личные переменные окружения и запускаемые программы # должны быть в ~/.bash_profile. Личные псевдонимы и функции должны быть в # ~/.bashrc # Предоставляет цветную команду /bin/ls. Используетс я совместно с кодом в # /etc/profile. alias ls='ls --color=auto' # Предоставляет вид приглашения для нерегистрируемых оболочек, указанных оболочек, # запускаемых в окружении X. #export PS1="[\u@\h \w]\\$ " export PS1='\u@\h:\w\$ ' # End /etc/bashrc EOF

~/.bash_profile

Это базовый ~/.bash_profile. Если вы хотите, чтобы каждый новый пользователь имел этот файл автоматически, просто измените вывод команды на /etc/skel/.bash_profile и проверьте права доступа после выполнения команды. Затем вы можете скопировать /etc/skel/.bash_profile в домашние директории уже имеющихся пользователей, включаяя root, и установить соответствующего владельца и группу.

cat > ~/.bash_profile << "EOF" # Begin ~/.bash_profile # Written for Beyond Linux From Scratch # by James Robertson <jameswrobertson@earthlink.net> # updated by Bruce Dubbs <bdubbs@linuxfromscratch.org> # Личные переменные окружения и запускаемые программы. # Личные псевдонимы и функции должны быть в ~/.bashrc. Общесистемные # переменные окружения и запускаемые программы должны быть в /etc/profile. # Общесистемные псевдонимы и функции в /etc/bashrc. append () { # Сначала удалим директорию local IFS=':' local NEWPATH for DIR in $PATH; do if [ "$DIR" != "$1" ]; then NEWPATH=${NEWPATH:+$NEWPATH:}$DIR fi done # Затем добавим директорию export PATH=$NEWPATH:$1 } if [ -f "$HOME/.bashrc" ] ; then source $HOME/.bashrc fi if [ -d "$HOME/bin" ] ; then append $HOME/bin fi unset append # End ~/.bash_profile EOF

~/.bashrc

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

cat > ~/.bashrc << "EOF" # Begin ~/.bashrc # Written for Beyond Linux From Scratch # by James Robertson <jameswrobertson@earthlink.net> # Личные псевдонимы и функции. # Личные переменные окружения и запускаемые программы должны быть в # ~/.bash_profile. Общесистемные переменные окружения и запускаемые программы # должны быть в /etc/profile. Общесистемные псевдонимы и функции находятся в # /etc/bashrc. if [ -f "/etc/bashrc" ] ; then source /etc/bashrc fi # End ~/.bashrc EOF

~/.bash_logout

Это пустой файл ~/.bash_logout, который может быть использован как временный. Заметьте, что базовый ~/.bash_logout не включает команду clear. Это потому, что clear поддерживается в файле /etc/issue.

cat > ~/.bash_logout << "EOF" # Begin ~/.bash_logout # Written for Beyond Linux From Scratch # by James Robertson <jameswrobertson@earthlink.net> # Личный пункт для выполнения logout. # End ~/.bash_logout EOF

/etc/dircolors

Если вы хотите использовать возможности dircolors, то выполните следующую команду. Шаги по установке/etc/skel, описанные выше, так же могут быть использованы здесь для предоставления файла ~/.dircolors при установке нового пользователя. Как раньше, просто измените имя выходного файла в следующей команде и установите права доступа, владельца и группу у созданных и/или скопированных фалов.

dircolors -p > /etc/dircolors

Если вы желаете настроить цвета, используемые для различных типов файлов, вы можете отредактировать файл /etc/dircolors. Инструкции по установке цветов находятся внутри файла.

И напоследок, Ian Macdonald написал превосходную колекцию советов и трюков для расширения окружения вашей оболочки. Вы можете прочитать их на http://www.caliban.org/bash/index.shtml.

Последнее обновление 2005-01-16 09:56:15 -0700