曾经沧海难为水,除却巫山不是云。|

Joey-Wang

园龄:4年3个月粉丝:17关注:0

📂Shell
🔖Shell
2024-04-28 00:50阅读: 103评论: 0推荐: 0

shell 类型和环境配置

在 unix 内核的操作系统中(包括 unix 后续延伸出的分支 linux、OS X 等),shell 是和系统内核指令打交道的一座桥梁。

我们通过键盘输入一种自己容易记忆识别的符号标识(shell 命令),由 shell 解析这些命令再反馈给内核去执行一系列操作。

1 Unix shell

我们在美化 MAC 终端时,发现安装有多有 shell 类型:

$ cat /etc/shells  # 查看所有安装的 shell
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
  1. sh:是 Shell 的缩写,是 Unix/Linux 系统的默认shell,也是最古老的shell之一。sh是标准的 POSIX shell,有许多不同版本和实现,如 Bourne shell 和 POSIX shell。
  2. bash:是 Bourne-Again Shell 的缩写,是 sh 的增强版,具有更多的功能和选项。如提供了命令自动补全、历史记录、别名、作业控制等特性。bash 是大多数 Linux 发行版及 macOS Catalina版本前的默认 shell。
  3. dash:是 Debian Almquist shell 的缩写,是从 NetBSD 派生而来的轻量级 shell,专门为 Debian 发行版而设计。与 bash 相比,dash 的代码更精简,启动更快,但提供的特性较少。在 Debian 系统上,dash 通常用作 /bin/sh(而不是bash),因为 dash 更加符合 POSIX 标准,并且启动速度更快。

在很多 Linux 中,/bin/sh 是指向 /bin/bash 的,即 /bin/sh 是 /bin/bash 的软链接。

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Oct 15  2017 /bin/sh -> bash

在 Debian 系统和基于 Debian 的发行版中,/bin/sh 是指向 /bin/dash 的。

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Oct 15  2017 /bin/sh -> dash

切换 sh 以使用 bash 而不是 dash 的方法很简单,因为 /bin/sh 是软链接,所以只需更改指向就行。

$ ln -sf /bin/bash /bin/sh  # 创建 /bin/bash 的软链接文件 /bin/sh,若目标链接已存在则覆盖

在制作 Docker 镜像是,若想基于此镜像的容器中的 sh 默认使用 bash,可在对应的 Dockerfile 中添加如下行:

RUN ln -sf /bin/bash /bin/sh

1.2 切换 shell

使用 echo $SHELL 查看当前终端的默认 shell,通过 chsh -s 可切换为其他已安装的 shell。 更改后需重启终端,以使命令生效。

$ echo $SHELL      # 查看当前默认的 shell
$ chsh -s /bin/zsh # 改变默认的 shell 为 zsh

1.3 shell 的运行模式

shell 有两种运行模式:

  1. login shell:用户登录系统时启动的 shell。login shell 会读取系统配置文件 (🌰 /etc/profile) 来设置系统的整体环境,同时也会读取用户个人的配置文件(🌰 ~/.bash_profile 或 ~/.bash_login) 来设置用户个人的环境。
  2. non-login shell:用户登录后启动的第二个 shell。non-login shell 可直接从 login shell 中继承环境和配置,主要用于执行用户在桌面环境下的交互式任务,如打开终端、编辑文件等。

获取 shell 时需要完整登入流程的,从tty1~6终端登入系统输入账号密码,就是 login shell。

无需重复登入流程的,比如在系统内部启动 tty1~6,不用输入账号密码,就为 non-login shell。

2 配置文件

shell 中通过执行配置文件来设置系统与用户的环境变量。不同 shell 的配置文件命名不同。

2.1 bash

bash shell 的配置文件

  • /etc/profile、/etc/profile.d/*.sh
  • /etc/bashrc
  • /.bash_profile、/.bash_login、~/.profile
  • ~/.bashrc
  • ~/.bash_logout

生效范围/etc 目录下的配置文件都为全局配置文件,~ 用户目录下的配置文件只对该用户生效。

功能profile 类配置文件和 ~/.bash_login 为 login shell 提供配置,bashrc 类配置文件为 non-login shell 提供配置。

login shell 读取文件顺序

  1. 读取整体环境配置:/etc/profile => /etc/profile.d/*.sh (加载 shell 配置)
  2. 读取用户个人配置:从【/.bash_profile、/.bash_login、~/.profile】中仅读取一个文件。按顺序依次读取,若有一个存在,则后续的不再读取。
    • 若 ~/.bash_profile 文件存在的话,一般还会执行 ~/.bashrc 文件。
    • ~/.bashrc 则会调用 /etc/bashrc 文件。
  3. 退出系统 (退出 bash shell) 时,执行 ~/.bash_logout

non-login shell 读取文件顺序:仅读取 ~/.bashrc,找不到时读取 /etc/bashrc。

通俗理解:profile 类文件仅会在启动 bash shell 时读取,而 bashrc 类文件会在每次新开一个终端时都被读取。

Q&A

Q1:为什么若读取了 ~/.bash_profile,一般还会执行 ~/.bashrc ?

A1:因为在 ~/.bash_profile文件中一般会有下面的代码:

if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般还会有以下代码:

Q2:为什么 ~/.bashrc 还会调用 /etc/bashrc?

A2:因为 ~/.bashrc 中,一般还会有以下代码:

if [ -f /etc/bashrc ] ; then
. /bashrc
fi

Q3:~/.bash_history 文件是啥?

A3:~/.hash_history 记录前一次登录所执行过的所有历史命令。此次登录所执行的命令都被缓存在内存中,当成功注销系统后,此次命令才会记录到 ./bash_history。

2.2 zsh

MacOS Catalina 版本开始,终端的默认 shell 为 zsh。

zsh 的配置文件加载顺序大致如下:

  1. /etc/zshenv、~/.zshenv
  2. /etc/zprofile、~/.zprofile
  3. /etc/zshrc、~/.zshrc
  4. /etc/zlogin、~/.zlogin
  5. ~/.zlogout、/etc/zlogout

与 bash 类似,zshrc 文件会在每次新开一个终端窗口时被读取,而 zshenv 文件则只会在每次启动 zsh 时被读取。

❗️如果同时设置了同一个环境变量,zshrc 文件中的设置会覆盖 zshenv 文件中的设置。

对于 zprofile 和 zlogin 的解释:zprofile 和 zlogin 实际上是完全相同的,都用于为 login shell 配置环境,只是读取时间不同。
zprofile 由 Bash 里的 bash_profile 衍化而来,zlogin 则是由 CSH 的 login 变化而来。因为 mac Mojave 版本系统及之前都是以 Bash 为默认的 shell,所以建议用 zprofile。

zsh shell 是不会执行 /etc/profile 和 ~/.bash_profile 文件的,当从 bash 切换为 zsh 时,如果不想再配置一遍 ~/.zshrc 文件,可以在 ~/.zshrc 文件中加上 source ~/.bash_profile,以直接从 ~/.bash_profile 文件读取配置。

参考链接

Linux 和 MacOS 中的 profile 文件详解(一)

Linux 和 MacOS 中的 profile 文件详解(二)

bash配置文件介绍

.bash_profile和.bashrc的区别(如何设置生效)

认识与学习Bash

Linux Shell环境介绍 以及 zsh详细配置信息 ⭐️

本文作者:Joey-Wang

本文链接:https://www.cnblogs.com/joey-wang/p/18162853

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Joey-Wang  阅读(103)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开