Linux 中 Shell bash 不同类别介绍

Shell bash 不同类别介绍

  1. Shell bash 不同类别介绍

    • 分为 login shell(登录式 shell)、non-login shell(非登录式 shell);interactive shell(交互 shell)和 non-interactive shell(非交互式 shell)。这两种分类相互交叉。
      1. 交互式,登录 shell
      2. 非交互式,登录 shell
      3. 交互式,非登录 shell
      4. 非交互式,非登录 shell
    • 注意:只要记住什么是 login shell、non-login shell 和 non-interactive 非登录式 shell
  2. 介绍 3 种

    • 什么是 login shell
      1. 使用 bash 时需要完整的登录流程。就是说通过输入账号和密码登录系统,此时取得的 shell 称为 login shell。例如 ssh 登录或者 su - root 切换 root 用户都会启动 login shell
      2. 在 shell bash下使用 --login 选项调用 bash(前一个 shell bash 的子进程 bash --login),可以获得一个交互式 login shell。
      3. 在脚本中使用 --login 选项调用 bash(shell 脚本第一行做如下指定:#!/bin/bash --login),此时得到一个非交互式的 login shell
      4. 使用 su - 切换到指定用户时,获得此用户的 login shell。如果不使用 -,则获得 non-login shell。
    • 什么是 non-login shell
      1. 使用 bash 接口的方法不需要重复登录的举动。
      2. 例如:以图形界面(init 5)登录 Linux 再启动终端机,此时这个终端机并没有需要输入账号和密码,这个bash 环境就是 non-login shell。
      3. 在原本的 bash 再次执行 bash命令,同样也没有输入账号密码就进入新的bash环境(前一个bash的子进程),新的bash也是non-login shell。
    • 什么是非交互,非登录式 shell
      • 执行脚本
  3. 不同 shell bash 的启动过程

    • 不同的 shell bash 启动时会读取不同的配置文件,从而导致环境变量不一样。
      1. 实际上,在 Ubuntu 系统中 /etc/profile 配置文件会调用 /etc/profile.d/*.sh/etc/bash.bashrc 配置文件;~/.profile 配置文件会调用 .bashrc 配置文件。
      2. /etc 下的环境配置文件,如同全局变量;在 ~/. 下的配置文件,如同局部变量,局部变量优先级大于全局变量
    • login shell
      1. shell bash 启动时首先读取 /etc/profile 全局配置,然后查找(~/.bash_profile~/.bash_login~/.profile)3 个文件任何一个配置文件(找到一个即可),login shell 退出时读取 ~/.bash_logout
    • non-login shell
      1. non-login shell 启动时读取 ~/.bashrc 配置文件
      2. 不会读取任何 profile 文件
    • 非交互,non-login shell
      1. 非交互式,non-login shell 不会读取 上述 5 类配置文件,而是查找环境变量 BASH_ENV。
  4. 测试使用何种 shell

    说明:只区分 3 种 shell(login shell、non-login shell、非交互 non-login shell);我是用的是图形化 Ubuntu 系统(init 5);前一个 shell 是哪种类型与后一个 shell 是哪种类型无关,至于注入的命令有关。

    • 登录图像化 Ubunut 系统后,开启终端是 non-login shell

    • 输入 bash 命令之后也是 non-login shell

    • 输入 bash --login 命令之后是 login shell

    • 输入 su - root 命令之后是 login shell

    • 输入 su root 命令之后是 non-login shell

    • 可以在 /etc/profile 中设置环境变量,理由 login 与 non-login 的区别在此

      1. 添加环境变量在 /etc/profile 文件中 spro="login shell"

      2. 验证是否为 login 和 non-login

        ss@localcomputer:~$ echo $spro      # 开启 non-login shell
        
        ss@localcomputer:~$ su - root       # 开启 login shell
        密码: 
        root@localcomputer:~# echo $spro
        login shell
        root@localcomputer:~# bash
        

你可能感兴趣的:(Linux 中 Shell bash 不同类别介绍)