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. 关于RedHat Linux无法使用yum命令安装gcc-c++问题

    初入职场,在给RedHat Linux安装环境的时候遇到这么个问题. 参考:http://www.linuxidc.com/Linux/2017-08/146548.htm [root@localho ...

  2. C语言实验一(2)

    #include<stdio.h>int main(){ char c1,c2; c1=97; c2=98; printf("c1=%c,c2=%c\n",c1,c2) ...

  3. SmartGit 常见错误提示代码

    1.Failed to connect to newgit.op.ksyun.com port 80: Timed out. Could not update branch states (green ...

  4. win2012R2 的IIS报错HTTP404,报错在计算机上找不到服务W3SVC等等

    一.背景 今天远程给客户解决IIS的默认网页浏览找不到文件夹,报错HTTP404,找了很多原因,而且也报错在计算机上找不到服务W3SVC等等,如图所示: 二.原因 试了很多方法都不可以重装IIS都不行 ...

  5. 『Python』为什么调用函数会令引用计数+2

    一.问题描述 Python中的垃圾回收是以引用计数为主,分代收集为辅,引用计数的缺陷是循环引用的问题.在Python中,如果一个对象的引用数为0,Python虚拟机就会回收这个对象的内存. sys.g ...

  6. MySQL备份脚本-亲试ok

    #!/bin/bash # 以下配置信息请自己修改mysql_user="USER" #MySQL备份用户mysql_password="123456" #My ...

  7. python高级编程

    2,python一切皆对象 type,object,class的关系 python常见的内置类型 3,魔法函数 魔法函数 4,深入类和对象 python鸭子类型(多态)抽象基类(abc模块) pyth ...

  8. Octoroit OS VB操作系统简单介绍

    官方地址:http://octoroit.weebly.com/ 首先需要指明的是 :Octoroit OS 并不是一个真正意义上的操作系统,它是运行在windows 之上的 窗口系统,一个Visua ...

  9. hive的排序,分組练习

    hive的排序,分組练习 数据: 添加表和插入数据(数据在Linux本地中) create table if not exists tab1( IP string, SOURCE string, TY ...

  10. 【 P3952】 时间复杂度 大模拟题解

    题目链接 完全模拟 1.模拟结果 当我们的模拟程序执行结束时,直接执行模拟结果函数,用于比对我们的结果和数据给出的结果. bool yes(char a[],char b[]) { ;i<=;+ ...