- Стартовые файлы оболочки Bash
- /etc/profile
- Директория /etc/profile.d
- /etc/profile.d/dircolors.sh
- /etc/profile.d/extrapaths.sh
- /etc/profile.d/readline.sh
- /etc/profile.d/tinker-term.sh
- /etc/profile.d/umask.sh
- /etc/profile.d/X.sh
- /etc/profile.d/xterm-titlebars.sh
- /etc/profile.d/i18n.sh
- Другие значения инициализации
- /etc/bashrc
- /etc/dircolors
- Файлы профилей и RC-файлы
- Файлы профилей и RC-файлы
- Командные оболочки, использующиеся для входа в систему
- Принцип работы командной оболочки, использующейся для входа в систему
- Интерактивные командные оболочки
- Для чего предназначены файлы профилей?
- Для чего предназначены RC-файлы?
- Некоторые ловушки
Стартовые файлы оболочки Bash
Программа оболочка /bin/bash (в дальнейшем называемая просто «оболочка») использует набор стартовых файлов для помощи создания окружения.Каждый файл имеет специфическое использование. Файлы в директории /etc обычно предоставляют глобальные установки. Если аналогичные файлы присутствуют в вашей домашней директории, то они могут заменить глобальные установки.
Интерактивнвя регистрация оболочки запускается после успешного входа, используя /bin/login, который читает файл /etc/passwd. Эта оболочка во время загрузки читает /etc/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 — Нода: Печать системного приглашения.
Директория /etc/profile.d
Теперь создадим директорию /etc/profile.d, в которой размещены индивидуальные скрипты инициализации.
/etc/profile.d/dircolors.sh
Этот скрипт использует файлы
/.dircolors и /etc/dircolors для управления цветом файлов в листинге директории. Они раскрашивают вывод таких команд, как ls —color . Разъяснение по инициализации этих файлов находится в конце этого раздела.
/etc/profile.d/extrapaths.sh
Этот скрипт добавляет некоторые полезные пути к переменным окружения PATH и PKG_CONFIG_PATH. Если хотите, вы можете раскоментировать последний раздел для размещения точки в конце вашего пути. Это позволит исполняемым файлам в текущей рабочей директории запускаться без указания ./, хотя мы предупреждаем, что обычно это связано с риском для безопасности.
/etc/profile.d/readline.sh
Этот скрипт настраивает файл конфигурации inputrc. Если пользователь не имеет индивидуальных установок, он использует глобальный файл.
/etc/profile.d/tinker-term.sh
Некоторые приложения требуют описания установки TERM для поддержки цвета.
/etc/profile.d/umask.sh
Установка значения umask важна для безопасности. Здесь права доступа для записи группы по умолчанию выключены для пользователей системы и когда имена пользователя и группы не совпадают.
/etc/profile.d/X.sh
Если X установлены, переменные PATH и PKG_CONFIG_PATH так же обновляются.
/etc/profile.d/xterm-titlebars.sh
Этот скрипт показывает пример другого пути установки системного приглашения. Обычная переменная PS1 дополнена PROMPT_COMMAND. Если переменная установлена, значение PROMPT_COMMAND выполняется как команда перед выводом каждого первичного приглашения.
/etc/profile.d/i18n.sh
Этот скрипт показывает установку некоторых переменных окружения, необходимых для поддержки различных языков. Правильная установка этих переменных даст вам:
вывод программ, транслированный на ваш язык
правильную классификацию символов в буквы, цифры и другие классы – это необходимо для Bash для работы в не английских локалях
правильный алфавитный порядок сортировки для для вашей страны
правильный размер бумажной страницы
правильный фомат денег, значения времени и даты
Замените [ll] ниже на двух-буквенный код для требуемого языка (т.е. “ ru ”) и [CC] на на двух-буквенный код страны (т.е. “ RU ”). Так же может быть необходимо указание (и это актуальная и предпочтительная форма) кодировки символов (т.е. “ koi8-r ”) после точки (так, что в результате будет “ ru_RU.koi8-r ”). Используйте следующую команду для большей информации:
Список всех локалей, поддерживаемых Glibc может быть получен запуском следующей команды:
Как только подходящие параметры локали будут определены, создайте файл /etc/profile.d/i18n.sh:
Переменная LC_ALL устанавливает одинаковое значение для всех категорий локализации. Для лучшего контроля вы можете предпочесть установку значений индивидуально для всех категорий, перечисленных в выводе команды locale .
Переменная G_FILENAME_ENCODING говорит таким приложениям, как Glib и GTK + , что имена файлов находятся по умолчанию в кодировке локали, а не в UTF -8, как предполагалось по умолчанию.
Другие значения инициализации
Другие инициализации могут быть легко добавлены в profile добавлением дополнительных скриптов в директорию /etc/profile.d.
/etc/bashrc
Это базовый /etc/bashrc. Коментарии в файле должны все вам объяснить.
/.bash_profile. Если вы хотите, чтобы каждый новый пользователь имел этот файл автоматически, просто измените вывод команды на /etc/skel/.bash_profile и проверьте права доступа после выполнения команды. Затем вы можете скопировать /etc/skel/.bash_profile в домашние директории уже имеющихся пользователей, включаяя root, и установить соответствующего владельца и группу.
/.bashrc. Коментарии и инструкции по использованию /etc/skel для .bash_profile, описанного выше, применимы и здесь но с другим конечным именем файла.
Это пустой файл
/.bash_logout, который может быть использован как временный. Заметьте, что базовый
/.bash_logout не включает команду clear. Это потому, что clear поддерживается в файле /etc/issue.
/etc/dircolors
Если вы хотите использовать возможности dircolors, то выполните следующую команду. Шаги по установке /etc/skel, описанные выше, так же могут быть использованы здесь для предоставления файла
/.dircolors при установке нового пользователя. Как раньше, просто измените имя выходного файла в следующей команде и установите права доступа, владельца и группу у созданных и/или скопированных фалов.
Если вы желаете настроить цвета, используемые для различных типов файлов, вы можете отредактировать файл /etc/dircolors. Инструкции по установке цветов находятся внутри файла.
И напоследок, Ian Macdonald написал превосходную колекцию советов и трюков для расширения окружения вашей оболочки. Вы можете прочитать их на http://www.caliban.org/bash/index.shtml .
Последнее обновление 2005-01-16 09:56:15 -0700
Источник
Файлы профилей и RC-файлы
Оригинал: Profiles and RC Files
Автор: Shawn Powers
Дата публикации: 22 июня 2016 г.
Перевод: А.Панин
Дата перевода: 27 июня 2016 г.
Файлы профилей и RC-файлы
Мне нравится Linux и, если вы читаете эти строки, велика вероятность того, что наши вкусы совпадают. Но, откровенно говоря, некоторые аспекты рабочего окружения Linux являются не самыми очевидными. В верхней части моего списка таких аспектов, несомненно, располагается система профилей. С концептуальной точки зрения она является достаточно простой. Существуют системные настройки, которые используются всеми пользователями, а также индивидуальные настройки, которые пользователи могут изменять в соответствии со своими потребностями. Проблема заключается в том, что в различных дистрибутивах обработка файлов профилей осуществляется по-разному, при этом невозможно игнорировать значительные различия между командными оболочками, использующимися для входа в систему, и интерактивными командными оболочками. Обычно эти вопросы не очень заботят пользователей систем на основе ядра Linux. Но при необходимости внесения изменений в один из файлов профиля приходится выполнять крайне надоедливые исследования с целью определения порядка загрузки файлов профиля, а также выявления файлов, которые загружаются лишь командными оболочками, использующимися для входа в систему, и так далее…
Командные оболочки, использующиеся для входа в систему
Во-первых, позвольте дать небольшие пояснения относительно того, какие командные оболочки я имею в виду при разговоре о командных оболочках, использующихся для входа в систему. Вы наверняка обратили внимание на то, что в некоторых случаях при открытии командной оболочки вам предлагается ввести имя пользователя и пароль. В других случаях после нажатия на иконку эмулятора терминала вы сразу же можете работать с командной оболочкой от лица текущего пользователя. Это чаще всего происходит при работе с графическим окружением рабочего стола. По сути, если вы уже вошли в Linux-систему, установленную на вашем настольном компьютере, при открытии окна эмулятора терминала вам предоставляется интерактивная командная оболочка.
Однако, наличие графического окружения рабочего стола совсем не обязательно. Если вы воспользуетесь клиентом ssh для открытия командной оболочки на удаленном сервере, вам будет предложено ввести имя пользователя и пароль (следовательно, в этом случае вы будете иметь дело с командной оболочкой, использующейся для входа в систему). Если после этого в рамках сессии SSH ввести команду bash , откроется совершенно новый терминал, причем в этом случае вы будете иметь дело уже с интерактивной командной оболочкой (обратите внимание на то, что вам не нужно будет вводить пароль). Я расскажу о важности этого различия чуть позже, но, в любом случае, просто помните о том, что при запросе имени пользователя и пароля вы наверняка имеете дело с командной оболочкой, использующейся для входа в систему. Если же вы сразу видите приветствие командной оболочки bash, вы наверняка имеете дело с интерактивной командной оболочкой. Единственным довольно часто встречающимся исключением из данного правила является командная оболочка с ключами SSH, которые позволяют осуществлять автоматический вход в систему без ввода пароля. В этом случае, несмотря на отсутствие запроса имени пользователя и пароля, вы имеете дело с командной оболочкой, использующейся для входа в систему. Вообще, вы с большой вероятностью будете правы, если будете считать, что при доступе к удаленной системе по протоколу SSH всегда используется командная оболочка для входа в систему.
Принцип работы командной оболочки, использующейся для входа в систему
Принцип работы командной оболочки, использующейся для входа в систему, является гораздо боле запутанным, чем принцип работы интерактивной командной оболочки, поэтому я предлагаю рассмотреть его в первую очередь. Будем считать, что на уровне учетных записей пользователей вашей системы в файле конфигурации /etc/passwd в качестве командной оболочки установлена командная оболочка bash. Это наиболее популярная командная оболочка, поэтому есть смысл разобраться с нюансами ее работы.
Шаг 1: после аутентификации с помощью командной оболочки, использующейся для входа в систему, осуществляется поиск файла с именем /etc/profile. Это файл сценария командной оболочки, с помощью которого осуществляется установка значений нескольких переменных окружения для всех пользователей системы.
Шаг 2: сценарий /etc/profile перед завершением своей работы обычно осуществляет подключение всех сценариев из директории /etc/profile.d и их исполнение. В большинстве случаев исполняются лишь сценарии с расширением .sh из директории /etc/profile.d, но, в любом случае, следует заглянуть в код сценария /etc/profile для того, чтобы выяснить особенности форматирования дополнительных сценариев для их успешного исполнения. Использование директории для дополнительных сценариев является важным аспектом рассматриваемого механизма, так как она позволяет модифицировать рабочее окружение каждого из пользователей в масштабах всей системы на уровне командной оболочки, использующейся для входа в систему, без опасной модификации сценария /etc/profile. Кроме того, при ее отсутствии любые обновления системы, затрагивающие файл сценария /etc/profile, могли бы уничтожать внесенные вами изменения. В случае же простого добавления файла сценария в директорию /etc/profile.d, он будет подключен сценарием /etc/profile даже после обновления последнего.
Шаг 3: впоследствии сценарий /etc/profile исполняет сценарии пользовательского профиля. Эта часть является немного неоднозначной, так как могут исполняться различные сценарии из состава пользовательского профиля в зависимости от используемого дистрибутива и/или пользовательских настроек. В общем случае будет предпринята попытка подключения сценариев со перечисленными ниже именами из состава пользовательского профиля в следующей последовательности:
По сути, на данном этапе осуществляется поиск файла сценария с именем из приведенного выше списка в домашней директории пользователя, его исполнение и завершение работы основного сценария. В данном случае при наличии файлов сценариев с именами .bash_profile и .profile в домашней директории будет исполнен лишь один из них, а именно, .bash_profile. Это обстоятельство необходимо учитывать в том случае, если вы желаете изменить ваш профиль рабочего окружения, но не горите желанием редактировать его оригинальные файлы. По умолчанию в дистрибутиве Ubuntu в домашнюю директорию каждого пользователя копируется файл .profile, но при этом в ней отсутствуют файлы .bash_profile и .bash_login. Таким образом, если вы хотите изменить профиль своего рабочего окружения, вы можете просто создать в своей домашней директории копию сценария .profile с именем .bash_profile и внести в нее все необходимые коррективы. В этом случае в вашей директории останется оригинальный файл .profile в своем первозданном виде, при этом все необходимые вам команды будут корректно исполняться. Просто помните о том, что при создании пустого файла с именем .bash_profile система будет считать его сценарием конфигурации вашего рабочего окружения и полностью игнорировать файл сценария с именем .profile!
Шаг 4: наконец, последним файлом, исполняемым силами командной оболочки, использующейся для входа в систему, является файл .bashrc из домашней директории пользователя. Это еще один файл сценария — и на этот раз он вызывается из сценария .profile, исполняющегося на шаге 3. Обратите внимание на то, что при изменении профиля пользователя при любых обстоятельствах необходимо проверять наличие в используемом сценарии команды для вызова сценария .bashrc. В рамках сценария .bashrc осуществляется применение персональных параметров конфигурации, таких, как нестандартное приветствие или цвет текста командной оболочки, а также активация псевдонимов для команд (подробнее о них будет сказано позднее).
Шаг 5: данный шаг на самом деле не выполняется после шага 4; наоборот, он может выполняться после шага 1. Сценарий /etc/profile сразу же после начала загрузки сценариев пользовательских профилей начинает исполнение системного файла сценарий bashrc. Опять же, в различных дистрибутивах этот файл носит разные имена, но чаще всего встречается либо /etc/bashrc, либо /etc/bash.bashrc. В случае дистрибутива Ubuntu это файл /etc/bash.bashrc, но исторически он всегда носил имя /etc/bashrc. Учтите, что в отличие от пользовательского файла .bashrc, имя системного файла bashrc не начинается с символа точки.
Для достижения еще большего разнообразия некоторые системы не исполняют системный файл bashrc при начале работы с командными оболочками, используемыми для входа в систему, поэтому в том случае, если вы не обнаружите вызов этого файла сценария в коде из файла сценария /etc/profile, он гарантированно не будет исполнен при начале работы с командной оболочкой, используемой при входе в систему. Однако, в большинстве дистрибутивов файл сценария /etc/profile все-таки содержит вызов системного файла сценария bashrc. А так как вам теперь известен порядок загрузки файлов сценариев профиля, вы можете исследовать свою систему и определиться с тем, какие файлы сценариев задействуются при начале работы с командной оболочкой, используемой для входа в систему.
Интерактивные командные оболочки
При начале работы с интерактивной командной оболочкой выполняется гораздо более простая последовательность операций. Процесс подготовки рабочего окружения, выполняющийся при открытии пользователем интерактивной командной оболочки (то есть, командной оболочки, которая не предлагает пройти аутентификацию с использованием имени пользователя и пароля), может быть разделен на отдельные шаги следующим образом:
Шаг 1: исполняется файл сценария /etc/bashrc или /etc/bash.bashrc. Исполнение этого файла сценария никоим образом не зависит от наличия соответствующей ссылки в файле сценария /etc/profile. В то время, как командная оболочка, используемая для входа в систему, автоматически исполняет файл сценария /etc/profile, интерактивная командная оболочка автоматически исполняет файл сценария /etc/bashrc (или /etc/bash.bashrc).
Шаг 2: исполняется файл .bashrc из домашней директории пользователя. И снова, как и в случае с системным файлом сценария bashrc, данный файл вызывается не из файла сценария пользовательского профиля; напротив, он исполняется непосредственно интерактивной командной оболочкой. Таким образом, если вы удалите ссылку на файл сценария .bashrc из файла сценария .profile, интерактивная командная оболочка все так же будет исполнять его.
И на этом процесс подготовки рабочего окружения заканчивается! Интерактивная командная оболочка не обрабатывает какую-либо информацию, касающуюся профиля пользователя из системной или пользовательской директорий. Однако, ввиду того, что интерактивная командная оболочка является «дочерним» процессом командной оболочки, используемой для входа в систему (посредством эмулятора терминала с графическим интерфейсом или клиента SSH), она наследует всю информацию, относящуюся к профилю пользователя, которая была получена родительской командной оболочкой. Таким образом, несмотря на то, что как командная оболочка, используемая для входа в систему, так и «дочерняя» интерактивная командная оболочка имеют доступ к одинаковой информации, относящейся к профилю пользователя, интерактивная командная оболочка не осуществляет повторную загрузку этой информации, что очень важно понимать. Эта командная оболочка никогда не использует сценарии, относящиеся к профилям пользователей, поэтому любая информация, которая была загружена при входе в систему средствами соответствующих сценариев, является единственной доступной ей информацией. (Данное разделение будет еще более важным при детальном рассмотрении функций описанных сценариев.)
Для чего предназначены файлы профилей?
Во-первых, я хотел бы предупредить вас о следующем: я могу говорить лишь о тех операциях, которые выполняются с помощью файлов профилей и rc-файлов, поставляемых в составе системы по умолчанию. Конечно же, любой человек имеет возможность изменить набор этих операций, просто отредактировав соответствующие файлы профилей или rc-файлы. Но все же, при любых обстоятельствах рекомендуется придерживаться стандартов.
Файлы профилей используются главным образом для загрузки значений переменных окружения. Так как файлы профилей загружаются командными оболочками, используемыми для входа в систему, а эти оболочки, в свою очередь, являются начальной точкой входа пользователей в систему, в установке значений переменных окружения на этом этапе имеется смысл. Одной из самых важных переменных окружения является переменная PATH. Установка значения переменной окружения PATH осуществляется в момент инициирования создания командной оболочки для входа в систему. Значения других переменных окружения также могут устанавливаться как системном файле профиля, так и в файлах профилей отдельных пользователей, но на данный момент вам следует усвоить, что система профилей является системой, осуществляющей установку значений большинства переменных окружения.
Порядок загрузки информации профиля является очень важным, так как при возникновении необходимости в изменении информации из стандартного системного профиля вы должны иметь возможность установки значений соответствующих переменных окружения на уровне файла сценария вашего пользовательского профиля. Например, значение переменной PATH обычно модифицируется силами файла сценария профиля пользователя в момент входа последнего в систему. Обычно с помощью файла с именем .profile (или же файла с именем .bash_profile или другими именами, упомянутыми выше) осуществляется добавление подстроки
/bin к значению переменной окружения PATH в том случае, если пользователи имеют директории для хранения бинарных файлов bin в рамках своих домашних директорий. Ввиду того, что пользовательские файлы профилей загружаются после системного файла профиля, пользовательские настройки имеют приоритет перед системными.
Для чего предназначены RC-файлы?
И снова, если говорить обобщенно, системный файл сценария bashrc и после него отдельные пользовательские файлы сценариев .bashrc обычно используются для установки параметров интерфейса командной строки системы. Если вы хотите использовать собственное приветствие или определенную цветовую схему командной оболочки, вы можете прибегнуть к редактированию одного из файлов bashrc. Практически так же, как и в случае с системой профилей, настройки из пользовательских файлов .bashrc имеют приоритет перед настройками из системного файла bashrc (или файла bash.bashrc, о котором также говорилось выше). Это означает, что вы можете изменить поведение интерфейса командной строки системы в соответствии со своими предпочтениями, не затрагивая других пользователей системы.
Одна из наиболее частых модификаций файла .bashrc связана с добавлением псевдонимов команд. Псевдоним команды является своего рода текстовым сокращением, вместо которого подставляется указанная вами произвольная команда. Например, ниже приведен фрагмент файла .bashrc из домашней директории пользователя:
Благодаря объявлению соответствующего псевдонима команды, после ввода пользователем команды ll система будет исполнять команду ls -alF вместо нее. Это отличный механизм, позволяющий создавать сокращения для команд с множеством плохо запоминающихся параметров или команд, которые чаще всего используются.
Хотя я и не рекомендую заниматься дурачеством, механизм псевдонимов команд .bashrc также может являться почвой для различных шуток над теми из ваших бедных пользователей, которые не заботятся о выходе из системы. Представьте, что вы создали аналогичный псевдоним команды:
В результате каждый раз при выполнении команды ls они будут видеть шуточное (безвредное) сообщение! Да, с помощью механизма псевдонимов команд несложно организовать и более гнусные шутки, но так как все мы не забываем выйти из системы, когда отлучаемся от наших рабочих станций, нам не стоит беспокоиться об этом, верно?!
Некоторые ловушки
Понимание принципа работы командных оболочек значительно облегчает отладку системы. Вы наверняка уже поняли описанные аспекты их функционирования, но все же стоит дополнительно остановиться на некоторых важных моментах. При внесении изменений в любые из файлов сценариев профилей эти изменения не будут применены до момента запуска новой командной оболочки для входа в систему. Это же утверждение справедливо и в случае модификации файлов .bashrc, но ввиду простоты перезапуска интерактивной командной оболочки их гораздо проще активировать.
Одна из основных проблем, связанная с загрузкой файлов профилей, заключается в необходимости выхода из системы и повторного входа в нее для тестирования корректности изменения значений переменных окружения, таких, как PATH. Разумеется, вы можете установить значение переменной окружения и с помощью интерактивной командной оболочки, но при этом стоит помнить о том, что любая новая интерактивная командная оболочка будет наследовать параметры профиля оболочки, использованной для входа в систему, поэтому повторный вход в систему на самом деле является единственным способом для применения изменений на постоянной основе.
Кроме того, хотя я уже говорил об этом, я хотел бы повторить, что хотя сценарии системного (/etc/profile) и пользовательского профилей в большинстве случаев вызывают сценарии bashrc, они не обязаны это делать. Поэтому если вы внесете изменения в ваш файл профиля, с высокой вероятностью командные оболочки, используемые для входа в систему, будут вести себя не так, как интерактивные командные оболочки. Если это соответствует вашим целям, то отлично, но чаще всего вам придется добиваться исполнения сценариев bashrc командными оболочками, используемыми для входа в систему, так как это позволит повысить пользовательские качества интерфейса командной строки вашей системы.
Наконец, я хотел бы добавить, что лучшей методикой изучения принципа работы файлов профилей и rc-файлов являются эксперименты с вашей системой. Исследование способов манипуляций с настройками профилей полезно не только в ознакомительных целях, но и для значительного улучшения пользовательских качеств интерфейса командной строки вашей системы.
Источник