Библиотека сайта rus-linux.net
Linux From Scratch (version 6.8) | ||
Назад | Глава 7. Настройка скриптов загрузки системы | Вперед |
7.8. Файлы запуска командной оболочки Bash
Программа или командная оболочка /bin/bash (далее именуемая просто как "командная оболочка") использует набор загрузочных файлов, которые помогают создавать среду окружения для ее работы. Каждый файл имеет конкретное назначение и может по-разному влиять на то, как будет происходить вход в командную оболочку и на ее интерактивные особенности. В файлах, находящихся в директории /etc
, указываются глобальные настройки командной оболочки. Если аналогичный файл есть в домашнем директории пользователя, то настройки, указывает в нем, будут переопределять глобальные настройки.
Когда пользователь успешно входит в систему, то запускается
интерактивная командная оболочка с регистрацией (interactive login shel), использующая модуль /bin/login, читающий файл /etc/passwd
. Интерактивная командная оболочка без регистрации (interactive non-login) обычно запускается из командной строки (например, [строка-приглашение]$
/bin/bash). Неинтерактивная командная оболочка (non-interactive shell ) обычно используется в случае, когда запускается скрипт командной оболочки. Она не является интерактивной, поскольку вся обработка осуществляется скриптом и между командами оболочка не ждет ввода данных от пользователя.
Дополнительную информацию смотрите с помощью команды info bash в разделе Bash Startup Files and Interactive Shells (Файлы запуска Bash и интерактивные командные оболочки).
Когда оболочка вызывается как интерактивная командная оболочка с регистрацией, то читаются файлы /etc/profile
и ~/.bash_profile
.
В основном файле /etc/profile
выполняются некоторые настройки переменных среды окружения, необходимые для поддержки родного языка пользователя. Результатом их правильной настройки будет следующее:
- Выдача программой сообщений, переведенных на родной язык пользователя
- Правильная классификация символов на буквы, цифры и другие классы. Это необходимо для неанглийских локалей в bash для правильного использования в командной строке символов, не относящихся к символами ASCII
- Правильная алфавитная сортировка, соответствующая указанной стране
- Правильный размер бумаги, используемый по умолчанию
- Правильное форматирование денежных значений, значений времени и дат
В командах, приведенных ниже, замените <ll>
на двухбуквенный код нужного языка (например, "en"), а <CC>
на двухбуквенный код соответствующей страны (например, "GB"). <charmap>
следует заменить канонический названием отображения символов для выбранного языка. Могут присутствовать дополнительные модификаторы, такие как "@euro".
Список всех локалей, поддерживаемых Glibc, можно получить, выполнив следующую команду:
locale -a
Отображения символов могут иметь несколько алиасов, например, "ISO-8859-1" можно также указывать как "iso8859-1" и "iso88591". В некоторых приложениях ряд синонимов могут не обрабатываться правильно (например, требуется указывать "UTF-8" как "UTF-8", а не как "utf8"), поэтому лучше всего для конкретной локали выбирать ее каноническое имя. Чтобы определить каноническое имя, запустите следующую команду, где <locale name>
является предпочтительной для вас локалью (в нашем примере — "en_GB.iso88591"), выбранной из выданных командой locale -a.
LC_ALL=<locale name> locale charmap
Для локали "en_GB.iso88591" указанная выше команда выведет:
ISO-8859-1
В результате в окончательной настройке локали у нас будет "en_GB.ISO-8859-1". Важно, чтобы поиск локали с помощью эвристики, описанной выше, был выполнен раньше, чем в настроечные файлы Bash будут добавлены следующие команды:
LC_ALL=<locale name> locale language LC_ALL=<locale name> locale charmap LC_ALL=<locale name> locale int_curr_symbol LC_ALL=<locale name> locale int_prefix
Приведенные выше команды должны выдать название языка, кодировку символов, используемую локалью, текущую локаль и префикс, который для данной страны должен набираться перед телефонным номером. Если какая-нибудь из команд, приведенная выше, завершится неудачно и выдаст сообщение, подобное показанному ниже, то это значит, что либо в главе 6 ваша локаль не была установлена , либо ваша локаль не поддерживается в Glibc при установке по умолчанию.
locale: Cannot set LC_* to default locale: No such file or directory
Если это случится, вы должны либо с помощью команды localedef установить требуемую локаль, либо выбрать другую локаль. Далее предполагается, что Glibc не выдает такие сообщения об ошибках.
В некоторых пакетах, не входящих в состав LFS, может отсутствовать поддержка выбранной вами локали. Одним из примеров является библиотека X (часть системы X Window), которая выводит следующее сообщение об ошибке, если локаль не совпадает точно с одним из названий отображений символов, используемых во внутренних файлах:
Warning: locale not supported by Xlib, locale set to C
В определенных случаях в библиотеке Xlib предполагается, что название отображения символов будет указано в верхнем регистре с каноническими символами тире. Например, "ISO-8859-1", а не "iso88591". Также можно найти подходящую спецификацию, если удалить из спецификации локали часть, в которой указано отображение символов. Это можно проверить, если для обеих локалей запустить команду locale charmap. Например, можно заменить "de_DE.ISO-8859-15@euro" на "de_DE@euro" с тем, чтобы эта локаль могла быть распознана библиотекой Xlib.
Если название локали не такое, как ожидается, то другие пакеты также могут работать некорректно (и могут не выдавать выдавать сообщения о каких-либо ошибках). Для таких случаев можно получить некоторые полезные сведения, если изучить, каким образом ваша локаль поддерживается в других дистрибутивах.
После того, как будет определена правильная настройка локали, создайте файл /etc/profile
:
cat > /etc/profile < "EOF" # Begin /etc/profile export LANG=<ll>_<CC>.<charmap><@modifiers> # End /etc/profile EOF
Локали "С" (используется по умолчанию) и "en_US" (рекомендуется для англоязычных пользователей США) разные. В "С" используется семибитный набор символов US-ASCII, а байты с установленным старшим битом трактуются как недопустимые символы. По этой причине в этой локали команда ls заменяет эти символы вопросительными знаками. Кроме того, попытка отправить почту с такими символами с помощью Mutt или Pine приведет к тому, что будет отослано сообщение, не соответствующее требованиям RFC (кодировка в исходящей почте будет указана как "неизвестные 8-битовые символы"). Следовательно, вы можете пользоваться локалью "C" только если вы уверены, что вам никогда не потребуется 8-битные символы.
Во многих программах также не поддерживаются локали на основе UTF-8. Работа, связанная с этим, ведется и, по возможности, такие проблемы исправляются, смотрите http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.html.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Создание файла /etc/inputrc | Управление устройствами и модулями в системе LFS |