Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Beyond Linux From Scratch. Version 2011-12-30
Назад 3. Завершающие настройки в системе LFS Вперед

Файлы запуска командной оболочки Bash

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

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

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

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

Файл ~/.bash_logout не используется при вызове командной оболочки. Он считывается и исполняется, когда пользователь выходит из интерактивной командной оболочки, использующей регистрацию (login shell).

Во многих дистрибутивах для инициализации командных оболочек без регистрации (non-login shell) используется файл /etc/bashrc. Обычно обращение к этому файлу происходит из файла ~/.bashrc, расположенного в директории пользователя, и не осуществляется непосредственно из bash. Это соглашение используется в данном разделе.

Для получения дополнительной информации используйте команду info bash -- Nodes: Bash Startup Files and Interactive Shells (раздел "Файлы запуска Bash и интерактивные командные оболочки").

Замечание

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

Файл /etc/profile

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

Чтобы получить дополнительную информацию об управляющих последовательностах символов, которые вы можете использовать в своих строках-приглашениях (т. е. в переменной среды окружения PS1), запустите команду info bash -- Node: Printing a Prompt (раздел "Выдача строк-приглашений").

cat > /etc/profile << "EOF"
# Начало файлаn /etc/profile
# Написано для проекта Beyond Linux From Scratch
# Автор - James Robertson <jameswrobertson@earthlink.net>
# Изменения - 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"
}


# Set the initial path
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"

# Настройка командной строки красного цвета в случае пользователя root и зеленого цвета - для других пользователей.
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
  PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
  PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi

for script in /etc/profile.d/*.sh ; do
        if [ -r $script ] ; then
                . $script
        fi
done

# Теперь очистите переменные pathremove pathprepend pathappend

# Конец файла /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"
# Setup for /bin/ls to support color, the alias is in /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

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"
# Setup the INPUTRC environment variable.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
        INPUTRC=/etc/inputrc
fi
export INPUTRC
EOF

Скрипт /etc/profile.d/umask.sh

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

cat > /etc/profile.d/umask.sh << "EOF"
# By default we want the umask to get set.
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/i18n.sh

Этот скрипт настраивает переменную среды окружения, используемую для поддержки естественного языка. Подробное обсуждение настройки этой переменной можно найти в книге LFS в разделе "Файлы запуска командной оболочки Bash".

cat > /etc/profile.d/i18n.sh << "EOF"
# Set up i18n variables
export LANG=<ll>_<CC>.<charmap><@modifiers>
EOF

Инициализация других значений

В профиль profile можно легко добавить инициализацию других значений, если в каталог /etc/profile.d поместить соответствующие скрипты.

Файл /etc/bashrc

Ниже приведен базовый файл /etc/bashrc. В скрипте объявляется алиас команды ls, позволяющий выдавать раскрашенное содержимое текущего каталога. Также определено значение переменной среды окружения PS1, с помощью которой определяется внешний вид пользовательской строки — приглашения.

cat > /etc/bashrc << "EOF"
# Начало файла /etc/bashrc
# Написано для Beyond Linux From Scratch
# Автор - James Robertson <jameswrobertson@earthlink.net>
# изменено Bruce Dubbs <bdubbs@linuxfromscratch.org>

# Общесистемные переменные среды окружения и программы запуска.

# Общесистемные алиасы и функции должны быть в файле /etc/bashrc. Персональные 
# переменные среды окружения и персональные программы запуска должны быть помещены в файл
# ~/.bash_profile.  Персональные алиасы и функции должны быть в файле 
# ~/.bashrc.

# Предоставляются команды /bin/ls, используемые цвет.  Используется в совокупности с кодом в файле
# /etc/profile.

alias ls='ls --color=auto'

# Предоставляется подсказка в командных оболочках без входа в систему, в частности запускаемые
# в среде X. [Смотрите архив LFS с именем PS1 Environment Variable
# с тем, чтобы лучше ознакомиться со скриптом]

NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
  PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
  PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi

# Конеч файла /etc/bashrc
EOF

Файл ~/.bash_profile

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

cat > ~/.bash_profile << "EOF"
# Начало файла ~/.bash_profile
# Написано для Beyond Linux From Scratch
# Автор - James Robertson <jameswrobertson@earthlink.net>
# Изменение - Bruce Dubbs <bdubbs@linuxfromscratch.org>

# Персональные переменные среды окружения и программы запуска.

# Персональные алиасы и функции должны находиться в файле ~/.bashrc. Общесистеные
# переменные среды окуружения и программы запуска находятся в файле /etc/profile.
# Общесистемные алиасы и функции находятся в файле /etc/bashrc.

append () {
  # First remove the directory
  local IFS=':'
  local NEWPATH
  for DIR in $PATH; do
     if [ "$DIR" != "$1" ]; then
       NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
     fi
  done

  # Then append the directory
  export PATH=$NEWPATH:$1
}

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

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

unset append

# Конец файла ~/.bash_profile
EOF

Файл ~/.bashrc

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

cat > ~/.bashrc << "EOF"
# Начало файла ~/.bashrc
# Написано для Beyond Linux From Scratch
# Автоор - James Robertson <jameswrobertson@earthlink.net>

# Персональные алиасы и функции.

# Персональные переменные среды окружения и программы запуска должны быть
# в файле ~/.bash_profile. Общесистемные переменные среды окружения и программы
# запуска находятся в файле /etc/profile. Общесистемные алиасы и функции находятся
# в файле /etc/bashrc.

if [ -f "/etc/bashrc" ] ; then
  source /etc/bashrc
fi

# конец файла ~/.bashrc
EOF

Файл ~/.bash_logout

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

cat > ~/.bash_logout << "EOF"
# Начало файла ~/.bash_logout
# Написано для для Beyond Linux From Scratch
# Автор - James Robertson <jameswrobertson@earthlink.net>

# Персональные элементы, которые выполняются при выходе из системы.

# Конец файла ~/.bash_logout
EOF

/etc/dircolors

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

dircolors -p > /etc/dircolors

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

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

Перевод сделан с варианта оригинала, датированного 2009-06-27 10:10:28 +0000


Предыдущий раздел: Оглавление Следующий раздел:
Об устройствах   Файлы /etc/vimrc и ~/.vimrc