实用指南: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)并扩展各种新特性
  • 常用于日常终端交互、脚本编写、系统管理任务

示例

# 命令别名
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
posted on 2025-09-30 14:56  ljbguanli  阅读(62)  评论(0)    收藏  举报