1. 怎么判断shell是交互式登陆还是非交互式登陆?

    1.交互式登陆判断依据有以下两种方式:
        (1)直接通过终端输入账号密码登陆
        (2)使用su - username 切换的用户
    2.非交互式登陆判断依据有以下三种方式
        (1)图形界面打开的终端
        (2)使用 su username 切换的用户
        (3)执行脚本

2.  shell交互式登陆的过程是什么?分别加载了哪些配置文件,这些配置文件的作用是什么?

  

  以下三个图分别为shell交互式登陆过程、shell非交互式登陆过程以及交互式登陆切换非交互式过程的流程图。
    首先我们先对上图的配置文件分类,可以有两种分类的方法。其一,是按照配置文件的生效范围划分;其二,是按照配置文件的功能划分。
        1. 按照配置文件的生效范围划分:
            (1)全局配置文件
              功能:定义全局的环境变量。
              包含的配置文件:
                /etc/profile
                /etc/profile.d/*.sh
                /etc/bashrc
            (2)个人配置文件
              功能:自定义当前用户的环境变量
              包含的配置文件:
                ~/.bash_profile
                ~/.bashrc
        2. 按照配置文件的功能划分:  
            (1)profile类型:为交互式登陆的shell提供配置
               功能:定义环境变量;运行命令或者脚本                
               包含的配置文件:
                全局:/etc/profile  /etc/profile.d/*.sh
                个人: ~/.bash_profile
            (2)bashrc类:为非交互式登陆的shell提供配置
                功能:定义命令别名和函数;定义本地变量
                包含的配置文件:
                  全局:/etc/profile      
                  个人:~/.bashrc
  聊完了配置文件的分类,再来分析一下shell登陆的流程以及相关配置文件的作用。

wKiom1j7VDnBR98oAAB1qIHnf2U909.png

图1 shell交互式登陆普通模式    

 shell交互式登陆先会加载/etc/profile配置文件,profile文件定义了全局环境以及全局生效的命令以及脚本。
 为了研究配置文件到底有啥作用。我用vim打开了/etc/profile文件一窥究竟。

wKioL1j7aw3hEaNdAACKJukk3qA087.png

图1.1 /etc/profile文件一


wKioL1j7Yt-jDjH-AABx-uERM00703.png

图1.2 /etc/profile文件二

    接下来打开~/.bashrc_profile一窥究竟。

wKiom1j7ZG-wmOCYAABA3lJAYzE941.png    

图1.3 ~/.bashrc_profile文件

    接下来打开 ~/.bashrc一窥究竟。

wKioL1j7Zb_RXqJ0AABCauyGMpU118.png

图1.4 ~/.bashrc文件

    接下来打开/etc/bashrc/

wKiom1j7ahrj5ef9AABr2Yj7qtw392.png

    图1.5 /etc/bashrc文件

  

  到此,所有的配置文件已经加载完成,shell交互式登入,终端输出命令提示符。
  另外用户自己创建的脚本想要全局生效就需要放置在/etc/profile.d/下,并且以.sh结尾。我们系统定义的语系环境,颜色环境,vim配置环境等就放在此目录下。

wKioL1j7VDqDZZYPAAB0ZT8-odU609.png

图2 shell非交互式登陆模型

    以上是非交互式登陆模型。配置文件的内容与以上图形相同,我就不在一一列举了。
    和交互式shell登陆不同的是,系统会先加载家目录下的文件,再分别调用全局配置文件/etc/profile以及/etc/profile.d/下的.sh结尾的文件。
    同样,顺序在后的配置文件的环境变量、别名会覆盖前面的配置文件。

wKiom1j7VDqiFM2pAAB51e2yf4w267.png

图3 shell交互式登陆切换非交互式登陆模式

    以上是shell交互式登陆切换非交互式登陆模式。
    一个简单的例子就是:su username 而不是su - username 。这样的话切换后的用户不会加载/etc/profile、~/.bash_profile以及~/.bashr配置文件。
    那这样会有什么影响?影响当然有,比如说,我们在/etc/profile定义了一个环境变量,而/etc/bashrc中没有这个环境变量,那么这个用户将不能调用这个环境变量。
    好了,到此介绍完了。如果能够对他人有所帮助,我将会十分开心。