〜/ .profile,〜/ .bashrc,〜/ .bash_profile,〜/ .gnomerc,/ etc / bash_bashrc,/ etc / screenrc…有什么区别?


68

回答关于SOaskubuntu的问题,以及翻阅(和阅读)的标头,$HOME/etc/指出了许多可用于设置环境变量的文件,包括:

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

我收集/etc/所有用户的工作文件,而其中的文件$HOME是特定于用户的。我还收集了.profile在登录.bashrc时加载的内容,而在/bin/bash执行时加载的内容。我也了解不同的程序具有不同的设置文件(例如.RprofileR)。但我希望您能澄清一下:

  • *rc*profile文件本质上的区别?
  • 此类文件的范围是什么(例如,Linux通常使用哪些文件)
  • 是否有层次结构(例如,.bashrc覆盖中设置的变量.settings
  • 此类文件有什么好的参考?对于这些文件中的选项?

关联问题


3
请参阅中的INVOCATION部分man bash。请参阅FHS有关Linux文件系统的Wiki文章。这将为您提供一个良好的开端,并回答以下两个问题。带前一个点(.)的文件通常是特定于用户的-它们位于用户$HOME目录中。

3
他们全部?真?
伊格纳西奥·巴斯克斯

@ IgnacioVazquez-Abrams我不是在寻找细节,只是在总体上描述它们之间的关系以及何时应使用它们。
2012年

Answers:


48

配置文件的组织远没有您的问题所暗示的统一。没有“类”,没有“层次结构”,也没有全球性的“配置沙皇”,也没有委员会裁定通用语法或其他不错的简洁概括,例如您所寻求的。只有,,和GNOME桌面环境等众多单独的应用程序R,它们都有各自的处理方式,因此您应该查看每个程序的文档,以回答有关特定文件的任何特定问题。如果是临时的,那是因为:那里的大多数Unix / Linux软件都是由不同的人出于不同的目的开发的,他们的配置略有不同。bashscreen

要明确回答您的其他问题:

  • *rc而且*profile意义不大,因此无法真正回答该问题。“ rc”仅是配置文件的常用缩写或后缀。它的词源可以追溯到远古时代(在计算机时代),并且可能意味着运行命令(来自runco​​m)。仅仅因为应用程序使用相同的词并不意味着它们同意约定。“配置文件”是一个不太常见的后缀。

  • 定义“范围”。大多数应用程序不与其他不相关的应用程序共享配置文件。一个可能的例外是/etc/profile.profile,可以由多个不同的外壳程序使用(至少包括shbash)。每个正在运行的进程都有一个称为环境的环境,其中可能包含可能影响所述进程行为的变量。通常,环境变量是由适当的外壳程序配置文件或您正在使用的任何图形桌面环境的配置文件设置的。还有用于“库”的配置文件,例如.inputrcreadline和.gtkrc*GTK,它们会影响使用该库的每个应用程序。

  • 不,配置文件没有全局层次结构。再次,参考文档为特定程序中的问题,例如,在bash手动bash。您通常可以依靠的一般约定是中的用户设置$HOME会覆盖中的系统级配置/etc。通常,这是通过在系统文件读取之后读取用户文件来完成的,以便以后的设置覆盖以前的文件。但是,这不能保证,对于确定的答案,您应该参考所用特定程序的文档。

  • 没有“类”,至少没有一个通用性足以涵盖问题中列出的所有文件,因此此类“类”的引用问题尚无定论。同样,请参阅所使用的特定程序的文档。


5

我认为这个问题在很多层面上都过于广泛,例如,您在一个问题中问的是至少四个不同程序的问题。我只会看一下/etc和中配置文件之间的区别$HOME

UNIX是一个多用户操作系统中,这意味着许多不同的人可以使用的系统中,或者通过使用sshtelnetXorg。为了为您的用户提供标准化的配置,您可以在其中提供系统范围的配置/etc/,您的发行版通常也使用它来为bash或提供全局配置screen

另一方面,某些用户希望自己定制程序的设置,例如键绑定,颜色或外观。这是通过其中的配置文件完成的$HOME。简而言之,/etc/它提供了系统范围的配置,而$ HOME中的配置文件则允许用户更改/覆盖系统范围的配置。


3

部分答案来自此文章

.bashrc 是一个Shell脚本,只要交互式启动,Bash就会运行。

对比.bash_profile.profile仅在新登录Shell的开头运行。(bash -l)

您选择的命令是否已经在.bashrcVS .bash_profile取决于你是否希望它运行一次或每交互shell启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.