Программа-оболочка /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 и в целях безопасности убирает поддержку постоянного файла истории для пользователя root. Он также устанавливает вид системного приглашения. Затем он вызывает маленький скрипт в /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 для изменения (по умолчанию: 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, как предполагалось по умолчанию.
Другие инициализации могут быть легко добавлены в profile добавлением дополнительных скриптов в каталог /etc/profile.d.
Это базовый /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.