linux中的login shell和non-login shell重点解析

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

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

1、login shell:

  • login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,我们登陆 tty1 ~ tty6 时,需要输入用户的账号与密码,此时取得的 bash 就称为“ login shell ”;
     

  • non-login shell:取得 bash 接口的方法不需要重复登陆的举动,比如我们登陆 Linux 后, 启动终端Terminal,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell了。又或者你在原本的 bash 环境下再次使用 bash 这个命令,建立了一个bash子进程,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。

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

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

  1. /etc/profile:这是系统整体的配置,一般尽量不要修改这个文件;
  2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人配置,需要修改自己的数据,就写入这些文件!(注意:其实 bash 的 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 [-lm] [-c 命令] [username]

选项与参数:

- :单纯使用 - 如『 su - 』代表使用 login-shell 的变量文件读取方式来登陆系统; 若使用者名称没有加上去,则代表切换为 root 的身份。

-l :与 - 类似,但后面需要加欲切换的使用者账号!也是 login-shell 的方式。

-m :-m 与 -p 是一样的,表示『使用目前的环境配置,而不读取新使用者的配置文件』

-c :仅进行一次命令,所以 -c 后面可以加上命令!

这里我们重点强调一下 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用户

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9号信箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值