在Linux系统中,缺省的shell指的是系统为当前用户预先设置的默认命令行解释器,它是用户和Linux内核之间沟通的桥梁,负责接收用户输入的指令,解析后传递给内核执行,同时也会返回执行结果给用户。当我们在终端输入命令时,实际就是和缺省的shell在做交互。
缺省的shell的核心作用
缺省的shell除了处理基础命令之外,还有不少实用功能:
- 解析用户输入的命令参数,匹配对应的系统程序或者内置命令执行
- 支持变量定义、条件判断、循环等编程语法,用来编写shell脚本实现自动化任务
- 管理用户的命令历史记录,方便用户快速调用之前执行过的命令
- 处理输入输出重定向、管道等操作,灵活组合多个命令完成复杂需求
常见Linux发行版的缺省shell
大部分主流的Linux发行版,缺省的shell都是bash(Bourne Again Shell),它是早期Bourne shell的增强版本,功能丰富兼容性也很好。不过也有部分发行版会使用其他shell作为缺省选项,常见的shell类型可以参考下表:
| shell名称 | 特点说明 | 常见使用场景 |
|---|---|---|
| bash | 功能全面,兼容性好,支持命令补全、历史记录等实用功能 | 绝大多数Linux发行版默认配置 |
| zsh | 扩展性强,支持更多自定义配置,插件生态丰富 | 部分发行版可选默认,开发者常用 |
| sh | 最早的Unix shell之一,语法简洁,兼容性强 | 常用于脚本编写,保证跨系统兼容性 |
如何查看当前系统的缺省shell
我们可以通过多种方式查看当前用户或者系统全局的缺省shell配置:
查看当前用户的缺省shell
执行以下命令可以直接输出当前登录用户的缺省shell路径:
# 查看当前用户的缺省shell echo $SHELL # 也可以通过查看/etc/passwd文件中对应用户的配置行获取 grep ^$USER /etc/passwd | cut -d: -f7
查看系统支持的shell列表
系统中所有已安装的shell都会记录在/etc/shells文件中,执行以下命令可以查看:
# 查看系统所有已安装的合法shell cat /etc/shells
如何修改缺省的shell
如果需要更换当前用户的缺省shell,可以使用chsh命令来完成,操作步骤如下:
临时切换shell
直接在终端输入想要使用的shell名称,就可以临时切换到对应的shell,退出后就会恢复原来的缺省shell:
# 临时切换到zsh zsh # 退出临时shell,回到原来的缺省shell exit
永久修改缺省shell
使用chsh命令可以永久修改用户的缺省shell,需要输入目标shell的完整路径,路径可以通过查看/etc/shells文件获取:
# 修改当前用户的缺省shell为zsh,需要输入zsh的完整路径 chsh -s /bin/zsh # 修改后需要重新登录终端才能生效
需要注意的是,修改缺省shell之后,原来shell的配置文件比如bash的.bashrc就不会自动加载了,对应的新shell的配置文件比如zsh的.zshrc需要自己手动配置相关的环境变量和别名。
关于缺省shell的常见疑问
很多用户会疑惑缺省的shell和当前正在使用的shell是不是同一个,其实两者可能不一致。比如你临时切换到了zsh,但是缺省的shell还是原来的bash,只有永久修改之后,缺省的shell才会跟着变化。另外,部分脚本开头会指定#!/bin/bash这样的shebang行,意思是这个脚本使用bash来执行,和当前用户的缺省shell没有关系,即使缺省shell是zsh,脚本也会按照指定的bash来运行。