.bashrc .bash_profile和/ etc / profile之间的差异,用途和相似之处

时间:2013-09-13 16:56:30

标签: linux bash environment

我使用几种Linux(CentOS,SuSe和Ubuntu),每当我需要弄乱PATH时,我遇到了不知道默认情况下定义的地方的问题。

据我所知~/.bashrc~/.bash_profile/etc/profile是等式的一部分。有谁知道这些文件的用途和差异?

3 个答案:

答案 0 :(得分:2)

对于Bash,它们的工作方式如下。阅读相应的专栏。执行A,然后是B,然后执行C等.B1,B2,B3表示它只执行找到的第一个文件。

+----------------+-----------+-----------+------+
|                |Interactive|Interactive|Script|
|                |login      |non-login  |      |
+----------------+-----------+-----------+------+
|/etc/profile    |   A       |           |      |
+----------------+-----------+-----------+------+
|/etc/bash.bashrc|           |    A      |      |
+----------------+-----------+-----------+------+
|~/.bashrc       |           |    B      |      |
+----------------+-----------+-----------+------+
|~/.bash_profile |   B1      |           |      |
+----------------+-----------+-----------+------+
|~/.bash_login   |   B2      |           |      |
+----------------+-----------+-----------+------+
|~/.profile      |   B3      |           |      |
+----------------+-----------+-----------+------+
|BASH_ENV        |           |           |  A   |
+----------------+-----------+-----------+------+
|                |           |           |      |
+----------------+-----------+-----------+------+
|                |           |           |      |
+----------------+-----------+-----------+------+
|~/.bash_logout  |    C      |           |      |
+----------------+-----------+-----------+------+

更详细的是来自http://www.solipsys.co.uk/new/BashInitialisationFiles.html的优秀流程图: enter image description here

答案 1 :(得分:1)

.bashrc定义特定用户的shell环境。它每次bash启动时都会运行,无论它运行的是什么模式,例如交互式shell,从ssh user@host cat /etc/hosts等远程调用运行,甚至只是shell脚本。

.bash_profile是每用户登录配置文件。它在您登录时运行一次,并在用户与系统交互时执行操作,例如当天的消息或新消息列表。

/ etc / profile是一个系统范围的登录配置文件脚本。它在您登录时也会运行一次,但会在用户特定的.bash_profile

之前为所有用户运行

对于像PATH变量这样的环境,.bashrc或/etc/bash.bashrc是一个不错的地方,因此您不必担心登录或非登录shell。

此页面包含一些详细信息:http://stefaanlippens.net/bashrc_and_others

答案 2 :(得分:1)

/etc/profile是登录shell的全局配置(交互式或非交互式),~/.bash_profile是登录shell的每用户配置,~/.bashrc是交互式非登录shell的配置。 / p>

来自man bash

  

<强>调用

     

[...]

     

当bash作为交互式登录shell或具有--login选项的非交互式shell调用时,它首先从文件/ etc / profile中读取并执行命令(如果该文件存在)。在读取该文件之后,它按顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在且可读的第一个命令中读取并执行命令。启动shell以禁止此行为时,可以使用--noprofile选项。

     

[...]

     

当启动不是登录shell的交互式shell时,bash会读取并执行来自〜/ .bashrc的命令(如果该文件存在)。使用--norc选项可以禁止此操作。 --rcfile文件选项将强制bash从文件而不是〜/ .bashrc读取和执行命令。