shell相关2------登录shell与非登录shell及shell的运行模式

为了理清楚这个概念,调查了好大一番,看到了一篇觉得很好的文章,留下给自己学习,参考

http://blog.chinaunix.net/uid-29091195-id-3974770.html

登录shell

(1)用户登陆时,输入用户名和密码后启动的shell;

(2)通过带--login参数的命令:bash  --login而启动的shell。

非登录shell

用户登录后,直接运行bash命令启动的shell。

登陆shell和非登陆shell的主要区别

对于用户来说主要区别是:启动shell时所执行的startup文件不同。

(1)登录shell的启动文件是/etc/profile、~/.bash_profile

(2) 非登录shell的启动文件是~/.bashrc

shell的运行模式(交互式shell,非交互式shell

(1)交互式shell

交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。

交互式模式又分为四种类型:login,非login,posix以及受限的shell.

login

当Bash作为login shell被激活时,它将依次读取并执行以下文件:
 /etc/profile,~/.bash_profile,~/.bash_login,~/.profile
使用--noprofile选项激活Bash可以禁止其读任何初始化文件,在退出时执行 ~/.bash_logout 文件

非login

当Bash作为非login shell被激活时,它将读取并执行~/.bashrc

posix

Bash作为posix模式被激活时,它将先检查$ENV变量是否定义.若定义,Bash读取并执行有$ENV变量扩展而得到的文件,否则不再执行任何初始化文件。

受限的shell

当Bash作为受限模式被激活时,它除了禁止某些操作以外,其他行为于其他模式相同.受限操作有:改变目录,修改$SHELL和$PATH变量, 运行exec,以绝对路径运行程序以及使用重定向.

Bash 1.x中不包含受限模式.

(2)非交互式shell

shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。这种模式主要用来运行Shell脚本.启动后,Bash检查$BASH_ENV变量,若定义,则执行该变量指定文件中包含的命令.

(3)Bash 的激活选项
   -c string 该选项表明string中包含了一条命令.如 bash -c ls ~
   -i       使Bash以交互式方式运行
   -r       使Bash以受限方式运行
   --login     使Bash以登录Shell方式运行
   --posix     使Bash遵循POSIX标准
   --verbose    使Bash显示所有其读入的输入行
   --help     打印Bash的使用信息
   --version    打印版本信息
   --noprofile    感觉这个是针对于登录shell而言,--norc是对于非登录式shell而言的

    (Do not read either the system-wide startup file /etc/profile or
 any of the personal  initialization  files ~/.bash_profile, ~/.bash_login, or ~/.profile.  By default, bash reads
these files when it is invoked as a login shell (see INVOCATION below).)
   --norc          使用--norc选项激活Bash可以禁止执行任何初始化文件

( Do not read and execute the personal initialization file ~/.bashrc if the shell is inter‐
              active.  This option is on by default if the shell is invoked as sh.)
   --rcfile file    使用--rcfile file可以指定执行的初始化文件.