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

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

Ответы на вопросы по темеТАКиаскубунту, а также просмотр (и чтение заголовков) $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)
  • Что является хорошей ссылкой для этого класса файлов? Для опций в этих файлах?

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

решение1

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

Отвечая на ваши другие вопросы по существу:

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

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

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

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

решение2

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

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

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

решение3

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

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

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

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

Связанный контент