在 Ubuntu 及大多数 Linux 发行版中,"命令行"(Shell)是用户与操作系统交互的重要工具。常见的交互式 Shell 有 Bash 、Zsh 、Ash 、Dash 等。虽然它们都可以执行命令脚本,但用途、性能、兼容性和功能特性各不相同。
1. Shell 简介
Shell 是一个命令解释器,位于 Linux 用户与内核之间,作用包括:
- 接收用户输入的命令并解释执行
- 提供脚本编程能力(变量、条件判断、循环、函数等)
- 提供命令补全、历史记录等交互功能
在 Ubuntu 中,默认登录时使用的交互式 Shell 是 Bash ,但系统脚本中的 /bin/sh
实际链接的是 Dash(为了提升启动速度和兼容性)。
2. Bash(Bourne-Again Shell)
特点与使用:
- 存放位置:
/bin/bash
- Ubuntu 默认交互式 Shell
- 功能丰富:命令补全、历史搜索、提示符自定义、数组支持
- 完全兼容 Bourne Shell(sh)并扩展各种新特性
- 常用于日常终端交互、脚本编写、系统管理任务
示例:
bash
# 命令别名
alias ll='ls -lh --color=auto'
# 数组
arr=(apple banana cherry)
echo "${arr[1]}"
# 命令替换
now=$(date +%F_%T)
echo "当前时间: $now"
3. Zsh(Z Shell)
特点与使用:
- 存放位置:
/bin/zsh
(需安装) - 高度可定制,被称为"增强版 Bash"
- 支持 Bash 大部分语法并提供更强补全、历史、通配符功能
- 插件生态丰富(如 Oh My Zsh)
- 适合高级用户和需要个性化终端的人
示例:
zsh
# 高级通配符
print -l **/*.txt
# 自动建议与目录跳转(需插件支持)
4. Ash(Almquist Shell)
特点与使用:
- 由 Bourne Shell 简化而来
- 常见于 BusyBox 环境(嵌入式系统)
- 功能精简、速度快
- 在 Ubuntu 桌面版中很少用于交互
5. Dash(Debian Almquist Shell)
特点与使用:
- 存放位置:
/bin/dash
- 基于 Ash 优化,专为执行脚本而设计
- 在 Ubuntu 中
/bin/sh
链接到 Dash(可用ls -l /bin/sh
查看) - 启动速度更快,适合系统初始化脚本
- 不支持 Bash 扩展
6. 对比表
Shell | 默认位置 | 默认交互 | 功能丰富度 | 启动速度 | 兼容性 | 典型用途 |
---|---|---|---|---|---|---|
Bash | /bin/bash |
✅ | 高 | 中 | 广泛支持 | 日常交互、脚本编写 |
Zsh | /bin/zsh |
❌ | 很高 | 中-慢 | 高 | 高级交互、个性化终端 |
Ash | BusyBox 内 | ❌ | 低 | 很快 | POSIX | 嵌入式系统 |
Dash | /bin/dash |
❌ | 低 | 很快 | POSIX | 系统脚本、启动加速 |
7. 四种 Shell 对比图
下面是一个简单的 ASCII 图,展示它们的关系和适用场景。
┌──────────────────────┐
│ Bourne Shell │
└──────────────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌─────────────┐ ┌───────────┐ ┌───────────┐
│ Ash │ │ Bash │ │ Zsh │
│(精简版 sh) │ │(增强版 sh)│ │(增强版 Bash)│
└─────────────┘ └───────────┘ └───────────┘
│
┌─────────────┐
│ Dash │
│(优化版 Ash) │
└─────────────┘
阅读方式:
- Bourne Shell 是祖先,Ash 和 Bash 都继承自它。
- Dash 是 Ash 的优化版本,用于脚本执行。
- Zsh 基于 Bash 语法,但扩展了功能。
8. 使用建议
- 日常使用:Bash(默认)或 Zsh(更好体验)
- 写通用脚本 :遵循 POSIX 标准,用
/bin/sh
(Dash) 测试 - 嵌入式/资源受限系统:Ash 或 Dash
- 高级交互:Zsh + Oh My Zsh
切换默认 Shell:
bash
chsh -s /bin/zsh # 切换到 Zsh
chsh -s /bin/bash # 切换回 Bash