[Ubuntu]理解 login shell 和 non-login shell 读取设定流程

名词定义

login shell

取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,你要由 tty1 ~ tty6 登陆,需要输入使用者的帐号与密码,此时取得的 bash 就称为「 login shell 」比如使用 「su -「 命令,或者用 ssh 连接到某一个服务器上,该用户取得的 bash

non-login shell

取得 bash 接口的方法不需要重複登陆的举动该模式下是不会自动去运行任何的 profile 文件。

interactive

可以透过命令符去执行交互式 shell 顾名思义就是用来和用户交互的,提供了命令提示符可以输入命令。该模式下会存在一个叫 PS1 的环境变量,如果还不是 login shell 的则会去 source /etc/bash.bashrc 和 ~/.bashrc 文件

non-interactive

像是gitHub action那样靠yml档案写好的script去执行non-interactive shell 则一般是通过 bash -c 「CMD」 来行的 bash.

四种方式区别

流程:

1. non-login shell 读取流程

stept1. 读取~/.bashrc

该bash配置文件仅会读取 ~/.bashrc(root和一般使用者看到会不同),它内容主要是去加载 /etc/bashrc 而他里面也没有看到sbin相关的东西

「使用者的个人设置」读取/etc/bashrc

stept2. 读取/etc/bashrc

「整体的环境设置」「依据不同的 UID 规範出 umask 的值;」「依据不同的 UID 规範出提示字符 (就是 PS1 变量);」「调用 /etc/profile.d/*.sh 的设置」可以在这个文件中修改我们喜欢的 shell 配色方案和环境变量等等
non-login shell 的选项(option)
--rcfile <file>
强制读取并执行档案的command,而不读取/etc/bashrc 及 ~/.bashrc.

2. login shell 读取流程

step1. 读取/etc/profile

注意:「这是系统整体的设置,你最好不要修改这个文件;」

PATH:会依据 UID 决定 PATH 变量要不要含有 sbin 的系统指令目录;MAIL:依据帐号设置好使用者的 mailbox 到 /var/spool/mail/帐号名;USER:根据使用者的帐号设置此一变量内容;HOSTNAME:依据主机的 hostname 指令决定此一变量内容;HISTSIZE:历史命令记录笔数。CentOS 7.x 设置为 1000 ;umask:包括 root 默认为 022 而一般用户为 002CentOS 7.x 默认调用/etc/profile.d/*.sh

有read权限的user才能读进来/etc/profile.d/.sh 的内容
**关于 /etc/profile.d/
.sh 的内容:**

bash 操作接口的颜色语系llls指令的命令别名vi 的命令别名which 的命令别名

/etc/profile.d/lang.sh --> /etc/locale.conf
-bash 默认使用何种语系的重要配置文件! 文件里最重要的就是 LANG/LC_ALL
/etc/profile.d/bash_completion.sh --> /usr/share/bash-completion/completions/*

step2. 读取「读取使用者的个人配置文件」(按顺序只读1个)

~/.bash_profile~/.bash_login~/.profile

参考

理解 bashrc profile 优先级及区别就是要你懂Linux环境变量问题汇总#!/usr/bin/env与#!/usr/bin/理解 bashrc 和 profile什么是interactive shell「鸟哥的Linux的私房菜 - 基础学习篇(第四版)」

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章