Linux 登陆配置读取顺序
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 登陆配置读取顺序的更多相关文章
- linux如何配置双机SSH信任然后双向免密码登陆
linux如何配置双机SSH信任然后双向免密码登陆 www.111cn.net 更新:2015-01-14 编辑:edit02_lz 来源:转载 有时为了方便管理多台Linux主机,想实现双机之间信任 ...
- Linux免密登陆配置(互信配置)
Linux免密登陆配置(互信配置) 1.生成当前用户的秘钥文件 [oracle@localhost .ssh]$ ssh-keygen -t rsa 2.配置远程登录用户的公钥文件 将公钥文件拷贝至另 ...
- Linux下配置JDK
下面以CentOS为例,详细说一下Linux下配置JDK的过程 首先按照约定俗成的习惯,将jdk放在/usr/local/java下,首先进入/usr/local然后新建一个目录java 然后我们需要 ...
- Spring Boot 配置优先级顺序
一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...
- Linux如何配置bond
Q:什么是BOND? A: 将多块网卡虚拟成为一块网卡的技术,通过bond技术让多块网卡看起来是一个单独的以太网接口设备并具有相同的ip地址. Q:为什么要配置bond? A: 在linux下配 ...
- Linux下配置tomcat+apr+native应对高并发
摘要:在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服 ...
- SpringBoot 配置文件存放位置及读取顺序
SpringBoot配置文件可以使用yml格式和properties格式 分别的默认命名为:application.yml.application.properties 存放目录 SpringBoot ...
- (转)Linux下配置tomcat+apr+native应对高并发
摘要:在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服 ...
- Linux网络——配置防火墙的相关命令
Linux网络——配置防火墙的相关命令 摘要:本文主要学习了如何在Linux系统中配置防火墙. iptables命令 iptables准确来讲并不是防火墙,真正的防火墙是运行于系统内核中的netfil ...
随机推荐
- SpringBoot+mybatis:报错Fri Oct 19 14:29:24 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requiremen
报错:Fri Oct 19 14:29:24 CST 2018 WARN: Establishing SSL connection without server's identity verifica ...
- JMM - Java内存模型
内存模型的作用是定义变量的访问规则.包含:实例字段.静态字段.构成数组对象的元素.不包括局部变量和方法参数等线程私有变量. JMM所有变量都在主存,每个线程都有自己的工作内存.线程的工作内存中保存了线 ...
- Vue打包npm run build 打包后空白怎么解决?
问题一:路径报错并且页面空白 解决:buld/index.js assetsPublicPath: '/'修改为 assetsPublicPath: './' 问题二:没报错页面空白 ro ...
- Vim 常用简单命令
Vim中有三个模式,1.刚进入Vim画面的是命令模式,2. 在命令模式输入:进入末行模式, 3. 在命令模式输入 a或者i或者o进入编辑模式 在末行或者编辑模式中可以通过ESC回到命令模式 举例当前目 ...
- day 08 文件操作
1.文件操作 1.文件操作 模特主妇护士老师.txt 1.文件路径:d:\ 模特主妇护士老师.txt 2.编码方式:utf-8 3.操作方式:只读,只写,追加,读写,写读 以什么编码方式储存的,就必须 ...
- 卡方分布(Chi-Square Distribution):
定义:如果我们的随机变量是标准正态分布(详见以前博客的高斯分布),那么多个随机变量的平方和服从的分布即为卡方分布. X=Y12+Y22+⋯+Yn2 其中,Y1,Y2,⋯,Yn均为服从标准正态分布的随机 ...
- 一个通过GINA拦截 盗窃登陆口令的病毒分析
病毒行为: 1\将资源中的DLL释放到当前目录下 2\设置注册表,将GINA DLL设置为上一步中释放的DLL DLL行为: 1\在DLL被进程装载时, 装载正常的msgina.dll, 并保存句柄, ...
- vmware克隆虚拟机后进行网络配置
1.首先将虚拟机网络模式选为NAT模式 2.点击高级,查看MAC地址 然后编辑:/etc/udev/rules.d/70-persistent-net.rules 其中teh是网卡的名称,每一次克隆新 ...
- 最小生成树 HDU1301 (kuskal & prim)
Kruskal:1.边排序,2.按边从小到大连接森林至树 3.并查集 #include <stdio.h> #include <stdlib.h> #include < ...
- 消息队列kafka集群搭建
linux系统kafka集群搭建(3个节点192.168.204.128.192.168.204.129.192.168.204.130) 本篇文章kafka集群采用外部zookeeper,没采 ...