zoukankan      html  css  js  c++  java
  • login shell 和 non-login shell 的区别

    介绍之前先思考一个问题:有时我们通过su命令切换用户后,却发现并没有进入该用户的shell环境。这是为什么?

    login shell:取得bash时需要完整的登录流程。就是说通过输入账号和密码登录系统,此时取得的shell称为login shell

    non-login shell:取得sbash接口的方法不需要重复登录的举动。如以X Window登录登录linux后,再以X的图形界面启动终端机,此时那个终端机并没有需要输入账号和密 码,那个bash环境就是non-login shell。在原本的bash环境下再次执行bash命令,同样也没有输入账号密码就进入新的bash环境(前一个bash的子进程),新的bash也是non-login shell。

    那么,到底两者的区别在哪里?

    login shell:此种方式登录时,shell会重新读取/etc/profile和~/.bash_profile来应用新的环境变量。

    non-login shell:此时shell不会读取/etc/profile和~/.bash_profile,而是读取~/.bashrc来应用新的环境变量。话说标题是区别与影响,影响的东西自然源于区别。回到文章开头的问题,su切换用户没有获取用户的环境(当时用的命令是"su xxoo",这里xxoo为要切换的用户,以root身份执行的此命令),看来问题就在这倆login方式,根据现象我们可以判断 su xxoo执行了non-login shell。

    为了验证上面的判断,我们查看了su命令的简单帮助:

    [root@isayme ~]# su --help
    Usage: su [OPTION]... [-] [USER [ARG]...]
    Change the effective user id and group id to that of USER.
     
    -, -l, --login               make the shell a login shell

    很明显,我的判断是正确的,默认情况下是执行的non-login shell,因为要执行login shell需要在su后面添加参数"-"或"-l"或"--login"。所以要在su之后获取用户的环境变量,需要执行类似"su - xxoo"之类的命令。

    另外还有三个提示:

    PS1:bash在读取/etc/profile后会读取各账户的个人配置文件,所读取的个人配置文件主要有三个:~ /.bash_profile,~/.bash_login,~/.profile。其实bash在读取的时候只会读取的上述三个文件的其中一个,而读取 的顺序则就是上面的顺序。也就是说bash会依次查找上述三个个人配置文件,且找到一个后,后续的文件便不再读取。

    PS2:当以non-login shell登录时,如果希望获取用户的环境变量,执行"source ~/.bash_profile"即可(.bash_profile根据情况也可能是.bash_login或.profile),而其中source可以用小数点替换,即"source ~/.bash_profile"等价于". ~/.bash_profile"。source命令的解释可以自行搜索。

    PS3:其实有的linux发行版的login shell也会读取.bashrc文件,如Fedora11中执行 "vim ~/.bash_profile"会发现 "if [ -f ~/.bashrc ]; then . ~/.bashrc fi"。这里就使用了PS2的提到的用小数点替换source特性,即在./bash_profile会读取执行.bashrc文件

  • 相关阅读:
    idea项目maven配置
    IDEA配置maven项目启动
    IDEA导入本地项目教程
    EasyUi前端js禁止短时间内多次点击按钮方法
    EasyUi的form验证框位置修改
    div中的div如何居中
    Java导出Excel使用POI之SXSSFWorkbook方式
    java.lang.NoSuchMethodError
    eclipse导出项目时报错:problems were encountered during export
    直线检测方法—LSD论文翻译
  • 原文地址:https://www.cnblogs.com/sage-blog/p/3908671.html
Copyright © 2011-2022 走看看