1

我使用多种版本的 linux(CentOS、SuSe 和 Ubuntu),每次我需要弄乱 PATH 时,我都会遇到不知道默认定义的东西在哪里的问题。

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

4

3 回答 3

3

对于 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的优秀流程图: 在此处输入图像描述

于 2017-08-09T04:30:18.927 回答
1

/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 读取和执行命令。

于 2013-09-13T17:09:57.610 回答
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

于 2013-09-13T17:06:23.220 回答