正常登陆情况下(不是系统启动过程而是输入用户名和密码登录时,或者注销用户重新登录),环境变量配置文件的调用过程:
// 正常登陆时环境变量配置文件的调用过程
/etc/profile
|
--/etc/profile.d/*
|
--/etc/profile.d/lang.sh
|
--/etc/sysconfig/i18n
|
~/.bash_profile
|
--~/.bashrc
|
--/etc/bashrc
|
--命令提示符
// 通过su方式切换用户的登录时
/etc/bashrc
|
--/etc/profile.d/*.sh
|
--/etc/profile.d/lang.sh
|
--/etc/sysconfig/i18n
|
--命令提示符
//一个普通交互式bash的加载环境变量配置文件过程是:
~/.bashrc
|
--/etc/bashrc
|
--/etc/profile.d/*.sh
|
--命令提示符
如果用户的Shell不是登录时启动的(比如手动敲下bash时启动或者其他不需要输入密码的登录及远程SSH连接情况),那么这种非登录Shell只会加载$HOME/.bashrc(用户环境变量文件),并会去找/etc/bashrc(全局环境变量文件)。因此如果希望在非登录Shell下也可读到设置的环境变量等内容,就需要将变量设定等写入$HOME/.bashrc或者/etc/bashrc,而不是$HOME/.bash_profile或者/etc/profile。
之前,在单位同事出现过这种情况:
在该配置文件中有PS1提示符环境变量的定义,如果该/etc/bashrc文件没有被调用则无法显示PS1中定义的提示符信息。
// linux提示符信息
[root@localhost ~]#
// 变成了下面的情况
bash5.2#
原因:/etc/bashrc中定义了PS1提示符环境变量,它没有被调用。为什么没有被调用呢?我们配置了Samba服务,家目录也是默认共享出来的。家目录中的隐藏文件被显示出来,同事就随意的进行删除。那么就导致了这个问题。
- ~/.bashrc 被删除后,就不会调用/etc/bashrc
- 单用户模式也不会调用/etc/bashrc
解决:
可以拷贝正常系统中的/etc/bashrc文件