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
相关推荐
weixin_660096788 小时前
zsh中使用自动补全zsh-autosuggestions
linux·ubuntu·zsh·zshrc
写代码的学渣12 小时前
ubuntu 22.04 新装的系统 xshell 连不上
linux·运维·ubuntu
虚伪的空想家15 小时前
KVM的ubuntu虚机如何关闭安全启动
linux·安全·ubuntu
t1987512821 小时前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
晚风吹人醒.1 天前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
皮小白1 天前
ubuntu开机检查磁盘失败进入应急模式如何修复
linux·运维·ubuntu
sulikey1 天前
Linux基础指令与权限管理深度解析:从入门到精通
linux·运维·服务器·ubuntu·centos·linux命令·linux权限
daqinzl1 天前
Docker 安装 Ubuntu
ubuntu·docker
Eric.Lee20212 天前
ubuntu 安装 Miniconda
linux·运维·python·ubuntu·miniconda
W***83202 天前
如何在 Ubuntu 22.04 上安装 MySQL
linux·mysql·ubuntu