在登入 Linux 时要执行档案的过程如下:
在刚登入 Linux 时,首先启动 /etc/profile 档案,然后再启动使用者目录下的 ~/.bash_profile 、 ~/.bash_login 或 ~/.profile 档案中的其中一个,
执行的顺序为:~/.bash_profile 、 ~/.bash_login 、 ~/.profile 。
如果 ~/.bash_profile 档案存在的话,一般还会执行 ~/.bashrc 档案。
因为在 ~/.bash_profile 档案中一般会有下面的程式码:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc 中,一般还会有以下程式码:
if [ -f /etc/bashrc ] ; then
. /etc/bashrc
fi
所以,~/.bashrc 会呼叫 /etc/bashrc 档案。最后,在退出 Shell 时,还会执行 ~/.bash_logout 档案。
执行顺序为: /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
关于各个档案的作用域,在网上找到了以下说明:
(1)/etc/profile: 此档案为系统的每个使用者设定环境资讯, 当使用者第一次登入时, 该档案被执行. 并从/etc/profile.d 目录的配置档案中搜集 shell 的设定。
(2)/etc/bashrc: 为每一个执行 bash shell 的使用者执行此档案. 当 bash shell 被开启时, 该档案被读取(即每次新开一个终端,都会执行 bashrc)。
(3)~/.bash_profile: 每个使用者都可使用该档案输入专用于自己使用的 shell 资讯, 当使用者登入时, 该档案仅仅执行一次。预设情况下, 设定一些环境变数, 执行使用者的.bashrc 档案。
(4)~/.bashrc: 该档案包含专用于你的 bash shell 的 bash 资讯, 当登入时以及每次开启新的 shell 时, 该该档案被读取。
(5)~/.bash_logout: 当每次退出系统 (退出 bash shell) 时, 执行该档案. 另外,/etc/profile 中设定的变数 (全域性) 的可以作用于任何使用者, 而~/.bashrc 等中设定的变数 (区域性) 只能继承 /etc/profile 中的变数, 他们是” 父子” 关系。
(6)~/.bash_profile: 是互动式、 login 方式进入 bash 执行的~/.bashrc 是互动式 non-login 方式进入 bash 执行的通常二者设定大致相同,所以通常前者会呼叫后者。
/etc/profile 和/etc/environment 等各种环境变数设定档案的用处
1)先将 export LANG=zh_CN 加入/etc/profile,退出系统重新登入,登入提示显示英文。
2)先将/etc/profile 中的 export LANG=zh_CN 删除,将 LNAG=zh_CN 加入/etc/environment,退出系统重新登入,登入提示显示中文。
使用者环境建立的过程中总是先执行/etc/profile,然后再读取/etc/environment 。为什么会有如上所叙的不同呢?而不是先执行/etc/environment,后执行/etc/profile 呢?
这是因为: /etc/environment 是设定整个系统的环境,而/etc/profile 是设定所有使用者的环境,前者与登入使用者无关,后者与登入使用者有关。
系统应用程式的执行与使用者环境可以是无关的,但与系统环境是相关的,所以当你登入时,你看到的提示资讯,如日期、时间资讯的显示格式与系统环境的 LANG 是相关的,预设 LANG=en_US,如果系统环境 LANG=zh_CN,则提示资讯是中文的,否则是英文的。
对于使用者的 shell 初始化而言是先执行/etc/profile,再读取档案/etc/environment;对整个系统而言是先执行/etc/environment 。这样理解正确吗?
登陆系统时的顺序应该是
/etc/enviroment –> /etc/profile –> $HOME/.profile –>$HOME/.env (如果存在)
/etc/profile 是所有使用者的环境变数
/etc/enviroment 是系统的环境变数
登陆系统时 shell 读取的顺序应该是
/etc/profile ->/etc/enviroment –>$HOME/.profile –>$HOME/.env
原因应该是使用者环境和系统环境的区别了,如果同一个变数在使用者环境 (/etc/profile) 和系统环境 (/etc/environment) 有不同的值,那应该是以使用者环境为准
原文连结:http://www.linuxde.net/2013/10/15352.html