linux登陆系统后,环境变量加载顺序

登陆系统后,环境变量加载顺序

  • 登陆shell:(SSH或在控制台登录)需要输入账户密码

    • /etc/profile -> /etc/profile.d/*.sh -> /etc/bashrc -> ~/.bashrc -> ~/.bash_profile
  • 非登陆shell:(不需要输入账户密码)

    • ~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh

验证可以通过每个文件新增echo输出,su - xxx / su xxx


理解登录Shell与非登录Shell:

  • 登录Shell(Login Shell):

    • 通常是通过终端登录系统(例如,通过SSH或在控制台登录)时启动的Shell。
  • 非登录Shell(Non-login Shell):

    • 在已经登录的系统上启动的Shell,不需要再次输入用户名和密码。

非登录Shell的常见情况:

  1. 在图形界面中打开终端:
    • 当你在Linux桌面环境中打开终端程序时,启动的Shell通常是非登录Shell。
  2. 在一个已有的Shell会话中启动新的Shell:
    • 如果你在一个已经运行的终端中输入bashsh等命令,启动一个新的Shell,这个新Shell也是非登录Shell。
  3. 运行Shell脚本:
    • 当执行一个Shell脚本时,脚本中的Shell环境通常是非登录Shell。
  4. 在程序中调用Shell:
    • 例如,某些程序会调用系统命令,这些命令的执行环境也属于非登陆shell。

关键区别与配置文件:

  • 登录Shell和非登录Shell的主要区别在于它们读取的配置文件不同,这决定了Shell环境的初始化方式。
  • 非登录Shell通常主要依赖~/.bashrc文件来设置环境,而登录Shell则会优先读取profile相关文件。

补充说明:

  • Shell还可以分为交互式Shell和非交互式Shell。
    • 交互式Shell允许用户与Shell进行交互,输入命令并查看输出。
    • 非交互式Shell通常用于执行Shell脚本,不需要用户交互。
  • 所以非登陆shell还可以细分为,交互式非登陆shell,和非交互式非登陆shell。