Ubuntu 中 Bash / Zsh / Ash / Dash 的使用与区别(含对比图)

在 Ubuntu 及大多数 Linux 发行版中,"命令行"(Shell)是用户与操作系统交互的重要工具。常见的交互式 Shell 有 BashZshAshDash 等。虽然它们都可以执行命令脚本,但用途、性能、兼容性和功能特性各不相同。


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
相关推荐
习惯就好zz5 小时前
WSL2 安装Ubuntu卡在安装进度0%无响应问题解决
linux·windows·ubuntu·wsl·wsl2
躲猫猫的喵喵6 小时前
Ubuntu2204降内核版本
linux·运维·服务器·ubuntu
HIT_Weston7 小时前
18、【Ubuntu】【远程开发】技术方案分析:私网ip掩码
linux·tcp/ip·ubuntu
天一生水water10 小时前
ubuntu使用毫秒镜像方式安装docker mysql
ubuntu·阿里云·docker
虚伪的空想家11 小时前
华为A800I A2 arm64架构鲲鹏920cpu的ubuntu22.04 tls配置直通的grub配置
ubuntu·华为·架构·虚拟化·kvm·npu·国产化适配
祎直向前11 小时前
在Ubuntu中安装并配置ssh
linux·ubuntu·ssh
不懂音乐的欣赏者16 小时前
Windows 下 ROS/ROS2 开发环境最优解:WSL 比直接安装、虚拟机、双系统更优雅!
linux·windows·ubuntu·ros·wsl·ros2·双系统
rit843249918 小时前
在Ubuntu上配置Nginx实现开机自启功能
数据库·nginx·ubuntu
顾安r1 天前
11.7 脚本网站 中国象棋
python·bash
序属秋秋秋1 天前
《Linux系统编程之开发工具》【实战:倒计时 + 进度条】
linux·运维·服务器·c语言·c++·ubuntu·系统编程