linux——shell

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

原文地址:https://www.cnblogs.com/tomyyyyy/p/14229044.html