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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

二、交换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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

三、登陆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

Linux 登陆配置读取顺序的更多相关文章

  1. linux如何配置双机SSH信任然后双向免密码登陆

    linux如何配置双机SSH信任然后双向免密码登陆 www.111cn.net 更新:2015-01-14 编辑:edit02_lz 来源:转载 有时为了方便管理多台Linux主机,想实现双机之间信任 ...

  2. Linux免密登陆配置(互信配置)

    Linux免密登陆配置(互信配置) 1.生成当前用户的秘钥文件 [oracle@localhost .ssh]$ ssh-keygen -t rsa 2.配置远程登录用户的公钥文件 将公钥文件拷贝至另 ...

  3. Linux下配置JDK

    下面以CentOS为例,详细说一下Linux下配置JDK的过程 首先按照约定俗成的习惯,将jdk放在/usr/local/java下,首先进入/usr/local然后新建一个目录java 然后我们需要 ...

  4. Spring Boot 配置优先级顺序

    一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...

  5. Linux如何配置bond

    Q:什么是BOND? A: 将多块网卡虚拟成为一块网卡的技术,通过bond技术让多块网卡看起来是一个单独的以太网接口设备并具有相同的ip地址.   Q:为什么要配置bond? A:  在linux下配 ...

  6. Linux下配置tomcat+apr+native应对高并发

    摘要:在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服 ...

  7. SpringBoot 配置文件存放位置及读取顺序

    SpringBoot配置文件可以使用yml格式和properties格式 分别的默认命名为:application.yml.application.properties 存放目录 SpringBoot ...

  8. (转)Linux下配置tomcat+apr+native应对高并发

    摘要:在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服 ...

  9. Linux网络——配置防火墙的相关命令

    Linux网络——配置防火墙的相关命令 摘要:本文主要学习了如何在Linux系统中配置防火墙. iptables命令 iptables准确来讲并不是防火墙,真正的防火墙是运行于系统内核中的netfil ...

随机推荐

  1. elementUi中的计数器ele-mumber中的change事件传参及事件调用

    业务场景是需要在点击业务工作量的时候设置任务工作量这一项的评分不能大于任务质量及任务时限的权重之和除以二 上代码 JS逻辑代码 因出现弹出层提示后设置输入框的值如果大于sum的值,设置输入的值为sum ...

  2. XV Open Cup named after E.V. Pankratiev. GP of Central Europe (AMPPZ-2014)--B.Petrol

    多源最短路+并查集 #include <bits/stdc++.h> using namespace std; #define rep(i, j, k) for (int i = int( ...

  3. 超详细的PDF Expert的注释功能介绍

    今天,要给大家很是详细地介绍一下PDF Expert(一款专门在mac上使用的PDF阅读编辑器)的注释功能,让有点健忘的各位小伙伴们通过积极地与文本交互,从而记住更多的专业书内容. 具体使用方法请看以 ...

  4. 基于服务器AAA实验

    ---恢复内容开始--- 一.实验拓扑 二.实验地址分配  设备  端口  ip  掩码  AAAA  g0/0 and se0/3/0  192.168.1.1 and 192.168.4.1  2 ...

  5. javascript高级程序设计第3版——第4章 变量作用域以及内存

  6. ajax入门学习

    1.   XMLHttpRequest 是 AJAX 的基础. 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject). XMLHttpReq ...

  7. gevent模块学习(三)

    3. Group类,常用于不限制数量的管理异步任务的分组且可搜集运行结果 g = gevent.pool.Group(*args) -> Group 说明: 创建一个组对象,其实就是一个不限gr ...

  8. os.path官方文档(附翻译)

    This module implements some useful functions on pathnames. To read or write files see open(), and fo ...

  9. windows—IOCP

    一.重叠I/O回声服务器端 服务端: #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #d ...

  10. 第三方jar包导入unity

    关于第三方SDK接入Unity工程方面,有许多坑,下面我把遇到的问题进行总结,希望能够帮到有需要的朋友们.1.把第三方SDK导入Eclipse遇到的问题.eclipse配置完成右键工程后没有andro ...