在 Ubuntu 及大多数 Linux 发行版中,“命令行”(Shell)是用户与操作系统交互的重要工具。常见的交互式 Shell 有 Bash、Zsh、Ash、Dash 等。虽然它们都可以执行命令脚本,但用途、性能、兼容性和功能特性各不相同。
1. Shell 简介Shell 是一个命令解释器,位于 Linux 用户与内核之间,作用包括:
接收用户输入的命令并解释执行提供脚本编程能力(变量、条件判断、循环、函数等)提供命令补全、历史记录等交互功能在 Ubuntu 中,默认登录时使用的交互式 Shell 是 Bash,但系统脚本中的 /bin/sh 实际链接的是 Dash(为了提升启动速度和兼容性)。
2. Bash(Bourne-Again Shell)特点与使用:
存放位置:/bin/bashUbuntu 默认交互式 Shell功能丰富:命令补全、历史搜索、提示符自定义、数组支持完全兼容 Bourne Shell(sh)并扩展各种新特性常用于日常终端交互、脚本编写、系统管理任务示例:
# 命令别名
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)适合高级用户和需要个性化终端的人示例:
# 高级通配符
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❌很高中-慢高高级交互、个性化终端AshBusyBox 内❌低很快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:
chsh -s /bin/zsh # 切换到 Zsh
chsh -s /bin/bash # 切换回 Bash