Программа оболочка /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. Этот файл запускается для установки некоторых помагающих функций и базовых параметров. Он описывает некоторые параметры истории команд 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, в которой размещены индивидуальные скрипты инициализации.
install --directory --mode=0755 --owner=root --group=root /etc/profile.d
Этот скрипт использует файлы ~/.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
Этот скрипт добавляет некоторые полезные пути к переменным окружения 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
Этот скрипт настраивает файл конфигурации inputrc. Если пользователь не имеет индивидуальных установок, он использует глобальный файл.
cat > /etc/profile.d/readline.sh << "EOF"
# Настройка переменной окружения INPUTRC.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
INPUTRC=/etc/inputrc
fi
export INPUTRC
EOF
Некоторые приложения требуют описания установки 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
Установка значения 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
Если 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
Этот скрипт показывает пример другого пути установки системного приглашения. Обычная переменная 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
Этот скрипт показывает установку некоторых переменных окружения, необходимых для поддержки различных языков. Правильная установка этих переменных даст вам:
вывод программ, транслированный на ваш язык
правильную классификацию символов в буквы, цифры и другие классы – это необходимо для 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, как предполагалось по умолчанию.
Это базовый /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. Если вы хотите, чтобы каждый новый пользователь имел этот файл автоматически, просто измените вывод команды на /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. Коментарии и инструкции по использованию /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 не включает команду 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
Если вы хотите использовать возможности 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