RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
YandexMoney: 
41001198119846 
E-gold:
5128052

Beyond Linux From Scratch. Версия 6.0

Глава 3. Задачи последующей конфигурации LFS

Стартовые файлы оболочки 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 и в целях безопасности убирает поддержку постоянного файла истории для пользователя 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

Теперь создадим каталог /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.

Поиск

 

Найди своих коллег!