一、系统环境变量:
系统环境变量相关文件包括:/etc/profile 、 /etc/profile.d/*.sh 、 /etc/bashrc
(1)/etc/profile :这个文件预设了几个重要的变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等等。从安全角度考虑,通常不会在此文件中进行环境变量设置。
/etc/profile文件中有执行/etc/profile.d目录下脚本的代码,因此一般在/etc/profile.d目录下,通过shell脚本,设置系统环境变量:
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
(2)/etc/profile/*.sh:设置系统环境变量,如my_env.sh
# JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_212
#HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-3.1.3
#ZOOKEEPER_HOME
ZOOKEEPER_HOME=/opt/module/zookeeper-3.5.7
#KAFKA_HOME
KAFKA_HOME=/opt/module/kafka
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$KAFKA_HOME/bin
export PATH JAVA_HOME HADOOP_HOME ZOOKEEPER_HOME KAFKA_HOME
(3)/etc/bashrc :这个文件主要预设umask以及PS1。这个PS1就是我们在敲命令时,前面那串字符了,例如 [root@localhost ~]#,当bash shell被打开时,该文件被读取。改文件读取时,会执行/etc/profile.d/*.sh脚本
for i in /etc/profile.d/*.sh; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
二、用户环境变量:
用户环境变量相关文件包括:~/.bash_profile 、 ~/.bashrc 、 ~/.bash_history 、 ~/.bash_logout
(1).bash_profile :定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。(在这个文件中有执行.bashrc的脚本)
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
(2).bashrc :该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中。/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。此外,在用户目录下的.bashrc有执行/etc/bashrc的脚本。
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
(3).bash_history :记录命令历史用的。
(4).bash_logout :当退出shell时,会执行该文件。可以把一些清理的工作放到这个文件中。
三、启动过程
(1)正常登录配置文件顺序加载过程,所谓正常登录指用户通过输入用户名和密码登录的状态(包括ssh登录,su - 切换用户)。
login shell,会导致系统文件/etc/profile,/etc/bashrc,用户文件.bash_profile和.bashrc加载。

ssh远程账户密码登录:
[jl@hadoop103 ~]$ ssh hadoop102
Last login: Sun May 17 08:25:39 2020 from 192.168.238.1
/etc/profile start
/etc/profile.d/my_env start
/etc/profile.d/my_env end
/etc/profile end
~/.bash_profile start
~/.bashrc start
/etc/bashrc start
/etc/bashrc end
~/.bashrc end
~/.bash_profile end
(2)非登录式文件加载过程,如执行/bin/bash和su切换用户
nologin shell,只会加载系统文件/etc/bashrc和用户文件.bashrc。

执行/bin/bash:
[jl@hadoop102 ~]$ /bin/bash
~/.bashrc start
/etc/bashrc start
/etc/profile.d/my_env start
/etc/profile.d/my_env end
/etc/bashrc end
~/.bashrc end
执行su切换用户:
[root@hadoop102 jl]# su jl
~/.bashrc start
/etc/bashrc start
/etc/profile.d/my_env start
/etc/profile.d/my_env end
/etc/bashrc end
~/.bashrc end
四、用户退出
用户退出,会直接加载用户文件.bash_history和.bash_logout。
本文详细介绍了Linux系统环境变量的配置文件,包括/etc/profile、/etc/bashrc及其相关脚本,以及用户环境变量文件如.bash_profile和.bashrc的作用。在启动过程中,登录shell会依次加载/etc/profile、/etc/bashrc、.bash_profile和.bashrc,非登录式shell则只加载/etc/bashrc和.bashrc。用户退出时,会执行.bash_history和.bash_logout。
1331

被折叠的 条评论
为什么被折叠?



