Please enable Javascript to view the contents

Linux基础-Bash启动文件-profile、bashrc

 ·  ☕ 4 分钟

相关博客

[Blog-1]: Linux基础-Bash交互式Shell

[Blog-2]: Linux基础-Bash启动文件-profile、bashrc

概念说明

  • Interactive Shell(交互式Shell): 是指直接与用户进行交互的shell实例,接收用户输入命令,并立刻显示命令的输出(详情 Linux基础-Bash交互式Shell)。

  • LoginShell(登录式交互Shell):系统启动后,用户通过图形界面登录控制台直接登录SSH远程登录等方式登入系统,打开的第一个shell实例。

  • Non-Login Shell(非登录式交互Shell):指不涉及登录过程的shell实例,包括但不限于:登录后打开新Shell、执行脚本、后台作业、远程命令执行等。

  • loginShell与Non-loginShell区别:

    • loginShell: 会读取特定的启动文件,如/etc/profile~/.bash_profile,这些文件中通常包含环境设置和别名等。
    • Non-loginShel:通常只读取~/.bashrc(如果存在),这个文件通常包含针对非登录shell的设置。

Bash Startup File(Bash启动文件)

操作系统

OS –> /boot –> init进程 –> 运行级别 –> /etc/init.d –> 用户登录 –> login shell

  1. 加载内核:操作系统接管硬件之后,首先读取/boot目录下的内核文件。
  2. 启动init进程:内核文件加载后,运行第一个程序/sbin/init(初始化系统环境), PID=1,其他所有进程都是他的子进程。
  3. 加载运行级别: 由init进程根据运行级别(7种/etc/inittab),加载相应运行程序/etc/rc[0-6].d/(K01sysstat|S01cron|S01dbus|S01docker|S01rsync|S01ssh等)。
  4. 加载服务: 运行级别目录下(例如/etc/rc2.d)都是指向/etc/init.d/下的链接文件2024-04-22-Linux基础-启动流程.md
  5. 用户登录:开机启动程序加载后,用户进行登录。命令行登录(init进程调用gtty,让用户输入name+pwd -> init调用login核对密码 –> 从/etc/pwd读取指定shell并启动)、ssh登录(sshd服务取代getty和login)、图形界面登录。
  6. 打开bash:读入/etc/profile(全局),然后依次读取~/.bash_profile|~/.bash_login|~/.profile只运行找到的第一个配置文件(三个文件都存在时,只有~/.bash_profile中内容生效)。

init进程在上面2、3、4阶段
用户登录后的配置读取:/etc/profile为系统通用设置;~/.profile为个人且需要被子进程继承的设置;~/.bashrc为个人不需要继承的设置;
登录系统的shell或者在

Reference

Bash 如何执行其启动文件。交互式 shell 在 Interactive Shells(交互式 shell)中有描述。

Bash作为交互式登录 shell使用--login选项的非交互式 shell 被调用时:

  1. 如果存在 /etc/profile 文件,它会首先读取并执行该文件中的命令。
  2. 读取该文件后,它依次查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并读取和执行第一个存在且可读的文件中的命令

交互式登录 shell 退出或非交互式登录 shell 执行 exit 内置命令时:

  1. Bash 会读取并执行 ~/.bash_logout 文件(如果存在)中的命令。

作为交互式非登录 shell 调用 当启动一个交互式非登录 shell 时:

  1. 如果 ~/.bashrc 文件存在,Bash 会读取并执行该文件中的命令(可以使用 –norc 选项来抑制这种情况;--rcfile 会强制 Bash 从文件而不是 ~/.bashrc 中读取并执行命令)。

通常情况下,~/.bash_profile 文件中会包含这样一行内容

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

当 Bash 以非交互方式启动(例如,运行 shell 脚本)时:
bash会查找环境变量BASH_ENV,如果存在则将该变量的值作为要读取和执行的文件名。 Bash 的行为就像执行以下命令一样:

1
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

–login 选项调用非交互式 shell,Bash 会尝试从loginShell Startup file 启动文件中读取并执行命令。

Bash Setup Files

分享

Hex
作者
Hex
CloudNative Developer

目录