首页 > 其他分享 >用户登录时的环境加载顺序

用户登录时的环境加载顺序

时间:2024-09-26 14:01:08浏览次数:1  
标签:profile shell 登录 etc -- bashrc 顺序 bash 加载

1.配置文件说明

系统级的配置文件

配置文件 描述
/etc/profile 系统级的全局配置文件,在用户登录时由Bash首先读取(如果是登录 shell)。
/etc/profile.d/* 这里面的脚本通常由/etc/profile调用,用于更灵活地进行系统级的环境变量设置和初始化任务等。
/etc/bashrc 为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取,有些linux版本中的/etc目录下已经没有了bashrc文件。

用户级的配置文件

配置文件 描述
~/.bash_profile 用户级的登录shell配置文件,如果存在,在用户登录时被读取。
~/.bash_login 如果~/.bash_profile不存在,Bash 会尝试查找这个文件作为用户级登录 shell 的配置文件。
~/.profile 如果前两者都不存在,就执行这个文件作为用户级登录shell的配置文件。
~/.bashrc 在某些情况下,如从登录shell启动一个新的交互式非登录shell,或者在~/.bash_profile(或其他登录shell配置文件)中显式调用时,这个文件会被读取执行,用于设置交互式非登录shell的环境和别名等。
~/.bash_login 是一个用户级的 Bash 配置文件,主要在用户退出Bash会话(尤其是交互式登录 shell 会话)时执行。

2.加载顺序

shell交互式登录

stateDiagram-v2 shell登录 --> /etc/profile /etc/profile --> /etc/profile.d/* /etc/profile.d/* --> HOME HOME --> ~/.bashrc : 被前序脚本触发 ~/.bashrc --> /etc/bashrc : 被前序脚本触发 ~/.bashrc --> shell退出 : shell退出 --> ~/.bash_logout : 被自动触发 state HOME { direction LR ~/.bash_profile --> ~/.bash_login : 不存在触发 ~/.bash_login --> ~/.profile : 不存在触发 }

非shell交互式登录

  • 1.如通过某些特殊方式启动非交互式shell并明确指定加载~/.bashrc
  • 2.或者从一个已经加载了~/.bashrc的交互式shell启动非交互式shell且有机制将当前环境传递给新的shell,可能会间接导致~/.bashrc的部分效果在非交互式shell中体现。
stateDiagram-v2 direction LR 非交互式shell --> ~/.bashrc : 有可能被加载 非交互式shell --> /etc/bashrc : 有可能被自动加载 ~/.bashrc --> /etc/bashrc : 有可能被前序脚本触发

3.示例

~/.bash_profile

#!/bin/bash

# ...其他内容

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

~/.bashrc

#!/bin/bash

# ...其他内容

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

标签:profile,shell,登录,etc,--,bashrc,顺序,bash,加载
From: https://www.cnblogs.com/lxd670/p/18410733

相关文章

  • jvm调优第二天——类加载机制(有面试问题)
    1.类加载机制简介:            Java虚拟机(JVM)的类加载机制是Java应用程序性能调优的关键组成部分。类加载机制不仅负责将类从磁盘加载到内存中,还涉及到类的链接、初始化以及内存管理。本文旨在探讨JVM类加载机制的工作原理,以及如何通过调优类加载过程来提升Java......
  • JSCH和SSHD实现密码+二次验证码登录服务器
    背景目前通过JSCH和SSHD登录服务器的方式基本都是密码或者密钥认证,但有些服务器在密码登录后会有个二次验证,一般是TOTP验证码。下面就是用xshell连接服务器后弹出的二次验证:JSCH和SSHD的官方文档没有详细的例子说明如何通过这个二次验证,研究文档的接口和参数后找到了结合密码和二次......
  • uniapp - 详解安卓App打包后使用uni.chooseLocation地址列表一直加载转圈问题,Android
    前言网上的教程都无法解决问题,本文提供强力解决方案。在uni-app安卓App平台端开发中,详解uniApp打包成Android安卓后用chooseLocation打开地图选择位置空白卡住不动问题,选择地址列表什么也没有且一直处于加载状态(永远不会加载出来卡住了),另外点击搜索框后也无法搜索地点......
  • Tkinter制作登录界面以及登陆后页面切换--用户数据从数据库获取并进行合法性校验(二)
    Tkinter制作登录界面以及登陆后页面切换(二)新增功能1.数据库管理(SqlLite)2.用户表创建(用户信息增删改查操作)3.完善登录校验续接上集,废话不多说,开搞!新增功能数据库管理用户表创建(用户信息增删改查操作)完善登录校验1.数据库管理(SqlLite)下面代码中fromdata......
  • SpringBoot整合Mybatis-Plus实现登录
    1.添加依赖在pom.xml文件中添加以下依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency>......
  • Android应用程序启动与资源加载
    Android系统中的应用程序启动与资源加载详解在Android系统中,AMS(ActivityManagerService)扮演着核心角色,负责管理应用程序的生命周期和进程调度,包括启动应用进程等关键操作。下面将详细解析AMS启动应用进程时涉及的第一个线程、代码和资源的加载过程,以及R.id.xx的加载机制......
  • C++——输入三个整数,按照由小到大的顺序输出。用指针方法处理。
    没注释的源代码#include<iostream>usingnamespacestd;voidswap(int*m,int*n);intmain(){   inta,b,c;   int*p1,*p2,*p3;   cout<<"请输入三个整数:"<<endl;   cin>>a>>b>>c;   p1=&a;p2=&b;p3=&c;   ......
  • 关于动态库加载问题
    1,GetProcAddress只能加载与函数名一致的符号,如果是C++符号是无法加载函数的所以在进行动态库加载时候,如果被加载的库是C++组件,需要将接口声明添加extern“C”或者增加def文件;否则会出现GetProcAddress加载动态函数时候失败;2,查看动态库是否有符号可以使用depend工具:http://w......
  • Linux基础——修改Bclinux8的内核启动顺序
    一、Grubby的参数(base)[root@NewOSBC8~]#grubby--helpUsage:grubby[OPTION...]--add-kernel=kernel-pathaddanentryforthespecifiedkernel--args=argsdefaultargumentsforthenewkernelornewarguments......
  • 统信服务器操作系统a版e版【dde桌面限制登录次数】介绍
    dde桌面登录规则、tty限制登录次数、ssh限制登录次数、ssh限制地点登录、本地限制终端登录、时间限制登录等内容文章目录功能概述功能介绍1.查看dde桌面登录规则2.tty限制登录次数3.ssh限制登录次数4.ssh限制地点登录5.本地限制终端登录6.时间限制登录功能概述......