Linux login_shell和non-login shell区别

发布时间 2023-11-10 16:39:12作者: yun^-^

转载地址:linux中的login shell和non-login shell重点解析-CSDN博客

我们使用linux的时候会发现,当我们进入系统一进入 bash ,就有一堆变量可以使用,这些东西都是从哪来的呢?这就要归功于linux系统里面的配置文件了。当我们的系统启动之后,它们就会开始读取我们的配置文件让我们后续可以正常的使用。

接下来,我们需要介绍两个重要概念,一个叫login shell,一个叫non-login shell。

1、login shell:

为什么要介绍 login, non-login shell 呢?这是因为这两个取得 bash 的情况中,读取的配置文件数据并不一样所致。 由于我们需要登陆系统,所以先谈谈 login shell 会读取哪些配置文件?

一般来说,login shell 其实只会读取这两个配置文件:

我们可以查看一下“~/.bash_profile”文件内容:

这个文件的内容比较有趣的地方在于 if ... then ... 那一段! 该段的内容指的是判断家目录下的 ~/.bashrc 存在否,若存在则读入 ~/.bashrc 的配置。

至于~/.bash_login 或 ~/.profile,我们前面提到过,bash 的 login shell 配置只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺序。即按照顺序,哪个文件存在就只读取哪个文件,而最后都是读取~/.bashrc 的配置。

我们再看看~/.bashrc文件的内容:

 

我们可以知道在该文件中,最后会读取/etc/bashrc文件的配置。

我们总结一下就是下面的这张图片:

 

 

 

 

实线的的方向是主线流程,虚线的方向则是被调用的配置文件!从上面我们也可以清楚的知道,在 login shell 环境下,最终被读取的配置文件是“~/.bashrc ”这个文件。所以,我们可以将自己的偏好配置写入该文件即可 。

2、non-login shell:
non-login shell则只会读取~/.bashrc这一个文件。

当然了,还有一些比如/etc/man.config、~/.bash_history、~/.bash_logout等文件也会影响bash的操作,有兴趣的朋友可以再扩展学习。这里我们主要介绍这部分的重点。

3、login shell与non-login shell的实例区别
我们很多朋友在使用linux的时候肯定会使用到su这个命令,但是很多朋友在使用的时候却常常误用。为什么说是误用?我们接下来就用su这个命令来介绍login shell与non-login shell究竟给我们会带来什么影响。

首先,我们介绍一下su命令:

这里我们重点强调一下 su和su -,su没有带用户名表示切换到root用户,但是是以non-login-shell的形式登陆;而su -则表示以login-shell切换root用户。我们看一下,他们有什么区别:

通过比较,我们可以明显发现,以不同的方式登陆后,它们的环境变量存在很大的区别,那么这是什么原因呢,大家应该可以猜到,就是因为他们分别以 non-login-shell和login-shell获取shell后,系统读取的配置文件不同导致的。所以为了我们正常的使用,我们应该使用su -、su - root或者su -l root以login shell方式切换至root用户,而不是su或者su root以non-login shell方式切换至root用户