读书人

login shell跟non-login shell的区别

发布时间: 2012-06-29 15:48:47 作者: rapoo

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]$



二、login shell在LFS中的应用:


在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 其只取定:

  1. /etc/profile:是系整的定,你最好不要修改案;
  2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:於使用者人定,你要改自己的料,就入
/etc/profile只有login shell才会读,每使用者登入取得 bash 一定会读取的设定档! 所以如果你想要帮所有使用者设定整体环境,那就是改这里
同样,/etc/profile会去呼叫外部的设定资料,底下这些资料会依次被呼叫进来:(底下引自鸟哥)

/etc/inputrc:其案有被行啦!/etc/profile 主的判使用者有有自入的按功能,如果有的,?/etc/profile?就定定『INPUTRC=/etc/inputrc』!此一案容 bash 的啦、[tab]要不要有音啦等等的料! 因哥得 bash 的境已很棒了,所以不建修改案!

/etc/profile.d/*.sh:其是目的多案!只要在 /etc/profile.d/ 目且副名 .sh ,另外,使用者能具有 r 的限, 那案就被?/etc/profile呼叫。在 CentOS 5.x 中,目底下的案了 bash 操作介面的色、 系、ll ls 指令的命令名、vi 的命令名、which 的命令名等等。如果你需要所有使用者定一些共用的命令名, 可以在目底下自行建立副名 .sh 的案,所需要的料入即可喔!

/etc/sysconfig/i18n:案是由 /etc/profile.d/lang.sh 呼叫的!也是我定 bash 使用何系的重要定! 案最重要的就是 LANG 的定啦

反正你只要得,bash 的 login shell 情下所取的整境定其只有 /etc/profile,但是 /etc/profile 呼叫出其他的定,所以我的 bash 操作介面的非常的友善啦


个人设定:

~/.bash_profile (login shell 才)

bash 在完了整境定的 /etc/profile 藉此呼叫其他定後,接下是取使用者的人定。?在 login shell 的 bash 境中,所取的人偏好定其主要有三,依序分是:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile
其 bash 的 login shell 定只取上面三案的其中一, 而取的序是依照上面的序。也 就是,如果 ~/.bash_profile 存在,那其他案不有存在,都不被取。 如果 ~/.bash_profile 不存在才去取 ~/.bash_login,而前者都不存在才取 ~/.profile 的意思。 有多的案,其是因其他 shell 的使用者的而已
bash 定的入方式比有趣,主要是透一指令『 source 』取的! 也就是 ~/.bash_profile 其再呼叫 ~/.bashrc 的定容喔,login shell 境下,最被取的定是『 ~/.bashrc 』案

~/.bashrc (non-login shell )
完了 login shell 後,那 non-login shell 非登入情取得 bash 操作介面的境定又是什??你取得 non-login shell , bash 定取 ~/.bashrc 而已啦
不过~/.bashrc会去呼叫/etc/bashrc.而这个/etc/bashrc主要有三个作用“
1.根据不同的UID,规范出UMASK的值
2.依据不同的UID ,规范出PS1, 也就是提示符的内容
3.呼叫/etc/profile.d/*sh目录中的内容

读书人网 >操作系统

热点推荐