我使用几种Linux(CentOS,SuSe和Ubuntu),每当我需要弄乱PATH时,我遇到了不知道默认情况下定义的地方的问题。
据我所知~/.bashrc
,~/.bash_profile
和/etc/profile
是等式的一部分。有谁知道这些文件的用途和差异?
答案 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的优秀流程图:
答案 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读取和执行命令。