🏆 本文收录于 《滚雪球学 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?
- 二、本文要解决什么问题
- 三、Shell 是什么——从操作系统说起
- 3.1 操作系统的分层结构
- 3.2 Shell 的本质定义
- 3.3 Shell 和终端的区别
- 3.4 Shell 和脚本语言的关系
- 四、Shell 的历史与演进
- 4.1 从 sh 到 Bash
- 4.2 Ubuntu 默认使用哪种 Shell
- 4.3 主流 Shell 简单对比
- 五、Shell 是怎么工作的——命令执行流程
- 5.1 交互式 Shell 的执行流程
- 5.2 Shell 如何找到命令
- 5.3 内置命令 vs 外部命令
- 5.4 环境变量与 PATH 的关系
- 六、实验环境准备
- 6.1 确认你的 Ubuntu 版本
- 6.2 打开终端的三种方式
- 6.3 确认当前使用的 Shell
- 七、案例一:认识 Shell,让第一条命令跑起来
- 7.1 你的第一条 Shell 命令
- 7.2 理解命令的结构
- 7.3 Shell 的提示符到底在说什么
- 7.4 命令解析
- 八、案例二:Shell 变量、环境变量与配置文件
- 8.1 Shell 变量的基础用法
- 8.2 环境变量是什么
- 8.3 查看与修改 PATH
- 8.4 Shell 配置文件的加载顺序
- 8.5 命令解析
- 九、案例三:Shell 脚本入门——让命令组合起来工作
- 9.1 为什么需要 Shell 脚本
- 9.2 第一个 Shell 脚本
- 9.3 Shell 脚本中的逻辑控制
- 9.4 Shell 脚本在运维中的真实作用
- 9.5 命令解析
- 十、Shell 与 Ubuntu 系统的深层联系
- 10.1 Shell 与 systemd 的协作
- 10.2 Shell 与文件权限模型
- 10.3 Shell 与 APT 包管理
- 10.4 Shell 与 SSH 远程连接
- 十一、核心概念与命令速查解析
- 十二、常见问题与踩坑总结
- 1. 为什么我配置了 PATH 但命令还是找不到?
- 2. `sudo command` 和直接切换到 root 执行有什么区别?
- 3. `command not found` 和 `Permission denied` 有什么区别?
- 4. 为什么改了 `~/.bashrc` 但新打开的终端还是没有生效?
- 5. Shell 脚本中 `[[ ]]` 和 `[ ]` 有什么区别?
- 6. 为什么脚本里的 `cd` 命令切换了目录,但脚本执行完终端的目录没有变?
- 7. 为什么有时候命令输出是彩色的,有时候又不是?
- 8. Shell 中的引号(单引号和双引号)有什么区别?
- 9. `&&` 和 `;` 有什么区别?
- 10. 为什么脚本里调用 Python/Node/某个命令没问题,但 cron 里执行同一个脚本却找不到命令?
- 11. `echo` 在不同系统上的行为为什么有时候不一致?
- 12. 为什么从网上复制来的脚本有时候执行会出现奇怪的错误?
- 十三、最佳实践建议
- 脚本安全编写习惯
- Shell 和环境变量管理
- 学习路线建议
- 十四、扩展知识点
- 14.1 Shell 中的特殊变量
- 14.2 Shell 的交互历史功能
- 14.3 进程管理与后台执行
- 14.4 Shell 中的正则表达式基础
- 十五、完整操作流程回顾
- 十六、总结与下一节预告
- 本文核心知识点回顾
- 下一节预告
- 🧧 学习福利 · 限时开放 🧧
- 🫵 Who am I?
一、前言:为什么你必须理解 Shell?
我还记得第一次打开 Ubuntu 终端的感觉——黑色的背景,白色的字,一个闪烁的光标,什么都没有。
那个时候我脑子里只有一个问题:这东西怎么用?
后来我才意识到,那个"黑框框"不是工具的终点,而是 Linux 世界的入口。你在里面输入的每一行文字,都会被一个叫做Shell的程序解读、翻译、执行。它是你与操作系统内核之间的语言翻译官,是 Linux 学习中无法绕过的第一个核心概念。
很多人学 Ubuntu 的方式是这样的:遇到问题,去搜索,复制命令,粘贴运行,看看有没有效果。偶尔有效,偶尔报错,报错了再去搜。这样学下来,会用一些命令,但永远不知道为什么这样写,下次遇到稍微不一样的问题又不知道怎么办。
这种学法不是不行,但它的上限很低。
真正的 Linux 使用能力,是建立在理解 Shell 工作方式的基础上的。当你清楚 Shell 是什么、它如何解析你输入的命令、它和内核之间是什么关系、它的配置文件怎么工作,你才能真正"看懂"那些命令在干什么,才能在出错的时候知道去哪里找原因,才能在写脚本的时候知道为什么要这样写而不是那样写。
这就是本节文章的核心目的:带你从零开始,真正理解 Shell 是什么。
我会尽量少用抽象的定义,多用实际案例和真实场景来说明。你不需要先去读一本操作系统教材,只需要跟着本文一步一步走,在 Ubuntu 上亲手敲这些命令,感受 Shell 是如何工作的。