.bashrc、.bash_profile和/etc/profile之间的区别、用途和相似之处

5
我使用几种Linux(CentOS,SuSe和Ubuntu),每次需要操作PATH时,我都会遇到不知道默认定义在哪里的问题。
据我所知,~/.bashrc、~/.bash_profile和/etc/profile都是相关文件。有人知道这些文件的用途和区别吗?

2
请参阅http://serverfault.com/questions/261802/profile-vs-bash-profile-vs-bashrc。 - lurker
3个回答

8

对于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


/etc/bashrc 怎么样? - kgibm
有人需要在这里输入图像描述! - user146043

2

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

man bash 中可以得到以下信息:

调用方式

[...]

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

[...]

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


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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接