linux中环境变量详解

linux中环境变量详解

https://blog.csdn.net/qq_39715000/article/details/125023190

 

login shell和non-login shell两者有什么区别呢?
login shell:取得 bash 时需要完整的登陆流程的就称为 login shell。举例来说,我们通过 ctrl+alt+fn 登陆 tty1 ~ tty6 时,需要输入用户的账号与密码,此时取得的 bash 就称为“ login shell ”;
non-login shell:取得 bash 接口的方法不需要重复登陆的举动的就称为 non-login shell。举例来说,我们登陆 Linux 后, 右键启动的终端 Terminal或者在原本的 bash 环境下再次使用 bash 这个命令,建立的bash子进程,都称为 non-login shell。

为什么要介绍这两种bash的运行方式呢?
这是因为这两种shell启动时会加载不同的配置文件,login shell启动时会加载/etc/profile,~/.bash_profile,~/.bashrc。non-login shell启动时会加载~/.bashrc。

而在加载~/.bashrc(实际是~/.bashrc中加载的/etc/bashrc)或/etc/profile时,都会执行如下代码片段,它会去执行/etc/profile.d目录下的所有.sh后缀的bash脚本。

login shell和non-login shell在启动时主要加载的配置文件如下图所示。

这里顺便提一下su和su -,su表示以non-login-shell的切换root用户;而su -则表示以login-shell切换root用户。大家感兴趣的可以分别以这两种方式切换用户并执行env指令查看一下环境变量,你会发现以su -方式切换的环境变量远远多于su方式。

所以,不管是login shell还是non-login shell,启动时都会加载/etc/profile.d/*.sh中的环境变量。所以我们一般会在/etc/profile.d中创建一个 my_env.sh 文件用于配置我们自己的环境变量。

posted @ 2022-11-18 15:17  大司徒  阅读(73)  评论(0编辑  收藏  举报