Библиотека сайта rus-linux.net
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/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 |