Linux 登陆shell,交互shell以及环境变量读取顺序
Linux用户在登陆到Linux服务器时,一些登陆的提示欢迎信息,以及特定的环境配置等等都按预先设定好的配置来生效。Linux中的这个shell环境会读取很多不同的配置文件来达成上述目的,同时还有登陆shell与非登陆shell的区分。本文对此作简要描述,供大家参考!
一、登陆shell与非登陆shell
登陆shell(login shell): 取得 bash 时需要完整的登陆流程的,就称为 login shell 比如通过ssh方式连接,或者由tty1 ~ tty6 登陆,需要输入用户的账号与密码,此时取得的 bash 就称为login shell
非登陆shell(non-login shell): 取得 bash 接口的方法不需要重复登陆的举动 比如你以 X window 登陆 Linux 后, 再以 X 的图形化接口启动终端机,此时该终端接口无需输入账号与密码,则为non-login shell 比如你在原本的 bash 环境下再次下达 bash 这个命令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell
查看登陆shell与非登陆shell
###演示环境
[root@system1 ~]# more /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
###当前从ssh登陆到服务器
[root@system1 ~]# tty
/dev/pts/1
# ### Author : Leshami QQ/Weixin : 645746311
# ### Blog : http://blog.csdn.net/leshami
###输入 echo $0, 显示结果为 -bash ,即为登陆shell
[root@system1 ~]# echo $0
-bash
[root@system1 ~]# ps
PID TTY TIME CMD
77122 pts/1 00:00:00 bash
77157 pts/1 00:00:00 ps
###下面在X windows打开一个终端,如下,显示为/bin/bash,即非登陆shell
[root@system1 Desktop]# echo $0
/bin/bash
[root@system1 ~]# ps -ef|grep pts|grep bash
root 73245 73241 0 11:49 pts/0 00:00:00 /bin/bash
root 76511 73245 0 16:19 pts/0 00:00:00 bash
root 77122 77118 0 17:02 pts/1 00:00:00 -bash
root 77158 77118 0 17:03 pts/2 00:00:00 -bash
root 77210 73241 0 17:04 pts/3 00:00:00 /bin/bash
root 77283 77279 0 17:06 pts/4 00:00:00 -bash
root 77332 77122 0 17:06 pts/1 00:00:00 grep --color=auto bash
###在上传的结果中73245,77210为非登陆shell,77122,77158,77283为登陆shell
二、交换shell与非交互shell
交互式shell(interactive shell) 交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。
非交互式shell(non-interactive shell) shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。
###如下,执行 echo $-,查看其中的“i”选项(表示interactive shell)
[root@system1 ~]# echo $-
himBH
###如下,为非交互shell
[root@system1 ~]# echo 'echo $-' | bash
hB
三、登陆shell与非登陆shell调用的shell环境读取顺序
上图列出了登陆shell与非登陆shell读取的不同的shell环境配置文件。 其中,实线的的方向是主线流程,虚线的方向则是被调用(或读取)的配置文件 此外,对于登陆shell,读取~/.bash_profile配置文件时,会做出读取顺序判读,如下 ~/.bash_profile —> ~/.bash_login —> ~/.profile 但 bash 的 login shell 配置只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺序。也就是说,如果 ~/.bash_profile 存在,那么其他两个文件不论有无存在,都不会被读取。 如果 ~/.bash_profile 不存在才会去读取 ~/.bash_login,而前两者都不存在才会读取 ~/.profile 的意思。
四、其他情形
1、除了读取上述配置文件之外,在登陆shell中还会读取其他相关配置信息,如读取 ~/.bash_history 2、对于shell环境变量修改之后需要立即生效的情形,可以使用source来立即生效。 用法 # source 配置文件档名
###如修改了~/.bash_profile,不重新登陆希望生效的话,执行以下命令 # source ~/.bash_profile ###下一命令等价 # . ~/.bash_profile
3、shell登出 在shell登出是会读取 ~/.bash_logout
- Contact Manager Web API 示例[1]CRUD 操作
- 3个域名交易:fde.com11万被秒
- 新手指南OpenStack:Nova的基础知识
- Python-装饰器详解
- Contact Manager Web API 示例[2] Web API Routing
- Android一些关于分辨率和布局的设置
- log4net 中错误 System.Web.HttpException (0x80004005): 文件不存在
- Contact Manager Web API 示例[2] Web API Routing
- Python内置函数
- NET实现微信公共平台上传下载多媒体文件
- css3基础知识——回顾
- Contact Manager Web API 示例[3] 分页和查询(Paging and Querying)
- @font-face css3自定义个性化字体
- 你不知道的javaScript笔记(7)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Elasticsearch安装和配置
- Notes | QUAIDS 模型
- Stata | 520,听说你也想快点找到...
- Stata | 批量替换变量值的小技巧
- 手把手教你完成课设作业使用Pandas对海平面温度异常进行分析,小白也能看的懂
- 谈谈自学 Stata 的体会
- Latex修改字体字号的大小
- Notes | GitHub Upload Large Files
- PPT 中插入图片的几个小技巧
- Stata | 整理调查问卷修改内容清单
- LaTeX | 绘制微观经济学图形
- Python | 地址数据清理相关的库
- 【Redis数据结构 序】使用redis-py操作Redis数据库
- 【Redis数据结构 String类型】String类型生产中的应用 缓存、计数器、限速器的实现
- Redis数据结构 List 类型】List 类型生产中的应用 消息队列、排行榜、朋友圈、监控程序的实现