/etc/profile /etc/profile.d/* /etc/bashrc ~/.bash_profile ~/.bashrc

/etc/profile /etc/profile.d/*  /etc/bashrc  ~/.bash_profile ~/.bashrc 这些文件定义shell的运行环境,其运行有先后,不同情况执行不同的文件

先说shell的分类:

登陆或非登陆

  我们可以直接使用shell(直接运行bash,或者其他shell),此为非登陆式.shopt [-p] login_shell,login_shell不能使用shopt命令进行设置

      

 

 

 

  也可以输入用户名,密码后,由/usr/bin/login程序激活shell,此为登陆式.比如直接登陆tty终端,或者远程登入pts终端

      

 

 

 

交互或非交互

  1)在shell中  -  是一个变量,表示当前shell一些环境,如果含有  i   (interactive),则表示为交互式shell

    终端上执行echo $-
    

 

 

     脚本中执行
    

 

 

     必须以新进程执行脚本,不能使用source方式,否则,显示的是当前shell的变量 -  的值
  2)查看变量PS1或PS2,非空,则为非交互式,否则为交互式,非交互式无需这两个变量,其值为空
    

 

 

     脚本中则为空

常见shell登陆方式

  1. 通过Linux伪终端或虚拟终端登录,此为交互式登录shell
  2. 在命令行中直接bash,此为交互式非登录shell,加入--login后变为交互式登录shell(执行环境是不同的,读取不同环境文件)
  3. 直接su不加--login为交互式,非登录shell

     

    su --login切换用户为交互式,登录shell

     

     

     

     

  4. ssh root@zz1 'echo $-;shopt login_shell'为非交互式,非登录shell

     

     

  5. 桌面环境打开的终端为交互式,非登录shell


接下来说明login和no-login的shell在加载shell环境文件的不同

 

/etc/profile中插入 打印信息

 

 

 

 上面图中代码正是/etc/profile.d/下的文件被读取的原因,bash默认只读取*.sh后缀名的文件和sh.local文件,sh.local一般为空

/etc/bashrc中也插入打印信息

 

 

 

 

 

 在/etc/bashrc中if ! shopt -q login_shell定义了只有为非登录shell时,/etc/bashrc会读取/etc/profile.d/*.sh下的文件,但是不包括sh.local

~/.bash_profile

 

 ~/.bashrc

 

 

执行bash --login模拟登录shell

 

 

从图中可了解登录shell的文件加载过程

1) /etc/profile --------------> /etc/profile.d/*.sh /etc/profile.d/sh.local

2)$HOME/.bash_profile -------------> $HOME/.bashrc ---------------> /etc/bashrc

 

下面为non-login的shell加载过程

$HOME/.bashrc -----------> /etc/bashrc ------------->   /etc/profile.d/*.sh  不包括 /etc/profile.d/sh.local

 

 

non-login的shell必须从login的shell生成,故会继承父shell的环境变量

$HOME/.bash_logout 为每次退出系统时执行

/etc/profile为系统的所有用户设置环境信息,等用户登录时,bash会执行此文件,此文件中还会加载/etc/profile.d/下的相关文件

 

 

 

posted @   ascertain  阅读(259)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示