美文网首页
Login --- nologin

Login --- nologin

作者: oasis_m | 来源:发表于2020-02-18 16:23 被阅读0次

声明:所有文章只作为学习笔记用,转载非原创

特别好的一篇

https://www.cnblogs.com/EasonJim/p/7137849.html

用户变量设置
https://blog.csdn.net/BockSong/article/details/81747872

https://www.cnblogs.com/insane-Mr-Li/p/9096920.html

[root@linux ~]# aaa=bbb

[root@linux ~]# echo $aaa
bbb

[root@linux ~]# set|grep aaa
aaa=bbb

[root@linux ~]# env|grep aaa

[root@linux ~]# export aaa

[root@linux ~]# env|grep aaa
aaa=bbb

1、交互式登陆(login)shell

交互式登陆shell指的是当用户登录系统时所用的那个shell(可以默认指定,如bash --login)。登录shell将查找几个不同的启动文件来处理其中的命令,bash shell处理文件的顺序如下:

/etc/profile:shell首先执行/etc/profile中的命令。设置这个文件后,可以为系统内所有的bash用户建立默认的特征(不同版本的Linux在此文件放置的命令不尽相同)。

/.bash_profile、/.bash_login、~/.profile:然后shell依次查找这些文件,并执行它找到的第一个文件中的命令。可以将命令放在这些文件中,以重写/etc/profile文件中默认的设置。

/.bash_logout:当用户注销时,bash执行文件/.bash_logout中的命令,这个文件包含了退出会话时执行的清理命令,如:删除临时文件等。

2、交互式非登陆(non-login)shell

交互式非登陆shell指的是如果启动了一个bash shell而没有等录系统(如在CLI 提示符中键入bash),则启动了一个交互式非登录shell。交互式非登录shell并不执行前面提到的启动文件中的命令,然而交互式非登陆shell从登录shell继承了由这些启动文件设置的shell变量。

/etc/bashrc:尽管不是通过bash直接调用,但许多~/.bashrc文件调用/etc/bashrc。这种设置使得超级用户可以为系统内的非登陆shell建立默认属性。

/.bashrc:交互式非登陆shell执行/.bashrc文件中的命令,而登陆shell的启动文件(如/.bash_profile)通常会运行这个文件。这样,登陆shell和非登陆shell都可以运行/.bashrc中的命令了。

3、非交互式shell

非交互式shell指的是以shell script(脚本)方式运行(也就是.sh结尾的文件)。在这种模式在运行时shell并不与用户进行交互(除非在运行时需要用户指定运行参数),而是读取存放在文件中的命令并执行它们。当它读到文件的结尾,shell也就终止了。这些shell从登陆时就继承了由这些启动文件设置的shell变量。

BASH_ENV:非交互式shell查找环境变量BASH_ENV(或者当作为sh调用时为的ENV),并执行由该变量命名的文件中的命令。

4、测试:

在~/.bash_profile中设置如下变量:

<pre style="margin: 0px; padding: 0px; white-space: pre; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">lshell="login shell will see this message"</pre>

分别启动一个交互式non-login shell和交互式login shell,查看lshell变量:

[ 复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; white-space: pre; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">#注意:不是命令 bash
echolshell

exit exit bash --login
echolshell
login shell will see this message
$ exit
logout</pre>

[ 复制代码

](javascript:void(0); "复制代码")

可见non-login shell并没有读取~/.bash_profile,login shell读取了,与上面的描述相符。

相关文章

网友评论

      本文标题:Login --- nologin

      本文链接:https://www.haomeiwen.com/subject/acngfhtx.html