shell加载配置文件

shell有不同的启动方式,根据启动方式的不同会加载不同的配置文件,从而配置不同的环境变量

我们比较常见的启动方式有:

1.通过linux控制台登录或者ssh方式,启动shell,这种情况为登录式启动shell

会依次加载/etc/environment, /etc/profile, ~/.bash_profile (或者~/.bash_login 或者 ~/.profile)

而~/.bash_profile中又会加载~/.bashrc,而~/.bashrc又加载  /etc/bashrc ,  /etc/bashrc又加载  /etc/profile.d/*.sh

2. 通过bash -l 登录式启动shell,会加载 /etc/profile, ~/.bash_profile 但不会加载/etc/environment

3,通过bash 非登录式启动shell,会加载~/.bashrc,前面说过~/.bashrc脚本又会加载/etc/bashrc ,  /etc/bashrc又加载  /etc/profile.d/*.sh

可以看出上面的三种方式,不管时登陆时还是非登陆时,都会加载~/.bashrc, /etc/bashrc ,  /etc/profile.d/*.sh中的内容

而 /etc/profile, ~/.bash_profile只有在登录式启动的时候才会加载

如果想给所有的用户登录式使用某个环境变量,就在/etc/profile中添加,如果只是给某个用户登录时使用某个变量,就在用户专属文件 ~/.bash_profile中添加

还有一种启动方式时定时任务的cron启动方式

cron启动方式只会加载/etc/environment,而不会加载/etc/profile或者 /etc/bashrc

在配置文件中输出配置文件名。测试结果如下

Last login: Fri Feb  7 17:40:49 2020 from 172.25.10.1  //ssh登录时启动新进程,
/etc/environment*****in /etc/profile     //此处能输出,说明加载了/etc/environment文件
/etc/profile                             //此处说明加载了 /etc/profile/etc/profile*****in vagrant/.bash_profile  //此处说明加载了 ~/.bash_profilevagrant/.bash_profile*********in vagrant/.bashrc //此处说明加载了 ~/.bashrcvagrant/.bashrc*****in /etc/bashrc
/etc/bashrc                              //此处说明加载了 /etc/bashrc
[[email protected] ~]$ sudo su           //sudo su命令 废弃原有的环境变量,并重新加载配置文件,好像开启了新的进程(但是$$又没有改变)
/etc/environment******in root/.bashrc   //此处输出说明加载了/etc/environment/和~/.bashrc
root/.bashrc
root/.bashrc*****in /etc/bashrc         //此处说明加载了 /etc/bashrc
/etc/bashrc
[[email protected] vagrant]# bash         //bash非登录式启动新进程
/etc/bashrc******in root/.bashrc       //此处说明加载了~/.bashrc
root/.bashrc
root/.bashrc*****in /etc/bashrc        //此处说明加载了/etc/bashrc
/etc/bashrc
[[email protected] vagrant]# bash -l      //bash登录式启动新进程
/etc/bashrc*****in /etc/profile        //加载了/etc/profile
/etc/profile
root/.bash_profile                      //加载了~/.bash_profile
root/.bash_profile******in root/.bashrc
root/.bashrc                            //加载了~/.bashrc
root/.bashrc*****in /etc/bashrc        //加载了 /etc/bashrc
/etc/bashrc
[[email protected] vagrant]# (echo a)
a

由以上测试可以看出

ssh登录式进程加载了/etc/environment,/etc/profile,~/.bash_profile(~/.bash_profile内部又加载了~/.bashrc, ~/.bashrc内部又加载了/etc/bashrc)

sudo su切换到root用户,加载了/etc/environment/和~/.bashrc(其中~/.bashrc内部又加载了/etc/bashrc)

bash命令创建非登录式新进程加载了 ~/.bashrc(其中~/.bashrc内部又加载了/etc/bashrc)

bash -l命令创建登录式新进程 加载了/etc/profile,~/.bash_profile(~/.bash_profile内部又加载了~/.bashrc, ~/.bashrc内部又加载了/etc/bashrc)

总结:登录式会加载 /etc/profile,~/.bash_profile ,初期用户名密码登录或者ssh登录,在加载前面两个之前,还会加载/etc/environment     非登陆式会加载 ~/.bashrc      sudo命令会清楚环境变量并重新/etc/environment/和~/.bashrc

不管哪种方式,最终都会加载~/.bashrc, /etc/bashrc,  /etc/profile.d/*.sh

cron方式会加载/etc/environment, 不会加载/etc/profile,至于会不会加载/etc/bashrc还有待验证

/etc/environment的加载时机为①ssh登陆时②cron启动时③sudo su时

原文地址:https://www.cnblogs.com/gaoBlog/p/12273852.html

时间: 2024-10-07 08:59:16

shell加载配置文件的相关文章

bash启动时加载配置文件过程

本文目录: 1.1 判断是否交互式.是否登录式 1.2 几种常见的bash启动方式 1.3 加载bash环境配置文件 当用户登录系统时,会加载各种bash配置文件,还会设置或清空一系列变量,有时还会执行一些自定义的命令.这些行为都算是启动bash时的过程. 另外,有些时候登录系统是可以交互的(如正常登录系统),有些时候是无交互的(如执行一个脚本),因此总的来说bash启动类型可分为交互式shell和非交互式shell.更细分一层,交互式shell还分为交互式的登录shell和交互式非登录shel

java加载配置文件

转载自http://blog.163.com/wb_zhaoyuwei/blog/static/183075439201261764454791/ 当我们自己的程序需要处理配置文件时(比如xml文件或properties文件),通常会遇到两个问题: (1)我的配置文件应该放在哪里? (2)怎么我的配置文件找不到了? 对于第一个问题,答案是:请将你的资源文件放在classpath里,如果资源文件在jar中,请将该jar文件也加到classpath里面. 对于第二个问题,就得看你是使用的是哪个类(C

Spring4.1使用c3p0加载配置文件连接数据库,Access denied for user 'root'@'localhost' 错误!

db.properties jdbc.user=root jdbc.password=admin jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc\:mysql\:///spring4 jdbc.initialPoolSize=5 jdbc.maxPoolSize=10 Spring.xml中 <context:property-placeholder location="classpath:db.properties&quo

【Nutch2.2.1源码分析之一】Nutch加载配置文件的方法

1.NutchConfiguration.java用于加载及获取Nutch的相关参数. Utility to create Hadoop Configurations that include Nutch-specific  resources. 即它会加载hadoop及nutch中的参数文件. 关键是2个create()方法,它加载了参数文件的同时,又返回了Configuration对象. 2.不带参数的create方法 public static Configuration create()

smarty加载配置文件和读取其中的参数

加载配置文件 在smarty中通过{config_load}加载配置文件. 属性: 参数名称 类型 必选参数 默认值 说明 file string Yes n/a 载入的配置文件名 section string No n/a 指定载入配置变量的段落 scope string no local 配置变量的作用范围,取值local, parent 或 global. local表示变量只能在当前模板的上下文中使用. parent表示变量可以在当前模板和父模板使用. global表示变量在任何地方都可

加载配置文件.properties,及面向接口编程的DaoFactory

1 package cn.itcast.usermng.dao; 2 3 import java.io.InputStream; 4 import java.util.Properties; 5 6 /** 7 * 通过配置文件得到dao实现类的名称! 8 * 通过类名称,完成创建类对象!(反射完成的!) 9 * @author cxf 10 * 11 */ 12 public class DaoFactory { 13 private static Properties props = nul

spring加载配置文件

spring加载配置文件 1.把applicationContext.xml直接放在WEB-INF/classes下,spring会采用默认的加载方式2.采用在web.xml中配置ContextLoaderListenera或ContextLoaderServlet指定加载路径方式.3 通过ClassPathXmlApplicationContext或XmlWebApplicationContext代码动态加载!

spring-自动加载配置文件\使用属性文件注入

spring-自动加载配置文件\使用属性文件注入 在上一篇jsf环境搭建的基础上 , 加入spring框架 , 先看下目录结构 src/main/resources 这个source folder 放置web项目所需的主要配置,打包时,会自动打包到WEB-INF下 首先看下pom.xml,需要引入一些依赖项:  pom.xml 1. 自动加载配置文件 在web项目中,可以让spring自动加载配置文件(即上图中的src/main/resouces/spring下的xml文件),WEB-INF/w

day38 04-Spring加载配置文件

Spring的工厂类ApplicationContext有两个子类:ClassPathXmlApplicationConext和FileSystemXmlApplication都可以用来加载配置文件. Ctrl+T查看ApplicationContext的子类: 如果把ApplicationContextx.xml放到工程下面或者是其他路径下它都可以加载的. applicationContextx.xml在web工程目录里面就行.如果不在工程目录里,比如在D盘那就写个ApplicationCon