В чем разница между ~ / .profile, ~ / .bashrc, ~ / .bash_profile, ~ / .gnomerc, / etc / bash_bashrc, / etc / screenrc…?

68

Ответы на вопросы по SO и askubuntu , а также просмотр (и чтение заголовков) $HOMEи /etc/, указывают ряд файлов, которые можно использовать для установки переменных среды, включая:

  • ~/.profile
  • ~/.bashrc
  • ~/.bash_profile
  • ~/.gnomerc
  • ~/.Rprofile
  • /etc/bash_bashrc
  • /etc/profile
  • /etc/screenrc

Я собираю, что файлы в /etc/работе для всех пользователей, тогда как файлы в $HOMEявляются для конкретного пользователя. Я также собираюсь, что .profileзагружается при входе в систему, тогда как .bashrcзагружается, когда /bin/bashвыполняется. Я также понимаю, что разные программы имеют разные файлы настроек (например, .Rprofileдля R). Но я был бы признателен за некоторые разъяснения:

  • Существуют *rcи *profileфайлы в корне отличается?
  • Каков объем таких файлов (например, какие файлы обычно используются в Linux)
  • Есть ли иерархия (например, .bashrcперезаписывает установленные переменные .settings)
  • Что является хорошей ссылкой для этого класса файлов? Для вариантов в этих файлах?

Связанные вопросы

Abe
источник
3
Смотрите INVOCATIONраздел в man bash. Смотрите FHSвики-статью о файловых системах Linux. Это даст вам хорошее начало и ответит на пару вопросов. Файлы с предыдущей точкой ( .), как правило, зависят от пользователя - они находятся в $HOMEкаталоге пользователя .
3
Все они? В самом деле?
Игнасио Васкес-Абрамс
@ IgnacioVazquez-Abrams Я не ищу детали, просто общее описание того, как они связаны и когда один должен использоваться над другим.
Абэ

Ответы:

48

Организация файлов конфигурации гораздо менее унифицирована, чем могут показаться из ваших вопросов. Нет «класса», нет «иерархии», и нет ни глобального «царя конфигурации», ни комитета, который бы определял общий синтаксис или другие хорошие чистые обобщения, подобные тем, которые вы ищете. Существует лишь множество отдельных приложений , таких как R, bash, screenи рабочий стол GNOME окружающей среды, все из которых имеют свои собственные способы ведения дел, так что вы должны смотреть на документацию для каждой отдельной программы , чтобы ответить на любые конкретные вопросы конкретного файла. Если это кажется нерегулярным, это потому, что так оно и есть: большая часть программного обеспечения Unix / Linux там была разработана для разных целей разными людьми, которые все настраивали немного по-разному.

Чтобы ответить на ваши другие вопросы точечно:

  • *rcи *profileне очень много значат, так что на этот вопрос невозможно ответить. «rc» - это просто часто используемое сокращение или суффикс для файлов конфигурации. Его этимология восходит к древним временам (в компьютерные годы) и, вероятно, означает запуск команд (из runcom ). То, что приложения используют одно и то же слово, не означает, что они согласны с соглашениями. «Профиль» - это гораздо менее распространенный суффикс.

  • Определите «область». Большинство приложений не делятся файлами конфигурации с другими не связанными приложениями. Единственным возможным исключением является /etc/profileи .profile, которое может использоваться несколькими различными оболочками (включая, по крайней мере, shи bash). С каждым запущенным процессом связана среда, которая может содержать переменные, которые могут влиять на поведение указанного процесса. Как правило, переменные среды задаются соответствующими файлами конфигурации оболочки или, возможно, файлами конфигурации любой графической среды рабочего стола, которую вы используете. Существуют также файлы конфигурации для «библиотек», таких как .inputrcreadline и .gtkrc*GTK, которые влияют на каждое приложение, которое использует библиотеку.

  • Нет, для файлов конфигурации нет глобальной иерархии. Опять же , обратитесь к документации по конкретной программе идет речь, к примеру, bashруководство по bash. Общее соглашение, на которое вы обычно можете положиться, заключается в том, что пользовательские настройки $HOMEпереопределяют общесистемную конфигурацию в /etc. Обычно это достигается путем чтения пользовательского файла после системного, чтобы более поздние настройки перезаписывали более ранние. Однако это не является гарантией, и для окончательных ответов вам следует обратиться к документации по конкретной программе, которую вы используете.

  • Нет «класса», по крайней мере, нет достаточно общего, чтобы охватить все файлы, которые вы указали в своем вопросе, поэтому вопрос о ссылке на такой «класс» спорный. Опять же, обратитесь к документации конкретной программы, которую вы используете.

jw013
источник
5

Я думаю, что этот вопрос слишком широк на многих уровнях, например, вы задаете вопросы по крайней мере о четырех разных программах в одном вопросе. Я только посмотрю на разницу между файлами конфигурации в /etcи $HOME.

Unix является операционной системой многопользовательский, это означает , что многие разные люди могут использовать систему, либо с помощью ssh, telnetили Xorg. Чтобы обеспечить стандартизированную конфигурацию для ваших пользователей, вы можете предоставить общесистемную конфигурацию /etc/, обычно она также используется вашим дистрибутивом для обеспечения глобальной конфигурации, например, bashили screen.

С другой стороны, некоторые пользователи хотят настроить параметры своих программ по своему усмотрению, такие как сочетания клавиш, цвета или внешний вид. Это делается через файл конфигурации в их $HOME. Короче говоря, /etc/обеспечивает общесистемную конфигурацию, в то время как файлы конфигурации в $ HOME позволяют пользователям изменять / переопределять общесистемную конфигурацию.

Ульрих Дангел
источник
3

Часть ответа приходит из этого поста :

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

Контраст .bash_profileи .profileкоторые запускаются только в начале новой оболочки входа в систему. (Баш-л)

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

Стан
источник