对于计算机专业的学生来说,最具有仪式感的时刻,莫过于学长学姐神情凝重地对你说:“来,打开终端,输入这行命令……”

那一刻,屏幕上跳出一个漆黑的窗口,闪烁着五颜六色的字符。你可能会疑惑:在图形化界面如此发达的今天,为什么很多计算机专业人士依然痴迷于这种简陋的交互方式?这个黑窗口背后,到底隐藏着怎样的秘密?
内核:管理系统资源
要理解这一切,得先从计算机的“权力中心”说起。
计算机运行着的每一个程序都需要资源:运行需要内存,存储需要磁盘,计算需要 CPU。然而,资源是有限的。如果每个程序都随心所欲地抢占内存、写入磁盘,系统瞬间就会陷入崩溃。
于是,操作系统应运而生。它的本质是一个“计算机资源管家”,而其中最核心的部分,被称为操作系统内核,简称内核。
内核运行在受保护的环境中,负责进程调度、内存管理、文件系统和设备等工作。普通应用程序不能随意操作这些资源,而是通过系统调用请求内核提供服务。
Shell:读取并执行命令
既然内核如此高冷,我们该如何指挥计算机干活呢?
Shell 是命令解释器。它读取并解析我们输入的命令,处理变量展开、重定向和管道等语法,再决定如何执行命令。Shell 并不是所有程序访问内核的必经之路:图形界面应用、后台服务和其他程序同样可以通过库函数和系统调用使用内核服务。
当你输入 mkdir photos 时,大致会经历下面的过程:
- 终端模拟器把输入交给 Shell;
- Shell 解析命令,判断它是函数、内建命令还是外部程序;
- 对于
mkdir这样的外部命令,Shell 会按搜索规则找到并启动对应的可执行程序; mkdir程序再通过库函数和系统调用,请求内核创建目录。
像 cd 这样需要改变 Shell 自身工作目录的命令,通常由 Shell 以内建命令的形式直接执行。内建命令和外部程序看起来都像是在“运行一条命令”,实现方式却不完全相同。
终端:运行 Shell 程序的黑窗口
那么,那个黑黑的窗口又是什么?为什么它叫终端?
这要回到计算机的发展历史来讲。在上个世纪,计算机是巨大的昂贵设备,操作不便。程序员主要通过一台只有键盘和显示器的物理设备连接到主机上,这个设备就是终端。
现在的个人计算机通常使用终端模拟器(Terminal Emulator)。它负责显示字符、接收键盘输入,并把输入输出交给其中运行的 Shell。终端和 Shell 是两个不同的程序,只是日常使用时经常一起出现。
为什么我们依然需要这个“黑窗口”?
现在的操作系统,比如 Windows、macOS,都有着成熟的图形界面(GUI),终端看起来反而不够直观。但在开发、运维和批量处理任务中,命令行仍有自己的优势。
首先是适合重复和批量操作。创建一个目录只需要 mkdir 目录名;如果要按规则处理许多文件,也可以把步骤写成脚本重复执行。图形界面更适合直观探索,命令行则更容易复现、组合和自动化,两者并不是互相取代的关系。
其次是 Shell 的强大能力。Shell 拥有强大的“管道”机制。你可以把 A 命令的输出直接塞给 B 命令,再把 B 的结果传给 C。这种自由组合,能让你在几分钟内搭建出一个复杂的自动化处理流程。
总结
在我第一次接触到终端的时候,觉得这个家伙实在是太简陋了;后来用多了终端,才发现终端的效率其实非常高,怪不得很多程序员喜欢使用。
这篇文章先梳理到这里。后面我还会继续整理进程、系统调用和终端实现相关的内容。