Ubuntu零基础入门到精通【6.2讲】:Bash、Zsh、Fish 的区别——你的 Shell 选择指南!
2026/9/20 2:41:12 网站建设 项目流程

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。
本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

🎯适合人群:Linux 初学者、Ubuntu 新手、计算机专业学生、后端 / 运维 / 测试入门同学、想搭建 Linux 开发环境的开发者、准备学习服务器部署的同学,以及想从 Windows 过渡到 Ubuntu 工作流的用户。

从“会打开终端”到“能管理系统”,从“复制命令”到“理解 Linux 思维”,这一次,我们不零散学,而是一路滚雪球!

🎉限时福利:当前专栏活动中,一次订阅,终身阅读,后续更新章节全部免费解锁👉 立即查看👈️

演示环境说明:

  • 开发工具:Visual Studio Code / JetBrains 系列 IDE / Vim / Nano
  • Ubuntu版本:Ubuntu 22.04 LTS / Ubuntu 24.04 LTS,推荐 Ubuntu 24.04 LTS
  • Linux内核版本:Linux Kernel 6.x 或更高
  • 终端环境:Bash / Zsh
  • 包管理工具:APT / Snap / Flatpak
  • 远程连接工具:OpenSSH / Windows Terminal / MobaXterm / Termius
  • 虚拟化环境:VMware Workstation / VirtualBox / WSL2 / 云服务器
  • 容器环境:Docker / Docker Compose
  • 操作系统:Ubuntu Desktop / Ubuntu Server

全文目录:

    • 一、前言:你打开终端,然后呢?
    • 二、本文要解决什么问题?
    • 三、Shell 是什么?为什么有这么多种?
      • 3.1 从命令到执行:Shell 在哪里?
      • 3.2 Shell 的名字从哪里来?
      • 3.3 在 Ubuntu 中,Shell 在哪里?
    • 四、Bash:Ubuntu 的默认 Shell,你必须先了解它
      • 4.1 Bash 是什么
      • 4.2 Bash 的核心特性
      • 4.3 Bash 的提示符解析
      • 4.4 Bash 的配置文件体系
      • 4.5 Bash 的局限性
    • 五、Zsh:功能强大的进化版 Shell
      • 5.1 Zsh 的设计哲学
      • 5.2 Zsh 的核心特性
      • 5.3 Oh My Zsh:Zsh 的配置框架
      • 5.4 Zsh 的配置文件
      • 5.5 Zsh 的局限性
    • 六、Fish:开箱即用的现代 Shell
      • 6.1 Fish 的设计哲学
      • 6.2 Fish 的核心特性
      • 6.3 Fish 的语法:和 Bash 有什么不同
      • 6.4 Fish 的配置文件
      • 6.5 Fisher 和 fish 插件生态
      • 6.6 Fish 的局限性
    • 七、三者的核心对比
      • 7.1 全面对比表
      • 7.2 适用场景推荐
      • 7.3 我的个人使用方案
    • 八、实验环境准备
      • 8.1 确认系统版本
      • 8.2 确认当前 Shell
      • 8.3 更新系统软件源
    • 九、案例一:在 Ubuntu 中认识你当前的 Shell
      • 9.1 案例目标
      • 9.2 第一步:认识你的 Shell 环境
      • 9.3 第二步:探索 Bash 配置文件
      • 9.4 第三步:给 Bash 添加自定义配置
      • 9.5 命令解析
      • 9.6 初学者常见错误
    • 十、案例二:安装并体验 Zsh + Oh My Zsh
      • 10.1 案例目标
      • 10.2 第一步:安装 Zsh
      • 10.3 第二步:临时启动 Zsh 体验
      • 10.4 第三步:安装 Oh My Zsh
      • 10.5 第四步:安装必备插件
      • 10.6 第五步:配置主题
      • 10.7 第六步:配置实用的 Zsh 选项
      • 10.8 命令解析
      • 10.9 Oh My Zsh 插件推荐
    • 十一、案例三:安装 Fish 并感受它的独特之处
      • 11.1 案例目标
      • 11.2 第一步:安装 Fish
      • 11.3 第二步:临时体验 Fish
      • 11.4 第三步:了解 Fish 的配置文件
      • 11.5 第四步:Fish 的函数系统
      • 11.6 第五步:安装 Fisher 和插件(可选)
      • 11.7 案例后的脚本兼容性验证
      • 11.8 命令解析
    • 十二、Shell 配置文件详解
      • 12.1 三种 Shell 的配置文件对比
      • 12.2 环境变量应该放在哪里
      • 12.3 各 Shell 配置文件加载顺序
    • 十三、Shell 切换、默认 Shell 修改与注意事项
      • 13.1 临时切换 Shell
      • 13.2 永久修改默认 Shell
      • 13.3 修改 root 用户的 Shell
      • 13.4 修改特定用户的 Shell(系统管理场景)
      • 13.5 如果改错了怎么恢复
    • 十四、服务器环境中的 Shell 选择建议
      • 14.1 为什么服务器上坚持使用 Bash
      • 14.2 服务器上的 Bash 增强
      • 14.3 Ubuntu Server 上安全地管理多用户 Shell
    • 十五、脚本兼容性问题:Bash 写的脚本在 Zsh/Fish 里能跑吗?
      • 15.1 关于 Shebang 行
      • 15.2 Bash 脚本中的常见坑(对 Zsh 用户)
      • 15.3 Fish 脚本的正确写法
    • 十六、常见问题与踩坑总结
      • Q1:我应该用 Bash、Zsh 还是 Fish?
      • Q2:切换了默认 Shell 之后,为什么有些命令突然找不到了?
      • Q3:Oh My Zsh 安装后终端变慢了,怎么办?
      • Q4:Fish 的语法和 Bash 差异太大,我该怎么过渡?
      • Q5:我在服务器上用 Zsh/Fish,会影响 cron 任务吗?
      • Q6:Zsh 里的 `~` 扩展和 Bash 里不一样?
      • Q7:我在 `.zshrc` 里加了配置,但 SSH 登录后不生效?
      • Q8:为什么修改了 Fish 的配置后,新开的终端不生效?
      • Q9:`chsh` 改了默认 Shell 后,当前终端没有变化?
      • Q10:怎么判断一个脚本是用什么 Shell 语法写的?
      • Q11:我把 `/bin/sh` 和 `/bin/bash` 搞混了,有什么区别?
      • Q12:我装了很多 Shell,怎么切换回 Bash?
      • Q13:`PS1` 改坏了,提示符显示不正常怎么恢复?
      • Q14:Oh My Zsh 能卸载吗?
      • Q15:我同时用 Zsh 和 Fish,两边的配置要维护两份,太麻烦了?
    • 十七、最佳实践建议
      • 17.1 Shell 选择与迁移的最佳实践
      • 17.2 Bash 配置的最佳实践
      • 17.3 Zsh 配置的最佳实践
      • 17.4 Fish 使用的最佳实践
      • 17.5 脚本开发的最佳实践
    • 十八、扩展知识点:Shell 背后的 Linux 世界
      • 18.1 Shell 与进程:fork/exec 模型
      • 18.2 Shell 内置命令 vs 外部命令
      • 18.3 环境变量和 Shell 变量的区别
      • 18.4 Shell 的工作机制:解析到执行
    • 十九、完整操作流程回顾
      • 19.1 从零开始认识和配置 Shell 的完整流程
      • 19.2 三种 Shell 安装命令汇总
    • 二十、总结与下一步学习建议
      • 20.1 本篇文章核心总结
      • 20.2 你学到了什么
      • 20.3 一个建议:先别急着换 Shell
      • 20.4 下一节预告
    • 🧧 学习福利 · 限时开放 🧧
    • 🫵 Who am I?

一、前言:你打开终端,然后呢?

我第一次认真接触 Linux 是在大学的一台二手笔记本电脑上,装的是 Ubuntu 16.04。打开终端的时候,我看到一个闪烁的光标,完全不知道该输入什么。那时候我对"终端"的全部理解,就是"一个黑框框,可以输命令"。

后来开始慢慢用,才发现这个"黑框框"背后藏着一个叫Shell的东西。然后某一天,同事告诉我他用的是 Zsh,另一个朋友跟我说 Fish 才是最好用的,还有人说服务器只认 Bash。我当时完全搞不清楚这些东西有什么关系,也不知道自己该用哪个。

相信很多刚入门 Ubuntu 的读者都有类似的困惑。你打开终端,看到命令提示符,开始敲命令——但你并不知道,这些命令是谁在解析、谁在执行。你甚至不知道,你现在用的这个东西叫什么名字。

这篇文章就从这里开始讲。我们不仅要搞清楚 Bash、Zsh、Fish 分别是什么,更要搞清楚它们各自的定位、适用场景、配置方式、以及在 Ubuntu 实际使用中你该怎么选择。

这不是一篇简单的"三者对比表格"文章。我希望读完之后,你能真正理解 Shell 在整个 Linux 系统中的位置,以及为什么这个选择对于一个 Ubuntu 用户来说比它看起来的重要得多。

二、本文要解决什么问题?

在进入正文之前,我先把这篇文章想回答的核心问题列出来,方便你按需阅读:

  1. Shell 是什么?它在 Ubuntu 中扮演什么角色?
  2. Bash、Zsh、Fish 分别是什么,有什么区别?
  3. Ubuntu 为什么默认使用

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询