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
相关推荐
欧云服务器5 天前
怎么让脚本命令可以同时在centos、debian、ubuntu执行?
ubuntu·centos·debian
智渊AI5 天前
Ubuntu 20.04/22.04 下通过 NVM 安装 Node.js 22(LTS 稳定版)
ubuntu·node.js·vim
The️6 天前
Linux驱动开发之Read_Write函数
linux·运维·服务器·驱动开发·ubuntu·交互
再战300年6 天前
Samba在ubuntu上安装部署
linux·运维·ubuntu
qwfys2006 天前
How to install golang 1.26.0 to Ubuntu 24.04
ubuntu·golang·install
归叶再无青6 天前
web服务安装部署、性能升级等(Apache、Nginx)
运维·前端·nginx·云原生·apache·bash
木尧大兄弟6 天前
Ubuntu 系统安装 OpenClaw 并接入飞书记录
linux·ubuntu·飞书·openclaw
小虾爬滑丫爬6 天前
ubuntu上设置Tomcat 开机启动
ubuntu·tomcat·开机启动
老师用之于民6 天前
【DAY25】线程与进程通信:共享内存、同步机制及实现方案
linux·c语言·ubuntu·visual studio code
小虾爬滑丫爬6 天前
Ubuntu 上设置防火墙
ubuntu·防火墙