怎么判断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登陆的流程以及相关配置文件的作用。
图1 shell交互式登陆普通模式
shell交互式登陆先会加载/etc/profile配置文件,profile文件定义了全局环境以及全局生效的命令以及脚本。 为了研究配置文件到底有啥作用。我用vim打开了/etc/profile文件一窥究竟。
图1.1 /etc/profile文件一
图1.2 /etc/profile文件二
接下来打开~/.bashrc_profile一窥究竟。
图1.3 ~/.bashrc_profile文件
接下来打开 ~/.bashrc一窥究竟。
图1.4 ~/.bashrc文件
接下来打开/etc/bashrc/
图1.5 /etc/bashrc文件
到此,所有的配置文件已经加载完成,shell交互式登入,终端输出命令提示符。 另外用户自己创建的脚本想要全局生效就需要放置在/etc/profile.d/下,并且以.sh结尾。我们系统定义的语系环境,颜色环境,vim配置环境等就放在此目录下。
图2 shell非交互式登陆模型
以上是非交互式登陆模型。配置文件的内容与以上图形相同,我就不在一一列举了。 和交互式shell登陆不同的是,系统会先加载家目录下的文件,再分别调用全局配置文件/etc/profile以及/etc/profile.d/下的.sh结尾的文件。 同样,顺序在后的配置文件的环境变量、别名会覆盖前面的配置文件。
图3 shell交互式登陆切换非交互式登陆模式
以上是shell交互式登陆切换非交互式登陆模式。 一个简单的例子就是:su username 而不是su - username 。这样的话切换后的用户不会加载/etc/profile、~/.bash_profile以及~/.bashr配置文件。 那这样会有什么影响?影响当然有,比如说,我们在/etc/profile定义了一个环境变量,而/etc/bashrc中没有这个环境变量,那么这个用户将不能调用这个环境变量。 好了,到此介绍完了。如果能够对他人有所帮助,我将会十分开心。
转载于:https://blog.51cto.com/huwho/1918537