linux——shell
简述
Bash Shell 会话,从两个不同的维度分为:登录/非登录以及交互式/非交互式 模式。
从是否登录这个维度分为:登录和非登录
从是否与用户交互分为:交互式和非交互式
登录Shell:是指Shell是输入用户名密码才进入Shell的,我们一般通过SSH登录,然后输入用户名密码进入Shell都是登录式Shell
非登录Shell: 是指没用输入用户名密码即可进入Shell,比如如:直接命令“bash”就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。
交互式Shell: 就是Shell是附加到terminal, Shell等待你的输入,并且立即执行你提交的命令, 之所以被称作交互式是因为shell与用户进行交互。
非交互式shell: 就是Shell没有附加到terminal,无需和用户交互,比如我们执行脚本时,Shell读取文件内容执行,执行完代码后,自己结束。
分类
* login + interactive
* 登陆 Linux 获取的第一个 shell
* 通过 ssh user_name @ romote_ip 登陆获取到的 shell
* 运行命令 bash -l 进入的 shell
* 首先读取 /etc/profile 文件
* 再从下面三个文件读取到第一个存在的文件
~/.bash_profile、~/.bash_login、~/.profile
etc/profile 会依次读取 /etc/profile.d 下所有文件
* login + non-interactive
* 运行命令 bash -l script.sh
*配置文件读取同上 该模式比较少用
* non-login + interactive
* 运行命令bash
* 读取 /etc/bash.bashrc
* 读取 ~/.bashrc文件
* non-login + non-interactive
* 运行命令 bash script.sh
* 读取环境变量 $BASH_ENV 的值,导入该值的配置文件
login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,我们登陆 tty1 ~ tty6 时,需要输入用户的账号与密码,此时取得的 bash 就称为“ login shell ”;
non-login shell:取得 bash 接口的方法不需要重复登陆的举动,比如我们登陆 Linux 后, 启动终端Terminal,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell了。又或者你在原本的 bash 环境下再次使用 bash 这个命令,建立了一个bash子进程,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。
non-login
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.
login shell
step1. 读取/etc/profile
/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
配置文件执行顺序
1./etc/profile
2./etc/environment
3.~/.bash_profile
4.~/.bashrc
5./etc/bashrc