login shell和non-login shell的区别:
source /etc/bashrc
在xterm下:
[root@fedora-maomao maomaovv]# logout
bash: logout: not login shell: use `exit'?????????????????????????????????? // 在interactive non-login shell下
[maomaovv@fedora-maomao ~]$ echo $VAR_TEST?????????? // 没有执行 /etc/profiles,从其父进程继承过来
[maomaovv@fedora-maomao ~]$ echo $BASHRC_TEST?? //执行了/etc/bashrc
bashrc
但是在2号终端上表现出不同的效果:
fedora-maomao login: maomaovv
Password:????????????????????????????????????????????????????????????????????????? // interactive login shell
[maomaovv@fedora-maomao~]$ echo $VAR_TEST????????? //执行了/etc/profiles
maomaovv
[maomaovv@fedora-maomao ~]$ echo $BASHRC_TEST?? //执行了/etc/bashrc
bashrc
[maomaovv@fedora-maomao ~]$ su root //切换到root用户
Password:
[root@fedora-maomao maomaovv]$ logout??????????????????????? //非login shell
bash: logout: not login shell: use `exit'?????
[root@fedora-maomao~]$ echo $VAR_TEST????????? //从其父进程继承过来
maomaovv
[root@fedora-maomao ~]$ echo $BASHRC_TEST?? //从其父进程继承过来
bashrc
[root@fedora-maomao ~]$ su - maomaovv //切换到用户maomaovv,并开启login shell
[maomaovv@fedora-maomao~]$ echo $VAR_TEST????????? //从其父进程继承过来
maomaovv
[maomaovv@fedora-maomao ~]$ echo $BASHRC_TEST?? //从其父进程继承过来
bashrc
[maomaovv@fedora-maomao maomaovv]$ logout???????????? //证实为login shell
[root@fedora-maomao maomaovv]$
在LFS手册中我们为了创建一个全新到操作系统,在开始编译任何工具之前需要以lfs帐号登录并清空所有不必要到环境变量,LFS是通过以下几个步骤达到该目的的:
1. su - lfs
切换到lfs用户,并打开login shell,此时该shell到环境变量从父进程继承过来,并会依次执行lfs帐号根目录下的.bash_profile和.bashrc配置文件,由于lfs是我们全新创建到一个用户,这两个配置文件都不存在。
2. 配置~/.bash_profile未摒弃从父进程继承来的环境变量做准备:
接下来在此想彻底理清bash的login shell与non-login shell
说老实话,到现在我还没用过login shell(没用过tty1~tty6的文字登入模式啦),也就是说,都是在X 介面下启动的终端而已,所以基本都是non-login shell~~
定义:
login shell:取得bash 时需要完整的登入流程,就称为login shell。举例来说,同tty1~tty6登入时, 需要输入用户名和密码,此时取得的bash就称为login shell
non-login shell:取得bash介面的方法不需要重复登入的动作。
举两个例子(1)以X window登入linux后,再以X 的图形化介面启动终端机,此时那个终端机并不需要再次的输入用户名和密码,那个bash的环境就称为non-login shell?
(2)在原本的bash环境中再次下达bash这个指令,同样没有要求输入用户名和密码,那个第二个bash也是non-login shell
在这两个取得bash的情况中,所读取的设定档并不一样(以下引用鸟哥)
login shell 其實只會讀取這兩個設定檔:
bash 在讀完了整體環境設定的 /etc/profile 並藉此呼叫其他設定檔後,接下來則是會讀取使用者的個人設定檔。?在 login shell 的 bash 環境中,所讀取的個人偏好設定檔其實主要有三個,依序分別是: