The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Документация для Linux" / Оглавление документа

Стартовые файлы оболочки 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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру