第3章 为什么输入一个命令,电脑就会执行?
上一章我们知道程序不能直接控制硬件,必须经过 Kernel。
但是又出现一个问题。例如:你打开 Linux。
输入:
ls为什么电脑就知道:
我要查看目录?
是谁认识:
ls这个单词?
Kernel吗?
不是。
真正认识它的是:
Shell。
第1节 什么是 Shell?
英文:
Shell
中文一般翻译:
命令解释器(Command Interpreter)
为什么叫 Shell(外壳)?
因为它包裹在 Kernel 外面。
可以理解成:
用户 ↓ Shell ↓ Kernel ↓ 硬件Shell就是:用户和Kernel之间的翻译官。
举一个生活例子。
假设:
你去银行,你不会直接操作银行后台系统。
而是告诉柜员:
我要转账。
柜员把你的意思翻译成:
银行后台能理解的操作。
这里柜员就是Shell。
银行后台就是Kernel。
所以Shell就是
一个负责理解命令、调用程序、把结果显示出来的软件。
第2节 Shell 到底做了什么?
假设输入:
pwd整个过程其实发生了很多事情。
第一步:
键盘收到:
p w d第二步:
Terminal显示:
pwd第三步:
你按Enter。
第四步:
Shell开始工作。
它首先想:
pwd 是什么?
它开始寻找:
有没有叫 pwd 的程序?找到以后执行它。
程序里面需要知道:当前目录。
于是程序向Kernel发起:系统调用。
Kernel返回:
/home/xShell收到以后,把结果交给Terminal。
Terminal显示出来整个流程:
键盘 ↓ Terminal ↓ Shell ↓ 程序 ↓ Kernel ↓ 硬盘/内存 ↓ Shell ↓ Terminal ↓ 屏幕学习每一个命令其实都是这个流程。
第3节 Terminal 是什么?
这是很多新手最大的误区。
很多人认为黑窗口就是Shell,其实不是。
例如:
Windows里面你看到:
Windows Terminal它只是一个窗口程序。
Linux里面:
例如:
GNOME Terminal也是一个窗口程序。
它负责:
- 接收键盘输入
- 显示文字
- 复制粘贴
- 滚动历史记录
- 改变字体颜色
但是:
它不会解释:
ls什么意思。
解释命令的始终是:Shell。
所以Terminal更像:一本空白的笔记本。
Shell:才是真正会思考的人。
第4节 Terminal 和 Shell 的关系
假设:
你和国外朋友聊天。
你使用:微信。
微信负责:
输入文字 发送消息 显示消息但是微信不会翻译,真正翻译的人是:翻译软件。
Linux也是一样。Terminal负责:
输入 显示Shell负责:
理解命令 执行命令所以关系应该是:
你 ↓ Terminal ↓ Shell ↓ Kernel ↓ 硬件第5节 Bash 是什么?
现在能解释:
为什么很多Linux教程。
第一句话就是:
bashBash是什么?
它是一种Shell。
Linux里面有很多Shell。
例如:
bash zsh fish dash sh都属于Shell。
只是功能不同,风格不同。
企业里面最常见的是:
bashMac现在默认:
zsh有些高级用户喜欢:
fish因为自动补全更智能,界面更漂亮。
所以以后别人说:
打开 Bash。
真正意思就是:
打开 Bash 这个 Shell。
第6节 Windows 为什么有 CMD 和 PowerShell?
很多人觉得:Linux才有Shell。
其实不是。
Windows也有。
例如:
最老的是:
CMD后来微软推出:
PowerShellPowerShell其实也是Shell。
只是能力比CMD强很多。
例如:
Linux:
lsWindows CMD:
dir作用其实一样,都是查看目录,只是命令不同。
第7节 Shell 不只是执行命令
很多新手认为Shell只能输入:
ls其实不是。
Shell本身还是一种编程语言。
例如:
echo Hello输出:
Hello例如:
name="Tom" echo $name输出:
Tom以后你会学习:Shell Script(Shell脚本)。
就是把很多命令写成一个程序,自动执行。
所以很多服务器维护,其实都是Shell脚本完成的。
第8节 PATH —— Shell 怎么知道命令在哪?
这里有一个非常重要的问题。
假设:
你输入:
lsShell为什么知道去哪里找?
答案就是:
PATH(环境变量)。
PATH可以理解成:
一张"搜索目录清单"。
例如:
PATH里面记录了:
/usr/bin /bin /usr/local/bin当你输入:
lsShell就会先去:
/usr/bin找。
没有。
继续:
/bin找。
找到:
/bin/ls于是执行它。
所以真正执行的是:
/bin/ls只是PATH帮你省略了。
以后安装很多软件其实就是把程序放进PATH里面,这样,任何地方都能直接运行。
第9节 一个完整命令的生命周期
现在我们终于可以完整解释,为什么:
ls能够工作。
整个过程:
① 你按键盘 ↓ ② Terminal显示文字 ↓ ③ 按Enter ↓ ④ Shell读取命令 ↓ ⑤ Shell通过PATH寻找程序 ↓ ⑥ 找到: /bin/ls ↓ ⑦ 执行ls程序 ↓ ⑧ ls向Kernel请求读取目录 ↓ ⑨ Kernel读取磁盘 ↓ ⑩ Kernel返回数据 ↓ ⑪ ls整理输出 ↓ ⑫ Terminal显示结果看到这里你应该已经发现:一个看似简单的命令,背后其实经过了十几个步骤。
本章总结
今天请记住七句话:
- Terminal 是窗口,它负责输入和显示。
- Shell 是命令解释器,它负责理解和执行命令。
- Kernel 不认识
ls、pwd等命令,它只负责系统资源和系统调用。 - Bash、Zsh、Fish 都是不同的 Shell。
- Windows 的 CMD 和 PowerShell,本质上也是 Shell。
- PATH 告诉 Shell 去哪里寻找可执行程序。
- 每执行一个命令,都经历"Terminal → Shell → 程序 → Kernel → 硬件 → 返回结果"这一完整流程。
到这里,你已经完成了 Linux 世界观的三块基石
现在你已经理解了:
- 第1章:操作系统是什么。
- 第2章:Kernel(内核)如何管理硬件。
- 第3章:Shell 和 Terminal 如何让人类与 Kernel 交流。
这三个知识点,构成了后面所有 Linux 学习的基础。
下一章预告(非常重要)
从下一章开始,我们终于要进入真正的 Linux 世界。
主题是:
Linux 的文件系统——为什么 Linux 没有 C 盘、D 盘?
这一章会彻底改变你对文件和目录的理解。学完后,你不仅知道/home、/etc、/var是做什么的,还会理解一句 Linux 圈最经典的话:
Everything is a file(万物皆文件)。
这是 Linux 最独特、也是最优雅的设计思想之一。
