Настройка параметров окружения и оболочки

Настройка параметров вашей оболочки, установка времени и т.д.

Статья включает:

Что происходит при входе в систему?
Настройка домашнего каталога
Настройка командного интерпретатора
Пример файла .kshrc
Переменные окружения
Конфигурационные строки
Задание часового пояса
Настройка оконного окружения Photon
Типы терминалов
Устранение неполадок

Предыдущий раздел описывает процесс запуска и возможности настройки операционной системы. В этом разделе обсуждаются возможности конфигурирования среды, в которую пользователь попадает после входа в систему, а также некоторые процедуры настройки, которые могут оказаться необходимыми.

Что происходит при входе в систему?

Перед тем как приступить к конфигурированию начальной среды, пользователь должен понять, что происходит при входе в систему, поскольку расположение параметров, которые требуется задать, зависит от характера конфигурирования.

Пользователю следует продумать следующие вопросы:

При входе в систему запускается начальный командный интерпретатор, который указан в записи пользователя в базе данных учетных записей (см. passwd и Файл /etc/passwd). Как правило, начальным командным интерпретатором является sh, который обычно представляет собой ссылку на командный интерпретатор Korn ksh.

Когда ksh запускается как начальный командный интерпретатор, он исполняет следующие профили, если они существуют и являются исполняемыми:

Для чего нужны два профиля? Настройки, которые применяются ко всем пользователям, хранятся в профиле /etc/profile, а настройки, которые соответствуют конкретному пользователю – в его собственном профиле .profile. Редактировать файл /etc/profile может только пользователь root.

В действительности существует третий профиль, который предназначен для командного интерпретатора. Его особенность заключается в том, что он исполняется при каждом запуске командного интерпретатора (см. раздел "Файл запуска ksh" далее в этой статье).

Настройка домашнего каталога

Домашний каталог (home directory) позволяет хранить все файлы и каталоги, которые относятся к конкретному пользователю. В домашнем каталоге удобно содержать пользовательские двоичные файлы и сценарии. Запись, которая соответствует пользователю в базе данных паролей, определяет домашний каталог ( Управление учетными записями пользователей), а переменная окружения HOME содержит его имя.

В домашнем каталоге также хранится информация, которая используется для конфигурирования среды при входе пользователя в систему. По умолчанию приложения устанавливают в домашний каталог конфигурационные файлы. Конфигурационные файлы обычно начинаются с точки (.) и запускаются при входе пользователя в систему (например, файл .profile) или при запуске приложения (например, файл .jedrc).

Приложения оконного окружения Photon представляют собой особый случай. Приложения, которые выполняются в оконном окружении Photon, как правило, хранят свои конфигурации в каталоге $HOME/.ph. Если необходимо автоматически запускать какие-либо приложения вместе с оконным окружением Photon, следует поместить соответствующие команды в файл $HOME/.ph/phapps.

Настройка командного интерпретатора

Существует множество конфигурационных файлов среды. В этом разделе описано несколько наиболее полезных из них:

Файл /etc/profile

Начальный командный интерпретатор исполняет файл /etc/profile, если этот файл существует и является исполняемым. Файл /etc/profile задает настройки командного интерпретатора, которые применяются ко всем пользователям, поэтому его содержимое представляет интерес для системных администраторов. Чтобы отредактировать файл /etc/profile, необходимо войти в систему как пользователь root.

Файл /etc/profile выполняет следующие задачи:

Если необходимо запускать определенный сценарий при каждом запуске начального командного интерпретатора любым пользователем системы, следует поместить этот сценарий в каталог /etc/profile.d. Чтобы добавить файл в этот каталог, требуются привилегии уровня root.

Например, если при входе любого пользователя в систему необходимо задавать глобальные переменные окружения или запускать определенные задачи, следует поместить в каталог /etc/profile.d сценарий, который выполняет эти действия.

Если в качестве начального командного интерпретатора используется sh, то необходимо, чтобы сценарий имел расширение .sh.

Файл $HOME/.profile

Файл $HOME/.profile запускается при каждом входе пользователя в систему после выполнения файла /etc/profile. Если в файл .profile вносятся изменения, то они вступают в силу только при следующем входе пользователя в систему. В файле .profile следует задавать настройки, которые выполняются однократно или должны наследоваться всеми командными интерпретаторами.

Например, с помощью файла .profile можно:


Note: Псевдонимы следует создавать в профиле командного интерпретатора пользователя (см. следующий раздел), а не в файле .profile, поскольку командный интерпретатор не экспортирует псевдонимы. Если задать псевдоним в файле .profile, то он будет установлен только в командных интерпретаторах, которые запускаются как начальные с помощью параметра -l.

Не следует запускать приложения оконного окружения Photon из сценария .profile, поскольку при его выполнении оболочка Photon не работает. Photon-приложения следует запускать из файла $HOME/.ph/phapps.


Пример файла .profile см. в приложении.

Файл запуска ksh

Как описано ранее, начальный командный интерпретатор выполняет определенные профили. Кроме того, можно создать профиль, который будет выполняться командным интерпретатором ksh при запуске другого командного интерпретатора независимо от того, является ли командный интерпретатор ksh начальным.

У этого профиля нет определенного имени; при запуске командного интерпретатора ksh он проверяет переменную окружения ENV. Если эта переменная существует, то командный интерпретатор ksh считывает из нее имя профиля. Чтобы задать значение переменной ENV, следует добавить в файл $HOME/.profile строку, подобную следующей:

export ENV=$HOME/.kshrc

Пользователи часто называют упомянутый профиль именем .kshrc, но ему можно присвоить любое другое имя. Этот файл не обязан быть исполняемым.

В профиле командного интерпретатора ksh можно задавать желаемые псевдонимы и выполнять другие действия. Например, если требуется, чтобы утилита ls всегда отображала символы, которые указывают тип файла (исполняемый файл, каталог или ссылку), следует добавить в профиль командного интерпретатора следующую строку:

alias ls="ls -F"

Любые изменения, которые вносятся в профиль, применяются к новым командным интерпретаторам, но не к их существующим экземплярам.

Пример профиля .kshrc приводится далее.

Пример файла .kshrc

Далее приводится пример профиля, который запускается интерпретатором ksh, если переменная окружения ENV установлена, как указано в примере файла профиля .profile:

alias rm="rm -i" alias ll="ls -l" export PS1='$(pwd) $ '

В соответствии с этим профилем выполняются следующие действия:

Переменные окружения

Многие приложения управляют своими действиями с помощью переменных окружения. Например, утилита less считывает ширину терминала или окна из переменной окружения COLUMNS, а многие утилиты записывают временные файлы в каталог, который определяется переменной окружения TMPDIR.

Запускаемый процесс наследует копию окружения своего родителя. Это означает, что если задать переменную окружения в файле .profile, то все командные интерпретаторы и процессы унаследуют ее при условии, что определение этой переменной не будет отменено каким-либо процессом в цепочке.

Например, если пользователю принадлежит каталог с именем bin, этот каталог можно включить в переменную окружения PATH, добавив в файл .profile следующую строку:

export PATH=$PATH:/home/имя_пользователя/bin

Если системный администратор захочет применить это изменение ко всем пользователям, ему будет необходимо экспортировать переменные окружения из файла /etc/profile или из сценария в каталог /etc/profile.d. Более подробную информацию см. в разделе "Файл /etc/profile" ранее в этой статье.

Задание переменных PATH и LD_LIBRARY_PATH

Утилита login не сохраняет переменные окружения за исключением нескольких особых переменных, например PATH и TERM.

Переменная окружения PATH определяет пути для поиска команд, а переменная LD_LIBRARY_PATH — пути для поиска компоновщиком совместно используемых библиотек. Начальные значения по умолчанию переменных окружения LD_LIBRARY_PATH и PATH заданы в файле построения образа до запуска модуля procnto. Две конфигурационные строки (см. раздел "Конфигурационные строки" далее в этой статье), _CS_PATH и _CS_LIBPATH, принимают значения по умолчанию переменных PATH и LD_LIBRARY_PATH. Утилита login задает переменную окружения PATH с помощью строки _CS_PATH и передает переменную PATH, а также обе конфигурационные строки, своим дочерним процессам.

Если ввести команду set или env в командном интерпретаторе, который был запущен утилитой login, переменная окружения PATH будет отображена, а переменная LD_LIBRARY_PATH — нет. Строка _CS_LIBPATH используется для задания переменной LD_LIBRARY_PATH аналогичным образом.

Чтобы указать утилите login, какие переменные окружения следует сохранять, нужно воспользоваться файлом /etc/default/login. Этот файл можно отредактировать, добавив в него новые переменные, например LD_LIBRARY_PATH, но изменять существующие переменные, такие как PATH и TERM, нельзя.

Если в качестве начального командного интерпретатора используется ksh, можно переопределить существующие переменные и задать новые переменные, отредактировав профили /etc/profile и $HOME/.profile. Все переменные окружения, которые заданы в файле /etc/profile, заменяют определения файла /etc/default/login, а содержимое файла $HOME/.profile заменяет определения обоих файлов /etc/default/login и /etc/profile.

Более подробные сведения о конфигурационных строках см. в следующем разделе.

Конфигурационные строки

В дополнение к переменным окружения операционная система ЗОСРВ «Нейтрино» использует конфигурационные строки (configuration strings). Конфигурационные строки представляют собой системные переменные, которые похожи на переменные окружения, но более динамичны.

При задании переменной окружения ее новое значение действует только в текущем экземпляре командного интерпретатора и процессах, которые созданы им после задания переменной. Задание нового значения конфигурационной строки начинает действовать во всей системе немедленно.


Note: Операционная система ЗОСРВ «Нейтрино» также поддерживает настройку конфигурационных лимитов (configurable limits) — переменных, которые хранят информацию о системе. Более подробные сведения см. Системные требования и лимиты.

Для того чтобы получить значение конфигурируемого лимита или конфигурационной строки, можно воспользоваться POSIX-утилитой getconf. Операционная система ЗОСРВ «Нейтрино» также определяет утилиту setconf, которая отсутствует в стандарте POSIX и позволяет задавать определенные конфигурационные строки пользователю root. Чтобы считать значение конфигурационной строки в программе, следует вызвать функцию confstr().

Имена конфигурационных строк начинаются с _CS_* и состоят из символов верхнего регистра, хотя утилиты getconf и setconf позволяют использовать любой регистр, опускать первый символ подчеркивания или весь префикс при условии, что остальная часть имени является однозначной.

С помощью утилиты setconf можно задавать значения следующих конфигурационных строк:

_CS_ARCHITECTURE
название архитектуры системы команд;
_CS_DOMAIN
сетевой домен этого узла;
_CS_HOSTNAME
сетевое имя этого узла;

Note: При изменении конфигурационной строки _CS_HOSTNAME необходимо также изменять переменную окружения HOSTNAME. Утилита hostname всегда возвращает значение конфигурационной строки _CS_HOSTNAME.

_CS_HW_SERIAL
серийный номер оборудования;
_CS_HW_PROVIDER
название производителя оборудования;
_CS_LIBPATH
путь по умолчанию для размещения разделяемых объектов. Более подробные сведения см. в разделе "Задание переменных PATH и LD_LIBRARY_PATH" ранее в этой статье;
_CS_LOCALE
название локали (набор региональных настроек, включающий в себя такие параметры, как часовой пояс, единицы измерения веса, наименование валюты и т.п.) (locale string);
_CS_MACHINE
тип оборудования, на котором работает операционная система;
_CS_PATH
строка по умолчанию для поиска системных утилит. Более подробные сведения см. в разделе "Задание переменных PATH и LD_LIBRARY_PATH" ранее в этой статье;
_CS_RELEASE
текущий номер выпуска (релиз) операционной системы;
_CS_RESOLVE
версия файла /etc/resolv.conf (исключая доменное имя), хранимая в оперативной памяти;
_CS_SRPC_DOMAIN
защищенный RPC-домен (Remote Procedure Call, удаленный вызов процедур);
_CS_SYSNAME
название операционной системы;
_CS_TIMEZONE
источник информации о часовых поясах, альтернативный переменной окружения TZ. Более подробные сведения см. в разделе "За­дание часового пояса" далее в этой статье.
_CS_VERSION
версия операционной системы.

Задание часового пояса

Самый простой способ задать часовой пояс в оконном окружении Photon — воспользоваться утилитой phlocale. Достаточно просто выбрать нужный часовой пояс, а программа phlocale выполнит все остальные действия.

Если оболочка Photon не используется, то необходимо задать переменную TZ или конфигурационную строку _CS_TIMEZONE. Чтобы часовой пояс устанавливался при загрузке компьютера, требуется поместить эту же информацию в файл /etc/TIMEZONE (см. описание файла /etc/system/sysinit).


Note: Если переменная окружения TZ не установлена, система использует значение конфигурационной строки _CS_TIMEZONE. Переменная TZ включена в стандарты POSIX, а конфигурационная строка _CS_TIMEZONE реализована в операционной системе ЗОСРВ «Нейтрино». Описание, которое приведено далее, относится и к переменной окружения TZ, и к конфигурационной строке _CS_TIMEZONE.

Различные функции, которые работают со временем, используют информацию о часовых поясах для вычисления времени относительно пояса UTC (Universal Time Coordinated, всеобщее скоординированное время, которое раньше называлось Greenwich Mean Time (GMT — время по Гринвичу)).

Как правило, время на компьютере устанавливается в соответствии с часовым поясом UTC. Если оборудование компьютера не сохраняет время автоматически, следует воспользоваться командой date.

Переменную окружения TZ можно задать с помощью утилиты env или команды командного интерпретатора export. Конфигурационная строка _CS_TIMEZONE задается с помощью утилиты setconf. Пример:

env TZ=PST8PDT
export TZ=PST8PDT
setconf _CS_TIMEZONE PST8PDT

Переменная окружения TZ и конфигурационная строка _CS_TIMEZONE имеют следующий формат (пробелы использованы только для удобочитаемости):

std offset dst offset, rule

Расширенный формат имеет вид:

stdoffset[dst[offset][,start[/time],end[/time]]]

Здесь:

Ограничения

Утилита phlocale список часовых поясов берет из /etc/timezone/uc_tz_t, но его соответствие текущему делению планеты на часовые пояса не гарантируется; часовые пояса регулируются местным законодательством стран и могут отличаться от указанных в данном файле. Аббревиатуры, обозначающие часовые пояса в данном файле, так же не являются стандартными и могут неоднозначно идентифицировать часовой пояс.

Примеры

В этом разделе рассматривается несколько примеров настроек часовых поясов.

Московское время

Определение московского времени выглядит следующим образом:

MSK-4

Красноярское время

Определение часового пояса Красноярска выглядит следующим образом:

KRAT-8

Восточное время

Восточное время является часовым поясом по умолчанию. Его краткое определение имеет следующий вид:

EST5EDT

Полное определение выглядит следующим образом:

EST5EDT4,M4.1.0/02:00:00,M10.5.0/02:00:00

В этом определении явно указано, что летнее время начинается в 2 часа ночи первого (1) воскресенья (0) апреля (4) и заканчивается в 2 часа ночи последнего (5) воскресенья (0) октября (10).

Центрально-европейское время

Определение центрально-европейского времени выглядит следующим образом:

Central Europe Time-2:00

Использование часовых поясов в программировании

В программе переменной окружения TZ можно присвоить значение, вызвав функцию setenv() или putenv():

setenv( "TZ", "PST08PDT07,M3.2.0/2,M11.1.0/2", 1 );
putenv( "TZ=PST08PDT07,M3.2.0/2,M11.1.0/2" );

Чтобы считать значение переменной TZ, следует воспользоваться функцией getenv():

char *tzvalue;
...
tzvalue = getenv( "TZ" );

Значение конфигурационной строки _CS_TIMEZONE можно считать, вызвав функцию confstr():

confstr(_CS_TIMEZONE, buff, BUFF_SIZE);

или задать с помощью оператора

confstr(_CS_SET | _CS_TIMEZONE, "JST-9", 0);

Функция tzset() считывает текущее значение переменной окружения TZ или конфигурационной строки _CS_TIMEZONE, если значение переменной TZ не определено, и задает следующие глобальные переменные:

daylight
показывает, поддерживается ли летнее время в данной локали;
timezone
разница во времени между текущим часовым поясом и всеобщим скоординированным временем, выраженная в секундах;
tzname
вектор, который состоит из двух указателей на символьные строки, содержащие имена часовых поясов поясного и летнего времени.

При вызове функции ctime*(), localtime() или mktime() библиотека присваивает значение переменной tzname так же, как и при вызове функции tzset(). Это же действие выполняется, если вызывается функция strftime() с директивой Z.

Настройка оконного окружения Photon

Автоматический запуск приложений

Если необходимо, чтобы при каждом запуске оконного окружения Photon запускалось какое-либо Photon-приложение, следует поместить его в файл $HOME/.ph/phapps. Каждая команда должна располагаться на отдельной строке. Например, для запуска редактора оболочки Photon вместе с Photon следует ввести строку:

ped &


Note: Поскольку этот файл не является сценарием командного интерпретатора, в нем не следует задавать какие-либо переменные окружения.

Настройка шрифтов

Оконное окружение Photon поддерживает широкий набор типов шрифтов. В среде Photon должны работать любые шрифты стандарта Unicode.

Файлы шрифтов системы хранятся в каталоге /usr/photon/font_repository. Этот каталог содержит следующие файлы:

Чтобы установить в систему новый шрифт, следует поместить файлы шрифтов в каталог font_repository и запустить утилиту mkfontdir для создания нового файла fontdir. Затем нужно перезапустить менеджер шрифтов, который обычно представлен разделяемым объектом, загруженным в io-graphics. При использовании отдельного сервера phfont его так же следует перезапустить.

Возможности ввода текста

Оконное окружение Photon позволяет вводить текст на английском и русском языках.

Типы терминалов

Чтобы указать тип используемого терминала консоли или утилите pterm, следует задать переменную окружения TERM. Каталоги, которые содержат базу данных терминалов, расположены в каталоге /usr/lib/terminfo. Для изменения правил подстановки шрифтов в базе данных можно воспользоваться утилитами tic и infocmp.

Например, если запустить утилиту infocmp для /usr/lib/terminfo/q/qansi-m, то для этой базы данных будет сгенерирован файл в текстовой форме, доступный для чтения человеком. Затем этот файл можно модифицировать и снова скомпилировать с помощью утилиты tic в формат базы данных. Файл /etc/termcap обеспечивает совместимость с программами, которые используют более раннюю однофайловую модель базы данных, а не новую библиотечную модель.

Устранение неполадок

Далее рассмотрены некоторые распространенные проблемы, которые могут возникнуть при конфигурировании среды.

сценарий, который помещен в файл /etc/profile.d, не запускается.
Следует убедиться в том, что:
как установить время таким образом, чтобы оно было правильным одновременно в ЗОСРВ «Нейтрино» и в Microsoft Windows?
Если на одном разделе компьютера установлена операционная система Windows, а на другом – ЗОСРВ «Нейтрино», то установка часов в одной операционной системе изменяет время в другой операционной системе. В ЗОСРВ «Нейтрино» аппаратные часы обычно устанавливают по всеобщему скоординированному времени (Universal Time Coordinated, UTC), а затем задают часовой пояс. В Windows аппаратные часы устанавливаются по местному времени. Чтобы задать время, которое является корректным для обеих операционных систем, следует установить на аппаратных часах местное время, находясь в ЗОСРВ «Нейтрино». Более подробные сведения см. в описании файла /etc/system/sysinit.
каким образом правильно проверить, что файл .kshrc выполняется как сценарий, а не как сеанс терминала?
Если параметр i задан, то файл .kshrc работает в интерактивном режиме. Следующий код проверяет, задан ли этот параметр:

case $- in
*i*)
set -o emacs
export EDITOR=vi
export VISUAL=vi
export PS1='`hostname -s`:`/bin/pwd` >'
bind ˆ[[z=list
bind ˆI=complete
...
esac

Параметр $- является объединением всех односимвольных параметров, которые переданы сценарию. Более подробные сведения см. в описании ksh.




Предыдущий раздел: перейти