当登入系统获得一个shell进程时,其读取环境设定档如下:
1. profile文件
1.1 profile文件的作用
profile(/etc/profile)
,用于设置系统级
的环境变量和启动程序,在这个文件下配置会对所有用户
生效。
当用户登录(login)时,文件会被执行,并从/etc/profile.d
目录的配置文件中查找shell设置。
1.2 在profile中添加环境变量
一般不建议
在/etc/profile
文件中添加环境变量,因为在这个文件中添加的设置会对所有用户起作用。
当必须添加时,我们可以按以下方式添加:
如配置JAVA环境变量:
export JAVA_HOME=/usr/softinstall/jdk1.8.0_231
添加时,可以在行尾使用;号,也可以不使用。
一个变量名可以对应多个变量值,多个变量值需要使用:进行分隔。
添加环境变量后,需要重新登录才能生效,也可以使用source
命令强制立即生效:
source /etc/profile
查看是否生效可以使用echo命令:
$ echo $JAVA_HOME
2. bashrc文件
bashrc文件用于配置函数或别名。bashrc文件有两种级别:
系统级
的位于/etc/bashrc
、用户级
的位于~/.bashrc
,两者分别会对所有用户和当前用户生效。
bashrc文件只会对指定的shell类型起作用,bashrc只会被bash shell调用。
3. bash_profile文件
bash_profile
只对单一用户有效,文件存储位于~/.bash_profile
,该文件是一个用户级的设置,可以理解为某一个用户的profile
目录下。
这个文件同样也可以用于配置环境变量和启动程序,但只针对单个用户有效。
和profile文件类似,bash_profile也会在用户登录(login)时生效,也可以用于设置环境变理。
但与profile不同,bash_profile只会对当前用户生效。
4.差异总结
1)首先读入全局环境变量设定档/etc/profile
,然后根据其内容读取额外的设定的文档,如/etc/profile.d
和/etc/inputrc
;
2)根据不同使用者帐号,于其home目录
内读取~/.bash_profile
;
读取失败则会读取~/.bash_login
;
再次失败则读取~/.profile
(这三个文档设定基本上无差别,仅读取上有优先关系);
3)最后,根据用户帐号读取~/.bashrc
。
至于~/.profile
与~/.bashrc
都具有个性化定制功能,但~/.profile
可以设定本用户专有的路径、环境变量等,它只能登入的时候执行一次。
~/.bashrc
也是某用户专有设定文档,可以设定路径、命令别名,每次shell script的执行都会使用它一次。
这三种文件类型的差异用一句话表述就是:
/etc/profile
,/etc/bashrc
是系统全局环境变量设定;~/.profile
,~/.bashrc
用户home目录
下的私有环境变量设定。
说明:
交互式shell
:等待用户输入,并执行相应操作的shell
非交互式shell
:读取存放在文件中的内容,并根据内容执行相应操作
login shell
:需要用户输入用户名以及密码进行下一步操作
non-login shell
:无需用户名及密码,运行时用户身份仅拥有低级操作权限(类似于临时工和正式员工的区别)。
例如:在email服务器上,non-login shell能让用户访问email服务器,使用email服务,但无法登录到主机,能够避免其对主机进行操作而造成损害。